我们是否应该在读取繁重的应用程序中使用dbref或嵌入式文档

时间:2012-06-13 04:24:05

标签: mongodb

我们正在开发一个阅读量很大的应用程序,可能有数百万个文档。我们需要在几乎每个集合中引用用户信息。用户信息有一些属性可能会不时发生变化。

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

重读应用程序中的DBref性能有多糟糕?

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

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

1 个答案:

答案 0 :(得分:8)

DBref与传统关系系统中的外键不同。它只是一个容易告诉司机(谁有能力)自动加载那些推荐文件的惯例。有关详细信息,请参阅DBRef

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

不要重复自己(或数据库术语中的数据重复)也适用于您的上下文,正如MongoDB建议的那样(我也是如此),仅适用于link your documents。否则,您将拥有更高的存储使用率和更长时间运行的更新,仅更新一个逻辑实体(经常在物理上重复)。

使用前面提到的自定义延迟加载器,您可以添加一些缓存,以便不是每个查找实际上都会导致mongodb查找。您很可能需要处理缓存和数据库之间的数据一致性。