cassandra随机获取数据_Cassandra的数据分布和副本(一致性hash原理)

一致性hash设计出来的目的是: 根据数据的hash值把数据分布在n个节点上,当新增一个节点或者删除一个节点后根据算法重新计算,可以保证大部分数据都分布在原来节点上,只需要移动少部分数据即可。

再具体一点,当删除一个节点,只要把属于这个节点上的数据移动到其它节点上,当增加一个节点,只要从其它节点上把属于这个节点的数据自动过来。而保持不动的节点之间不需要数据移动。

下面是具体原理:

Cassandra的对数据key的hash值范围是long的最小值到long的最大值。每个节点默认负责这个单位内的256个范围。我们这里用4个范围代替。首先我们用一个圆(hash环)来表示整个hash范围。然后每个节点随机取4个点,假设我们当前有三个节点(A,B,C),如下图所示:

整个hash环就被分割为了12段,顺时针去看,A和B之间的hash段就属于A,B和C之间的hash段就属于B,以此类推。

一条数据的分区key的hash值落在哪个段里,就存到对应的机器上。

现在看如果要增加一个节点。我们同样在圆上增加随机的4个点。

​这样整个圆被分割成了16个段,同样顺时针看,我们发现大多数分段仍然属于原来的节点,只有四个小段属于了新节点D,也就是说只要移动这四个小段的数据到新节点D上,我们就完成了数据的再均衡,完成了节点扩容。

同样的如果用想退役D节点,只要把对应的分段的数据再挪回去,就完成了缩容。而大部分数据不需要移动。

这个算法就叫做一致性hash算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值