mongodb - 为什么 MongoDb 分片中 Collection 的文档数量在减少

标签 mongodb sharding

我有一个 mongo 分片集群,有 3 个分片,对该数据库的所有操作都是 findupdate(使用 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/

相关文章:

node.js - 使用 KeystoneJs 的 Mongoose 二级人口

dapper - 如何将 Dapper 与 Elastic Sc​​ale MultiShardConnection 和 MultiShardDataReader 结合使用?

elasticsearch - 如果一个节点关闭,则禁用 ElasticSearch 重新平衡

以毫秒为单位的 Mongodb 时间戳

javascript - 存储图像的最佳选择是字节还是文件?

php - 如何将 MongoDB 与 Solr 集成?

node.js - 如何将 HTTP REQUEST PUT 与 odata.PUT 结合使用来更新数据库条目?

mongodb - MongoDB分片集群中的分片键和 block 之间的关系?

算法题: Minimum Shard Movement

indexing - 索引和分片有什么区别