MongoDB为什么要使用嵌入式列表而不是单独的集合?

时间:2016-01-12 13:58:29

标签: performance mongodb collections

假设我们有一个具有足够大RAM的服务器,当我们使用单独的集合而不是嵌入的对象列表时,为什么还要担心需要额外的查询?由于查询速度非常快,将对象存储为嵌入列表是否值得?

1 个答案:

答案 0 :(得分:0)

  1. 有一个16MB size limit for BSON documents in MongoDB。因此,当依赖于数据模型时,您会对可以存储的内容施加一个人为限制。
  2. 根据您的storage engine,经常增加文档大小会导致文档在数据文件中移动,这是您 想要阻止的相当昂贵的操作
  3. 对于复杂的数据模型,查询往往会变得更加复杂,从而导致出现问题,正如您在SO上看到的那样。复杂的查询不一定更快。
  4. 通常,嵌入式文档源于开发人员习惯于SQL JOIN并希望他们的数据都在一个查询中。但如果你把它煮沸,通常你会遇到像

    这样的问题
      

    对于给定 X,属于它的Y是什么?

    通常你已经拥有X。在大多数情况下,无需过早加载您从未需要的数据。考虑一下Xs的概述页面,您可以在其中选择要查看X Y的{​​{1}}。即使分页为10,如果您嵌入了所有数据,那么加载的9/10数据将毫无用处。有趣的事实:这也适用于SQL - 尽管现在似乎没有人关心真正的优化。

  5. 这是my blog post "The problem with overembedding"的摘要,您可以在其中找到上述各点的详细说明。