articleList

32-Sharding-Jdbc多种分片策略实战总结

2025/03/13 posted in  ShardingJDBC
Tags: 

  • 自己实现分片策略的优缺点

    • 优点:可以根据分片策略代码里面自己拼装 真实的数据库、真实的表,灵活控制分片规则
    • 缺点:增加了编码,不规范的sql容易造成全库表扫描,部分sql语法支持不友好
  • 行表达式分片策略 InlineShardingStrategy

    • 只支持【单分片键】使用Groovy的表达式,提供对SQL语句中的 =和IN 的分片操作支持
    • 可以通过简单的配置使用,无需自定义分片算法,从而避免繁琐的Java代码开发
    • prouduct_order_$->{user_id % 8} 表示订单表根据user_id模8,而分成8张表,表名称为 prouduct_order_0 到 prouduct_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分片策略性能可能会更好