当我选择通过模式或包括分离集合?
答
您应该根据应用程序的访问策略设计您的MongoDB集合。
一般情况下,你应该去当嵌入:当“主”数据检索总是检索
- 嵌入式数据。如果你使用的是 ,那么你总是只检索部分数据(比如说可能在coll1中),但很少你还需要嵌入数据(coll2),那么嵌入就不会那么好。
- 嵌入数据不经常修改。如果您将同一个对象嵌入多个文档中,则必须在出现更改和一致性问题时对其进行更新。
- 嵌入数据的基数不是太大。请记住,MongoDB文档的最大大小是16MB。所以这取决于你想要嵌入到文档中的内容。例如,如果您可以为每个文档设置100K嵌入对象,则不得不拆分集合
- 数据完整性可能是一个问题:通过将数据嵌入“主”文档,您可以利用文档级锁定(if你正在使用Wired Tiger存储引擎)。否则,如果您处于并发系统中,使用这两种集合设计,您必须在应用程序级别自行处理锁定机制。
+0
需要注意的是数据完整性部分高度依赖于用例。很可能实际上不是嵌入,而是记录更改并汇总结果可能是更可行的方法,尤其是当并发访问是常规时。 –
+0
谢谢!非常多 – HungryBird
+0
@HungryBird如果答案对您有帮助,请将其标记为已接受 –
这实际上只取决于我们的用例。 part2有点迟,但您可能会发现https://blog.mahlberg.io/blog/2015/11/05/data-modelling-for-mongodb.html有帮助。 –