【发布时间】:2017-04-28 12:53:27
【问题描述】:
我正在重新提出这个问题,因为我认为这个问题应该与这个in-mongodb-know-index-of-array-element-matched-with-in-operator 分开。
我正在使用 mongoDB,实际上我正在使用简单的查询来编写所有查询,这些查询包括查找、更新等(无聚合)。现在我阅读了许多 SO 帖子,例如 mongodb-aggregation-match-vs-find-speed。现在我想为什么要增加服务器上的计算时间,因为好像我会计算更多然后我的服务器负载会变得更多,所以我尝试使用聚合,我认为我现在正朝着正确的方向前进。但后来在我之前的问题andreas-limoli 告诉我不要使用聚合,因为它很慢,并且在服务器上使用简单的查询和计算。现在从字面上看,我对我应该使用什么感到迷茫,我从一年开始就在使用 mongoDB,但是当数据大小增加时我对它的性能一无所知,所以我完全不知道我应该选择哪个。
还有一件事我在任何地方都没有找到,如果聚合比它慢是不是因为 $lookup,因为 $lookup 是我考虑使用聚合的最重要的事情,因为否则我必须连续执行许多查询然后在我看来在聚合之前很差的服务器上进行计算。
另外,当我将数据从一个管道传递到另一个管道时,我读到了关于 mongodb 聚合的大约 100MB 限制,因此人们如何有效地处理这种情况,以及他们是否打开磁盘使用,因为磁盘使用比人们处理这种情况的方式减慢了一切。
此外,我还获取了 30,000 个样本集合,并尝试使用 $match 和 find 查询运行聚合,我发现聚合比 find 查询快一点,后者是聚合需要 180 毫秒才能执行,而 find 需要 220 毫秒来执行。
请帮帮我,这对我真的很有帮助。
【问题讨论】:
-
我也想弄清楚...
-
很好地引用了 mongoDB World “聚合是新发现”,他们长期以来一直在改进聚合性能。只要索引合适,就可以清除 find 总是比匹配聚合更快。 explain() 在您的案例中显示了什么?
-
当您想要执行 sum、maximum、minimum、avg 等功能时,将使用聚合。此外,如果您想要基于字段加入多个集合。 Find 应该用作基本的 where 子句。聚合不仅仅是一个简单的 find()。这可能是原因。
标签: mongodb performance aggregation-framework