为什么MongoDB有一个100MB limit per aggregation pipeline stage?
您可以设置allowDiskUse
来扩展此限制。
我的问题是,为什么数字为100MB?
答案 0 :(得分:1)
我猜你不会得到确切的答案,除非你从mongodb核心开发者那里得到它。
想法是在使用磁盘之前有一个阈值限制。 100MB是最大内存阈值mongodb不仅用于聚合管道操作,而且还用于紧凑操作。
100MB只是一个任意数字,据我所知,100MB 限制是因为如果我们认为每个文件大小为100KB和 每个管道返回1000个文档,因此达到100MB限制。
答案 1 :(得分:1)
我真的认为聚合管道阶段的100mb内存限制应该是可配置的。现在已经不是2014年了,硬件发生了变化,Mongo在公司之间以及应用程序与应用程序之间运行的情况总是不同的。选择一个任意的100mb限制,然后不允许对其进行修改对任何人都没有帮助。默认值为100mb,而不是唯一的选择。
请参阅我的“想法”,以使此限制可在MongoDB网站上配置,并在同意的情况下对其进行投票。
答案 2 :(得分:0)
此限制在 MongoDB 核心服务器错误票证 SERVER-40317 中有所描述 标题为“$facet 执行对它可以消耗多少内存没有限制”
答案 3 :(得分:-1)
根据http://docs.mongodb.org/master/reference/limits/
,@ Sam Leach和@mohamedrias管道阶段的RAM限制为100兆字节。如果某个阶段超出此限制,MongoDB将产生错误
因此,如果超过100MB限制,则不会使用磁盘,但执行将失败!
我认为设置上述内存限制是因为如果MongoDB毫无疑问地分配了内存,这将导致其他共同托管程序出现问题。这样MongoDB就是沙箱。