Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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/5/fortran/2.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 Mongo平衡器如何在哈希切分键方面工作_Mongodb_Sharding - Fatal编程技术网

Mongodb Mongo平衡器如何在哈希切分键方面工作

Mongodb Mongo平衡器如何在哈希切分键方面工作,mongodb,sharding,Mongodb,Sharding,平衡节点之间的数据是众所周知的概念,在中有明确描述。对于散列切分密钥块,平衡器是如何工作的?如果根据shard键,来自该块的文档属于该块,您可以迁移该块吗?如果这不是真的,那么为什么文档会在不属于它们的碎片中?或者,只要碎片的数量不变,均衡器就与哈希碎片密钥无关?哈希碎片密钥的性能仍然与基于正常范围的碎片密钥类似。它们也可以像普通的切分键一样进行迁移、分割等 区别在于:哈希切分键在最初切分集合时有一些额外的过程。从文档页面的以下位置进行解释: 对填充的集合进行分片时: 分片操作创建初始块以覆盖整

平衡节点之间的数据是众所周知的概念,在中有明确描述。对于散列切分密钥块,平衡器是如何工作的?如果根据shard键,来自该块的文档属于该块,您可以迁移该块吗?如果这不是真的,那么为什么文档会在不属于它们的碎片中?或者,只要碎片的数量不变,均衡器就与哈希碎片密钥无关?

哈希碎片密钥的性能仍然与基于正常范围的碎片密钥类似。它们也可以像普通的切分键一样进行迁移、分割等

区别在于:哈希切分键在最初切分集合时有一些额外的过程。从文档页面的以下位置进行解释:

对填充的集合进行分片时:

分片操作创建初始块以覆盖整个分片键值范围。创建的块数取决于配置的块大小

切分空集合时:

分片操作创建空块以覆盖整个分片键值范围,并执行初始块分布。默认情况下,该操作为每个碎片创建2个块,并跨集群迁移

简而言之,散列切分预裂整个散列键空间,然后平衡器像往常一样在集群中移动块

除了最初的区块分割,它们的功能就像普通的切分键

请注意,如果您的shard key非常单调地递增,以防止出现“热shard”,并有助于将写入分散到整个集群,则哈希shard key会有所帮助。使用散列切分键并不能保证不能拥有巨型块,因为散列键的基数将反映实际键的基数

例如:假设哈希算法是MD5(大小为128位)。MD5空间可能非常大。但是,如果基础键(未剪切)值只能是
A
B
,则使用MD5散列的这两个值将始终导致
A->bf072e9119077b4e76437a93986787ef
B->30cf3d7d13b08543cb6c8933c29dfd7
,使得基数非常小