我有一个 mongo 分片集群,有 3 个分片,对该数据库的所有操作都是 find
或 update
(使用 upsert=true 选项)。这意味着collection的计数会一直增加,但是当collection的计数(db.mycollection.find().count()
)增加到80000000或者更大的时候,我发现有时候是在增加,但是有时它会减少,为什么?我保证不会对此数据库执行任何删除操作。
我正在使用 db.myCollection.getShardDistribution()
来显示分布,shard2
只有 29%,低于平均水平。
计数趋势如下:
mongos> db.myCollection.find().count()
84374837
mongos> db.myCollection.find().count()
84375036
mongos> db.myCollection.find().count()
84409281
mongos> db.myCollection.find().count()
84408921
mongos> db.myCollection.find().count()
84407190
mongos> db.myCollection.find().count()
84407173
mongos> db.myCollection.find().count()
84407013
mongos> db.myCollection.find().count()
84406911
最佳答案
我敢打赌这就是分片。这是它的工作原理:
- 所有文档都被分解成虚拟 block
- block 可以在分片之间移动
当平衡器移动一个 block 时,它
1) 将这个 block 中的所有文档复制到它们的新分片
2) 将 block 的所有权转移到新的分片
3) 删除旧分片中的文档。
再次重申,这只是根据所提供的信息进行的猜测。但既然你发誓你的应用程序中没有删除,那么一定是这样。
关于mongodb - 为什么 MongoDb 分片中 Collection 的文档数量在减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29900912/