分表算法简单思考

本贴最后更新于 2985 天前,其中的信息可能已经时移俗易

散列分表

  • 对业务字段散列后取模并映射到对应的表

问题:

  • 不利于新增扩展表,需要修改散列函数并对全量数据重新分配

改进,在数据和表之间引入虚拟桶概念

  1. 定义一个容量较大的散列表
  2. 根据自定义规则随机分配散列桶(虚拟桶)
  3. 定义一个虚拟桶——》数据库表的映射关系
  4. 数据根据散列函数被分配到不同的虚拟桶中,数据和散列桶的对应规则是 N:1
  5. 散列桶中的数据根据内存映射关系最终落到数据库表中,散列桶和数据库表的对应规则是 N:1

使用方式

  • 数据存储增加一列,用来记录该条记录对应的虚拟桶槽位
  • 增加节点时,无需更改散列算法,仅需更改虚拟桶与数据库表影射关系
    • 例子: 0 - 9 映射表 A 改为 0-4 映射表 A 4-9 映射表 B
  • 增加节点后,对原 A 表中槽位位 5-9 的数据迁移至表 B
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    340 引用 • 708 回帖
  • 散列桶
    1 引用 • 2 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • eddy
    作者

    @V
    前排带上小薇

  • 其他回帖
  • V

    我也这么觉得哦