我想了解为什么这些命令在针对同一个MongoDB集合的mongos
实例运行时会返回不同的数字?
db.users.count()
db.users.find().length()
可能是什么原因,它可能是潜在问题的标志?
答案 0 :(得分:1)
我相信你的收藏品是分片的。
大多数分片数据库解决方案都存在这样的差异,因为某些命令会考虑整个集合,这意味着所有分片的所有文档,而其他一些命令只考虑它所连接的分片的文档。
这是要始终牢记的事情。它主要适用于以下命令:
在Mongo docs上找到:
count()等同于db.collection.find(query).count() 构造。 ...... Sharded Clusters
在分片群集上,db.collection.count()可以生成 如果存在孤立文档或块迁移,则计数不准确 正在处理。 ...
因此,对于Mongo来说,仅仅是因为Mongo总是在后台进程中运行一些分片内文档的重新平衡,以保持分片分发符合集合中定义的分片策略。 / p>
请记住,为了提供最佳性能,大多数分片解决方案会将文档写在客户端所连接的分片上,然后将其放在真正意义上的位置。
这就是为什么nosql数据库经常被标记为最终一致。