一致性哈希(数据分库场景)

简述

普通的哈希分库方式:

hash(id) mod 数据库总数 = 目标数据库编号


这种传统的分库分表方式会遇到一个扩容问题:
若要增加数据库数量,所有数据库中的数据都要重新分配一遍。
例如本来系统有4台数据库, 现在要增加到5台数据库,这样本来id%4=0,存到第0台数据库的数据,现在全变成id%5=4,存到第4台数据库

为了解决这个扩容问题,引入了一种在扩容操作上成本更低,灵活度更高的算法

一致性哈希分库方式:

# 假设哈希空间为2^32个
hash(id) mod 2^32 = 哈希位置
选择右边最接近自己哈希位置的一台数据库

原理解释

数据库标识

传统哈希分库中,数据库的标识是一个编号,预先分配好。
而一致性哈希中,数据库的标识是一个哈希值,落到图中某个具体哈希地址中。

DBhash = hash( 数据库实体信息 )

ID定位

传统哈希分库中,计算 hash(id) 后就能定位ID到具体的数据库中
而一致性哈希中,计算 hash(id) 后,再计算出hash(id)在哈希空间中的右边第一台遇到的数据库,即为目标数据库

优势

扩容

传统哈希分库扩容,需要对数据进行全部重新分配
一致性哈希分库扩容,只需要对新增的数据库与其在哈希空间的前一台数据库之间的哈希数据进行重新分配。不影响其他数据

扩展阅读

1、可用性
2、虚拟节点


文章来源:https://www.jianshu.com/p/3a449bd7cb21
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值