为什么MongoDB每个聚合流水线阶段有100MB的限制?

时间:2014-05-17 21:53:14

标签: mongodb performance aggregation-framework nosql

为什么MongoDB有一个100MB limit per aggregation pipeline stage

您可以设置allowDiskUse来扩展此限制。

我的问题是,为什么数字为100MB?

4 个答案:

答案 0 :(得分:1)

我猜你不会得到确切的答案,除非你从mongodb核心开发者那里得到它。

想法是在使用磁盘之前有一个阈值限制。 100MB是最大内存阈值mongodb不仅用于聚合管道操作,而且还用于紧凑操作。

  

100MB只是一个任意数字,据我所知,100MB   限制是因为如果我们认为每个文件大小为100KB和   每个管道返回1000个文档,因此达到100MB限制。

答案 1 :(得分:1)

我真的认为聚合管道阶段的100mb内存限制应该是可配置的。现在已经不是2014年了,硬件发生了变化,Mongo在公司之间以及应用程序与应用程序之间运行的情况总是不同的。选择一个任意的100mb限制,然后不允许对其进行修改对任何人都没有帮助。默认值为100mb,而不是唯一的选择。

请参阅我的“想法”,以使此限制可在MongoDB网站上配置,并在同意的情况下对其进行投票。

https://feedback.mongodb.com/forums/924280-database/suggestions/40081492-allow-configuration-of-100mb-memory-limit-per-aggr

答案 2 :(得分:0)

此限制在 MongoDB 核心服务器错误票证 SERVER-40317 中有所描述 标题为“$facet 执行对它可以消耗多少内存没有限制”

答案 3 :(得分:-1)

根据http://docs.mongodb.org/master/reference/limits/

,@ Sam Leach和@mohamedrias
  

管道阶段的RAM限制为100兆字节。如果某个阶段超出此限制,MongoDB将产生错误

因此,如果超过100MB限制,则不会使用磁盘,但执行将失败!

我认为设置上述内存限制是因为如果MongoDB毫无疑问地分配了内存,这将导致其他共同托管程序出现问题。这样MongoDB就是沙箱。