第四章:Sharding-JDBC 分片策略

Sharding-JDBC 分片策略

  • Sharding-JDBC对于分片策略存有两种维度
    • 数据源分片策略(DatabaseShardingStrategy):数据被分配的目标数据源
    • 表分片策略(TableShardingStrategy):数据被分配的目标表
    • 两种分片策略API完全相同,但是表分片策略是依赖于数据源分片策略的(即:先分库,然后才有分表
  • 结构图如下
    第四章:Sharding-JDBC 分片策略_第1张图片
  • Sharding-JDBC的数据分片策略
    • Sharding-JDBC的分片策略包含了分片键和分片算法
    • 分片键
      • 用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段。 SQL中如果无分片字段,将执行全路由,性能较差。 除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片
    • 分片算法
      • 通过分片算法将数据分片,支持通过=、BETWEEN和IN分片。分片算法需要应用方开发者自行实现,可实现的灵活度非常高
  • 分片策略
    • standard:标准分片策略,对应StandardShardingStrategy
      • 提供对SQL语句中的=, IN和BETWEEN AND的分片操作支持
      • StandardShardingStrategy只支持单分片键,提供PreciseShardingAlgorithm和RangeShardingAlgorithm两个分片算法
      • PreciseShardingAlgorithm是必选的,用于处理=和IN的分片。
        RangeShardingAlgorithm是可选的,用于处理BETWEEN AND分片,如果不配置
        RangeShardingAlgorithm,SQL中的BETWEEN AND将按照全库路由处理
    • complex:复合分片策略,对应ComplexShardingStrategy
      • 提供对SQL语句中的=, IN和BETWEEN AND的分片操作支持
      • ComplexShardingStrategy支持多分片键,由于多分片键之间的关系复杂,因此并未进行过多的封装,而是直接将分片键值组合以及分片操作符透传至分片算法,完全由应用开发者实现,提供最大的灵活度
    • inline:行表达式分片策略,对应InlineShardingStrategy
      • 使用Groovy的表达式,提供对SQL语句中的=和IN的分片操作支持,
      • 只支持单分片键
      • 对于简单的分片算法,可以通过简单的配置使用,从而避免繁琐的Java代码开发,如: t_user_$->{u_id % 8} 表示t_user表根据u_id模8,而分成8张表,表名称为t_user_0 到 t_user_7
    • hint:Hint分片策略,对应HintShardingStrategy,通过Hint而非SQL解析的方式分片的策略
      • 对于分片字段非SQL决定,而由其他外置条件决定的场景,可使用SQL Hint灵活的注入分片字段
      • 例:内部系统,按照员工登录主键分库,而数据库中并无此字段。SQL Hint支持通过Java API和SQL注释(待实现)两种方式使用
    • none:不分片策略,对应NoneShardingStrategy。不分片的策略
  • 自定义分片算法
    • Sharding提供了以下4种算法接口
      • PreciseShardingAlgorithm
      • RangeShardingAlgorithm
      • HintShardingAlgorithm
      • ComplexKeysShardingAlgorithm

你可能感兴趣的:(ShardingSphere)