散列分表
- 对业务字段散列后取模并映射到对应的表
问题:
- 不利于新增扩展表,需要修改散列函数并对全量数据重新分配
改进,在数据和表直接引入虚拟桶概念
- 定义一个容量较大的散列表
- 根据自定义规则随机分配散列桶(虚拟桶)
- 定义一个虚拟桶——》数据库表的映射关系
- 数据根据散列函数被分配到不同的虚拟桶中,数据和散列桶的对应规则是N:1
- 散列桶中的数据根据内存映射关系最终落到数据库表中,散列桶和数据库表的对应规则是N:1
使用方式
- 数据存储增加一列,用来记录该条记录对应的虚拟桶槽位
- 增加节点时,无需更改散列算法,仅需更改虚拟桶与数据库表影射关系
-
- 例子: 0 - 9 映射表A 改为 0-4映射表A 4-9映射表B
- 增加节点后,对原A表中槽位位5-9的数据迁移至表B