MongoDB的:在多文档交易计数文件

时间:2019-01-31 19:54:58

标签: mongodb transactions

我看到estimatedDocumentCount()在某些情况下可能会得到不一致的结果。另一方面,countDocuments()永远都是精确的,但它也要花更多钱。

那么,在某些好的用例中,estimatedDocumentCount()countDocuments()更可取?使用时,我们多少性能损失countDocuments()相对于其他的方法?还有使用estimatedDocumentCount()的“安全方式”是什么?

我想在多文档交易的情况下比较这两种方法,以便确定使用哪种场景。

1 个答案:

答案 0 :(得分:0)

不幸的是,根据用例,“花费更多”可能意味着“数据库中断”。

estimatedDocumentCount()只是从集合中读取元数据;尽可能接近零成本。另一方面,顾名思义,countDocuments()实际上是在统计文件。如果您需要的话,那一刻会更准确。

但是,人们必须非常了解{}的无过滤器(即对countDocuments()的查询)形式的病理本质。对于大量的文档(例如数十亿个文档),您的第一个线索不是正确的选择,那就是当服务器将自己分页到地面时,数据库集群遇到级联故障。

因此,我认为您的问题是倒退的。就而言,调用estimatedDocumentCount()本质上是安全,不可能使您的环境陷入困境,但要注意的是您正在那里查看元数据,因此在在某些情况下(分片群集等),可能会有些不准确。但是,实际上,在已部署Mongo的环境中,事情总是会“稍微不准确”。也就是说,无论如何,我此刻所获得的任何计数无论如何从现在开始都可能是不准确的。

相比之下,countDocuments()的无过滤器本质上是不安全的,并且第一次在巨大的集合上调用它会带来关于O(1)O(N)的强大学习体验