节点取余分区
hash(key)%N
简单性,常用于数据库的分库分表规则,一般采用预分区的方式
扩容时通常采用翻倍扩容,避免数据映射全部被打乱导致全量迁移的情况
当节点数量变化时,数据和节点映射关系需要重新计算,会导致数据的重新迁移
一致性哈希分区
为系统中每个节点分配一个token,范围一般在0~2^{32},这些token构成一个哈希环。<br>数据读写执行节点查找操作时,先根据key计算hash值,然后顺时针找到第一个大于等于该哈希值的token节点。
加入和删除节点只影响哈希环中相邻的节点,对其他节点无影响
但数据不均匀
加减节点会造成哈希环中部分数据无法命中
在服务节点太少时,容易因为节点分部不均匀而造成数据倾斜问题。
一致性哈希分区
为系统中每个节点分配一个token,范围一般在0~2^{32},这些token构成一个哈希环。<br>数据读写执行节点查找操作时,先根据key计算hash值,然后顺时针找到第一个大于等于该哈希值的token节点。
加入和删除节点只影响哈希环中相邻的节点,对其他节点无影响
但数据不均匀
加减节点会造成哈希环中部分数据无法命中
在服务节点太少时,容易因为节点分部不均匀而造成数据倾斜问题。