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