繁体   English   中英

count()是MongoDB中的慢速操作,具体如何加速count()?

[英]count() is slow operation in MongoDB, how to speed up count() specifically?

我有一个名为ParseRequest的集合。 使用共享密钥_id进行着色。 可能不是最好的选择,但现在我认为这并不重要,因为Collection只有40,000个文件。 在这种情况下,我关注ParseRequest集合上有两个属性:processed(布尔)和解析(布尔)。

我需要运行此查询,我希望它快速闪电:

D b。 ParseRequest.count({processed:true,parsed:true})

所以我尝试了两种不同的方式:

  1. 在处理和解析时使用单独的复合键
  2. 包括已处理和解析为分片键

两种方式都提高了性能,但还不够,上面的count()运行时间在2-3秒左右,但我需要更快的速度。

值得注意的是,此查询立即返回(几毫秒):

D b。 ParseRequest.find({processed:true,parsed:true})。limit(5)

D b。 ParseRequest.count({processed:true,parsed:true})

在任一设置中仍然很慢。

还有什么我应该尝试的吗?

从上面的这个特定示例出发,看起来一般来说count()对于特定标准来说是MongoDB中非常昂贵的操作。 即使你有一个索引,它仍然很慢; 比获得相同标准的前几行要慢。 有什么理由吗?

我来自SQL Server背景:计算count(*)在SQL Server中总是很快。 计算计数对我的应用程序很重要,我对MongoDD的挫败感已经增长得太多了,我正在考虑单独抛出MongoDB:为特定标准计算count()的速度很慢。 但在我这样做之前,我想确保我用尽所有可能的方法来改善计数计算。 任何建议表示赞赏。 谢谢。

- = - = -

在几条评论之后编辑:

我使用在Centos上运行的v2.2.6(64位)

是的,解释说使用了idex,顺便说一下,没有索引它甚至更慢。

是的我没有想到计算一个特定条件的count()需要扫描整个索引树,但请原谅我的comarison到SQL Server,在SQL Server中它也是一个完整的索引,但不知何故count(*)是更快的一切否则是平等的。 那么我可以在MongoDB中使用任何技巧吗?

我会尝试升级至至少2.4.x版。 在2.3.2中发布了count()的性能修复程序。 https://jira.mongodb.org/browse/SERVER-1752

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM