Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 使用哈希碎片在集群中添加新碎片时会发生什么?_Mongodb_Sharding - Fatal编程技术网

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中的“块”:

重新规划: