Mongo DB如何处理大型数组字段?

Jae*_*pil 11 arrays performance mongodb

我试图将一个ObjectIds列表作为数组字段存储在文档中.

据我所知,Mongo DB对单个文档的大小限制为4MB.因此,考虑到ObjectId的长度为12个字节,文档应该能够在一个数组字段中处理超过300,000个条目.(如果计算结束,请告诉我).

如果数组中的条目数接近该限制,我可以期待什么样的性能?特别是当字段被索引时?任何记忆问题?


典型的查询如下所示:

按单个值查询

db.myCollection.find(
  {
    myObjectIds: ObjectId('47cc67093475061e3d95369d')
  }
);
Run Code Online (Sandbox Code Playgroud)

按多个值查询

db.myCollection.find(
  {
    myObjectIds: {$in: [ObjectId('47cc67093475061e3d95369d'), ...]}
  }
);
Run Code Online (Sandbox Code Playgroud)

为多个文档添加新值

db.myCollection.update(
  {
    _id: {$in: [ObjectId('56cc67093475061e3d95369d'), ...]}
  },
  {
    $addToSet: {myObjectIds: ObjectId('69cc67093475061e3d95369d')}
  }
);
Run Code Online (Sandbox Code Playgroud)


Ada*_*Dev 5

TBH,我认为你能做的最好的事情就是对它进行基准测试.创建一些虚拟数据,并在增加数组中的项目数时测试性能.在您的环境中进行测试可能会更快 - 而不是在这里等待答案

在我的TODO列表上进行调查和博客是一回事,但我还没有完成它.如果你这样做,我肯定有兴趣看看你的发现是什么!同样,如果我很快就能完成它,我也会在这里发布结果.


Jos*_*zin 5

随着mongo 2.4的发布,您可以使用上限数组.在插入时,您可以告诉mongo $ sort和$ slice数组,以根据您的条件将其保持固定长度(如果您不关心丢弃数据).例如,您可以使用它来保存数据日志中的最新N个条目.