一致性hash分片

一致性hash分片:

执行PartitionByMurmurHash的main方法,按上述假设会得到以下结果

index bucket ratio 
0 1001836 0.1001836 
1 1038892 0.1038892 
2 927886 0.0927886 
3 972728 0.0972728 
4 1086100 0.10861 
5 908616 0.0908616 
6 1024269 0.1024269 
7 1018029 0.1018029 
8 995581 0.0995581 
9 1026063 0.1026063

 第一列是分片节点的编号,第二列是hash到每个节点的数据量,第三列是每个hash到每个节点的数据量与总数据量的比值。第三列的和是1.0,第十五列的和是10000000。 如果数据量相当少,会发现一致性哈希的分布不够均匀,而只要数据量在10000以上一致性哈希的分布比率就能保持在0.1左右,数据越多分布越均匀,每个节点的数据量越接近。

现在假设增加二个新节点,对0号节点执行rehash,会出现以下结果 

index bucket ratio 
0 853804 0.8522392886660092 
1 1038892 0.1038892 
2 927886 0.0927886 
3 972728 0.0972728 
4 1086100 0.10861 
5 908616 0.0908616 
6 1024269 0.1024269 
7 1018029 0.1018029 
8 995581 0.0995581 
9 1026063 0.1026063
10 70075 0.06994657808264028 
11 77957 0.07781413325135052

 第一第二列的意义与上一组列表一样,第三列是hash到当前节点上的数据量与原0号节点总数据量的比值。 从以上列表可以看到,原0号节点有1001836数据,rehash之后大部分数据仍然hash到0号上面,少量数据hash到了10、11号两个新节点,其它旧节点没有得到原来0号上的数据。其实不管增加多少节点,数据的rehash结果都会呈现这个规律:已有节点的数据发生rehash时只有两个可能的去处,要么是rehash之前的节点,要么是新增加的节点,这也是一致性哈希的意义所在。

采用这种该片方式,可以保证数据在rehash时尽可能的少迁移数据。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值