Mongodb 我们应该在大量阅读的应用程序中使用dbref还是嵌入式文档

Mongodb 我们应该在大量阅读的应用程序中使用dbref还是嵌入式文档,mongodb,Mongodb,我们正在开发一个应用程序,它读起来很重,可能有数百万个文档。我们需要参考几乎所有集合中的用户信息。用户信息的某些属性可以随时更改 我们应该使用DBref还是在所有集合中嵌入用户信息 在大量阅读的应用程序中,DBref的性能有多差 如果我们不使用DBref,如果用户信息定期更改,我们如何更新每个文档 在Mongodb中,对于这种用例,DBref和嵌入式文档是否有其他选择?DBref与传统关系系统中的外键完全不同。这只是一个惯例,它可以很容易地告诉司机(谁有能力)自动加载那些引用的文档。有关这方面的

我们正在开发一个应用程序,它读起来很重,可能有数百万个文档。我们需要参考几乎所有集合中的用户信息。用户信息的某些属性可以随时更改

我们应该使用DBref还是在所有集合中嵌入用户信息

在大量阅读的应用程序中,DBref的性能有多差

如果我们不使用DBref,如果用户信息定期更改,我们如何更新每个文档


在Mongodb中,对于这种用例,DBref和嵌入式文档是否有其他选择?

DBref与传统关系系统中的外键完全不同。这只是一个惯例,它可以很容易地告诉司机(谁有能力)自动加载那些引用的文档。有关这方面的更多信息,请参阅

根据使用的驱动程序,您可能只能在需要时自动加载这些引用(惰性),因此性能开销应该非常小。但是存储开销比另一个文档的简单引用id稍高。基本上,我会说,如果链接文档可以是变量类型,那么应该只使用那些dbref。如果它是静态的,那么您就只能使用id-references和您自己的惰性加载程序功能,所以您不会重复自己的操作

不要重复你自己(或数据库术语中的数据重复)也适用于你的上下文,正如MongoDB建议的(我也会这么建议),这只是一个例子。否则,您将有更高的存储使用率和运行时间较长的更新,只更新一个逻辑实体(物理上经常重复)


使用前面提到的自定义惰性加载程序,您可以添加一些缓存,以便不是每个查找都会导致mongodb查找。很可能您需要注意缓存和数据库之间的数据一致性。

谢谢您的回复。这真的很有帮助。