Mongodb 当我选择按模式或包含分离集合时?

Mongodb 当我选择按模式或包含分离集合时?,mongodb,mongoose,Mongodb,Mongoose,在蒙古语数据库中,何时按模式分离集合,何时将它们放入一个集合?拥有更多集合的缺点是什么?您应该根据应用程序的访问策略设计MongoDB集合 通常,如果出现以下情况,则应选择嵌入: 在检索“主”数据时,始终检索嵌入式数据。如果 相反,您总是只检索数据的一部分(比如coll1中可能包含的数据),但很少需要嵌入数据(coll2),那么嵌入就不会这么好了 嵌入数据不经常进行修改。如果在多个文档中嵌入了同一个对象,则当可能出现某些更改和一致性问题时,必须在所有文档中更新该对象 嵌入数据的基数不太大。记住

在蒙古语数据库中,何时按模式分离集合,何时将它们放入一个集合?拥有更多集合的缺点是什么?

您应该根据应用程序的访问策略设计MongoDB集合

通常,如果出现以下情况,则应选择嵌入:

  • 在检索“主”数据时,始终检索嵌入式数据。如果 相反,您总是只检索数据的一部分(比如coll1中可能包含的数据),但很少需要嵌入数据(coll2),那么嵌入就不会这么好了
  • 嵌入数据不经常进行修改。如果在多个文档中嵌入了同一个对象,则当可能出现某些更改和一致性问题时,必须在所有文档中更新该对象
  • 嵌入数据的基数不太大。记住MongoDB文档的最大大小是16MB。因此,这取决于您希望嵌入到文档中的内容。例如,如果每个文档可以有100K嵌入对象,则强制拆分集合
  • 数据完整性可能是一个问题:通过将数据嵌入“主”文档,您可以利用文档级锁定(如果您使用的是Wired Tiger storage engine)。否则,若您在一个并发系统中,使用两个集合设计,您必须自己在应用程序级别处理锁定机制

您应该根据应用程序的访问策略设计MongoDB集合

通常,如果出现以下情况,则应选择嵌入:

  • 在检索“主”数据时,始终检索嵌入式数据。如果 相反,您总是只检索数据的一部分(比如coll1中可能包含的数据),但很少需要嵌入数据(coll2),那么嵌入就不会这么好了
  • 嵌入数据不经常进行修改。如果在多个文档中嵌入了同一个对象,则当可能出现某些更改和一致性问题时,必须在所有文档中更新该对象
  • 嵌入数据的基数不太大。记住MongoDB文档的最大大小是16MB。因此,这取决于您希望嵌入到文档中的内容。例如,如果每个文档可以有100K嵌入对象,则强制拆分集合
  • 数据完整性可能是一个问题:通过将数据嵌入“主”文档,您可以利用文档级锁定(如果您使用的是Wired Tiger storage engine)。否则,若您在一个并发系统中,使用两个集合设计,您必须自己在应用程序级别处理锁定机制

这实际上只取决于我们的用例。第2部分我有点晚了,但您可能会发现它很有用。这实际上只取决于我们的用例。我对第2部分的理解有点晚了,但您可能会发现这很有帮助。需要注意的是,数据完整性部分在很大程度上取决于用例。很可能实际上不是嵌入,而是记录更改和聚合结果可能是一种更可行的方法,特别是当并发访问是标准时。需要注意的是,数据完整性部分高度依赖于用例。很可能事实上不是嵌入,而是记录更改和聚合结果可能是一种更可行的方法,尤其是当并发访问成为常态时。