使用Mongo Aggregation/Mongo聚合的性能可以做些什么

use*_*r10 7 mongodb mongodb-php

我构建了一个MongoDB.我想通过某些分组进行聚合.我找到了这个文件,它会为我做这件事.一切都很好,但指出了一些限制:

  1. 管道输出只能包含16兆字节.如果结果集超出此限制,则aggregate命令会产生错误.

  2. 如果任何单个聚合操作占用系统RAM的10%以上,则操作将产生错误.

  3. 聚合系统当前将$group操作存储在存储器中,这可能在处理大量组时引起问题.

我可以使用MongoDB聚合处理多少行/文档?我不敢用这个.任何人都可以指导我这个吗?

use*_*r10 17

我从谷歌小组得到了有效和有用的答案.想和大家分享一下.

限制不在于文档数量:限制是最终结果(或中间结果)使用的内存量.

所以:如果你汇总了20万份文件,但结果符合16MB的结果,那你就没事了.如果您聚合100个文档并且结果不适合16 MB,那么您将收到错误.

类似地,如果对中间结果执行sort()或group(),并且该操作需要超过10%的可用RAM,那么您将收到错误.这与您拥有的文档数量有很大关系:它是管道特定阶段有多大的函数.

我可以通过任何设置增加16MB吗?

仅对最终结果是16MB限制还是对于该特定聚合(意味着,中间结果+任何临时持股+最终结果)?

16MB限制不可调整.这是MongoDB中文档的最大大小.由于聚合框架当前是作为命令实现的,因此聚合的结果必须在单个文档中返回:因此限制为16 MB.

看这篇文章