articleList

15-分库分表和Sharding-Jdbc常见分片算法讲解

2025/03/13 posted in  ShardingJDBC
Tags: 

  • 数据库表分片(水平库、表)

    • 包含分片键和分片策略
  • 分片键 (PartitionKey)

    • 用于分片的数据库字段,是将数据库(表)水平拆分的关键字段
    • 比如prouduct_order订单表,根据订单号 out_trade_no做哈希取模,则out_trade_no是分片键
    • 除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片
  • 分片策略(先了解,后面有案例实战)
    image-20211125140127962

    • 行表达式分片策略 InlineShardingStrategy(必备)
      • 只支持【单分片键】使用Groovy的表达式,提供对SQL语句中的 =和IN 的分片操作支持
      • 可以通过简单的配置使用,无需自定义分片算法,从而避免繁琐的Java代码开发
      • prouduct_order_$->{user_id % 8} 表示订单表根据user_id模8,而分成8张表,表名称为prouduct_order_0prouduct_order_7
    • 标准分片策略StandardShardingStrategy(需了解)
      • 只支持【单分片键】,提供PreciseShardingAlgorithm和RangeShardingAlgorithm两个分片算法
      • PreciseShardingAlgorithm 精准分片 是必选的,用于处理=和IN的分片
      • RangeShardingAlgorithm 范围分配 是可选的,用于处理BETWEEN AND分片
      • 如果不配置RangeShardingAlgorithm,如果SQL中用了BETWEEN AND语法,则将按照全库路由处理,性能下降
    • 复合分片策略ComplexShardingStrategy(需了解)
      • 支持【多分片键】,多分片键之间的关系复杂,由开发者自己实现,提供最大的灵活度
      • 提供对SQL语句中的=, IN和BETWEEN AND的分片操作支持
    • Hint分片策略HintShardingStrategy(需了解)
      • 这种分片策略无需配置分片健,分片健值也不再从 SQL中解析,外部手动指定分片健或分片库,让 SQL在指定的分库、分表中执行
      • 用于处理使用Hint行分片的场景,通过Hint而非SQL解析的方式分片的策略
      • Hint策略会绕过SQL解析的,对于这些比较复杂的需要分片的查询,Hint分片策略性能可能会更好
    • 不分片策略 NoneShardingStrategy(需了解)
      • 不分片的策略