MongoDB的估计计数查询的准确性如何?

时间:2018-11-29 15:08:16

标签: mongodb

据我所知,MongoDB官方驱动程序提供了“计数”和“估计文档计数” API,据我所知,前一个命令占用大量内存,因此建议在需要时使用后者。

但是这个估计的文档计数有多准确?可以在生产环境中信任计数吗?还是在需要绝对精度时建议使用计数API?

2 个答案:

答案 0 :(得分:1)

将两者进行比较,对我来说,很难想象出当countDocuments()是一种选择时您想使用estimatedDocumentCount()的情况。

也就是说,estimatedDocumentCount()的等效形式为countDocuments({}),即空查询过滤器。第一个函数的成本为O(1);第二个是O(N),如果N很大,那么成本将是惊人的。

两者都返回一个计数,在部署Mongo的情况下,这很可能只是短暂的,即,随着集合的更改,获取计数的那一刻是不准确的。

答案 1 :(得分:0)

请查看MongoDB documentation for estimatedDocumentCount()。他们特别指出,“在使用Wired Tiger存储引擎对mongod进行不干净的关闭后,db.collection.estimatedDocumentCount()报告的计数统计信息可能不准确。”这是由于元数据用于计数和检查点漂移,通常会在60秒左右后解决。

相反,MongoDB documentation for countDocuments()表示此方法是包装器,它对$group结果集执行$sum聚合阶段,从而确保计数的绝对准确性。

因此,如果绝对精度至关重要,请使用countDocuments()。如果您只需要粗略估计,请使用estimatedDocumentCount()。名称准确无误,应相应使用。