我们正在开发一个阅读量很大并且可能包含数百万个文档的应用程序。几乎每个集合我们都需要引用用户信息。用户信息具有一些可能不时改变的属性。
我们应该使用 DBref 还是将用户信息嵌入到所有集合中?
在大量读取的应用程序中,DBref 性能有多差?
如果我们不使用DBref,如果用户信息定期更改,我们如何更新每个文档?
在 Mongodb 中,对于这种用例,有 DBref 和嵌入文档的替代方案吗?
DBref 与传统关系系统中的外键完全不同。它只是一个约定,可以轻松地告诉驱动程序(有能力的人)自动加载这些引用的文档。请参见DBRef http://docs.mongodb.org/manual/applications/database-references/欲了解更多信息。
根据所使用的驱动程序,您可能只能在需要时自动加载这些引用(惰性),因此性能开销应该非常小。但存储开销比简单引用另一个文档的_id要高一些。基本上,我想说,如果链接的文档可以是变量类型,则应该仅使用这些 DBref。如果它是静态的,那么你就会被 _id-references 困住,也许你自己的惰性加载器功能也会被困住,所以你不会重复自己。
不要重复自己(或数据库术语中的数据重复)也适用于您的上下文,正如 MongoDB 建议的那样(所以我也会这样做),只是链接您的文档 http://www.mongodb.org/display/DOCS/Schema+Design#SchemaDesign-EmbeddingandLinking。否则,您将拥有更高的存储使用率和运行时间较长的更新,以仅更新一个逻辑实体(物理上经常重复)。
使用前面提到的自定义延迟加载程序,您可以添加一些缓存,这样并不是每个查找实际上都会导致 mongodb 查找。您很可能需要注意缓存和数据库之间的数据一致性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)