Mongodb-当数据库中有更多文档时,$group阶段需要更长的时间



在过去的几个月里,我一直在研究Mongo,最近遇到了一个问题,我似乎找不到任何答案。情况如下-

  • 数据库A-~60m文档-平均文档大小500B
  • 数据库B-约28万个文档-平均文档大小200B

数据库B中的文档是数据库a中某些文档的子集,但其中包含不同的数据。如果我在具有特定匹配条件的两个数据库上进行$match,两个数据库在大致相同的时间内找到相同数量的文档~5万(数据库B稍微快一点,但不是很大(。

问题出现在我聚合的下一阶段$group中,两个文档都在完全相同的字段上分组,并为每个组输出一个计数,但所需的时间大不相同-

  • 数据库A-约50000ms
  • 数据库B-~1000ms

根据我对Mongo数量的研究和理解,由于分组的文档数量相同,两个$group阶段的时间应该相似得多,尽管我知道平均文档大小稍大,因此可能会增加一些时间差,但我认为我一定遗漏了一些东西。

非常感谢您的帮助!

谢谢,Sam.

所以我找到了一个解决方案来提高数据库a的聚合速度。

我发现一个线程指出,如果在$group之前使用索引的$sort,它应该会大大提高$group阶段的速度。

因此,我创建了一个新的索引,该索引末尾的字段按进行分组。

然后我再次运行聚合,它和数据库B一样快,而且实际上没有在$组之前添加$排序。

这对我来说有点奇怪,因为从我所能发现的情况来看,$group不使用索引,但在这种情况下,它似乎对某人有所帮助。

最新更新