articleList

11-Mysql数据库水平分库分表常见策略介绍-Hash取模

2025/03/13 posted in  ShardingJDBC
Tags: 

  • 方案二:hash取模(Hash分库分表是最普遍的方案)

    • 为啥不直接取模,如果取模的字段不是整数型要先hash,统一规则就行
      image-20211124184650946
  • 案例规则

    • 用户ID是整数型的,要分2库,每个库表数量4表,一共8张表
    • 用户ID取模后,值是0到7的要平均分配到每张表
    A库ID = userId % 库数量 2 
    表ID = userId / 库数量 2 % 表数量4
    
    • 例子
      userId id % 2 (库-取余) id /2 % 4 (表)
      1 1 0
      2 0 1
      3 1 1
      4 0 2
      5 1 2
      6 0 3
      7 1 3
      8 0 0
      9 1 0
  • 优点

    • 保证数据较均匀的分散落在不同的库、表中,可以有效的避免热点数据集中问题
  • 缺点

    • 扩容不是很方便,需要数据迁移