MongoDB复制集+ Sharding,在停止插入数据后,数据库中的集合计数不断变化,为什么会这样?

时间:2017-01-12 03:34:49

标签: mongodb count sharding

MongoDB复制集+ Sharding,在我停止插入数据后,数据库中的集合计数不断变化,为什么会这样?

1 个答案:

答案 0 :(得分:2)

由于shard balancing,计数不断变化。当分片中的块大小达到阈值时,平衡器会向源分片发送moveChunk命令。

文档中引用的步骤。

  
      
  1. balancer进程将moveChunk命令发送到源分片。
  2.   
  3. 源使用内部moveChunk命令启动移动。在迁移过程中,对块路由到源分片的操作。源分片负责块的传入写操作。
  4.   
  5. 目标分片构建源所需的任何索引,这些索引在目标上不存在。
  6.   
  7. 目标分片开始请求块中的文档并开始接收数据的副本。另请参阅块迁移和复制。
  8.   
  9. 在块中收到最终文档后,目标分片会启动同步过程,以确保它对迁移期间发生的迁移文档进行了更改。
  10.   
  11. 完全同步后,源分片将连接到配置数据库,并使用新块的位置更新群集元数据。
  12.   
  13. 源分片完成元数据更新后,一旦块上没有打开的游标,源分片将删除其文档副本。
  14.   

如您所见,迁移进行时,数据在两个分片中重复。因此,如果分片平衡处于1-7之间的状态,则文档的数量将继续变化。只有在第7步完成后,才会提供正确的计数。