Mongodb 使用哈希碎片在集群中添加新碎片时会发生什么?
我想知道Mongodb 使用哈希碎片在集群中添加新碎片时会发生什么?,mongodb,sharding,Mongodb,Sharding,我想知道MongoDB中是否支持以下函数。 向当前正在使用散列分片的现有分片群集添加新分片时,应将旧分片中的某些文档迁移到新分片 问题:mongodb是否可以自动处理此过程 提前谢谢你。是的。天真地说,您会想象一个实现采用一个键字段的哈希代码,对集群中的节点数进行模运算,然后将值放在该节点上。向集群添加节点/分片会改变模值,所有数据都会被置乱,因此无法添加节点 为了解决这个问题,分布式系统做的有点不同。散列代码不是映射到物理机器,而是映射到mongodb中称为“块”的东西。块比节点多,但许多数据
MongoDB
中是否支持以下函数。
向当前正在使用散列分片的现有分片群集添加新分片时,应将旧分片中的某些文档迁移到新分片
问题:mongodb是否可以自动处理此过程
提前谢谢你。是的。天真地说,您会想象一个实现采用一个键字段的哈希代码,对集群中的节点数进行模运算,然后将值放在该节点上。向集群添加节点/分片会改变模值,所有数据都会被置乱,因此无法添加节点
为了解决这个问题,分布式系统做的有点不同。散列代码不是映射到物理机器,而是映射到mongodb中称为“块”的东西。块比节点多,但许多数据行映射到一个“块”
例如,您可以想象,如果您有1000万行和5台主机,您可以使用hashcode modulo 100
,这样您的1000万行就有100个唯一的键,可以使用这些键来确定地选择集群中的节点,然后您可以管理一个映射,该映射为键1-20选择node1,为键21-40选择node2,等等。当您添加第五个节点时,重新平衡过程可以将“块”从一个节点移动到另一个节点,并更新映射表。因为映射表只记录了一百个块的节点位置,而不是每一行,所以这是可以管理的
Mongodb使用后台进程来监视节点上有多少块,并根据需要移动它们
mongodb中的“块”:
重新规划: