ShardingSphere 3.X

ShardingSphere 3.X

分片

分片键

用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段。 SQL中如果无分片字段,将执行全路由,性能较差。 除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片。

分片算法

通过分片算法将数据分片,支持通过=BETWEENIN分片。分片算法需要应用方开发者自行实现,可实现的灵活度非常高。

  • 精确分片算法 PreciseShardingAlgorithm: 用于处理使用单一键作为分片键的 =IN 进行分片的场景。
  • 范围分片算法 RangeShardingAlgorithm: 用于处理使用单一键作为分片键的 BETWEEN AND 进行分片的场景。
  • 复合分片算法 ComplexKeysShardingAlgorithm: 用于处理使用多键作为分片键进行分片的场景。
  • Hint 分片算法 HintShardingAlgorithm: 用于处理使用 Hint 行分片的场景。

分片策略

包含分片键和分片算法,由于分片算法的独立性,将其独立抽离。真正可用于分片操作的是分片键 + 分片算法,也就是分片策略。目前提供5种分片策略。

  • 标准分片策略
  • 复合分片策略
  • 行表达式分片策略: 使用 Groovy 表达式
  • Hint 分片策略
  • 不分片策略

行表达式语法说明

行表达式的使用非常直观,只需要在配置中使用${ expression }$->{ expression }标识行表达式即可。 目前支持数据节点和分片算法这两个部分的配置。行表达式的内容使用的是Groovy的语法,Groovy能够支持的所有操作,行表达式均能够支持。

${begin..end}表示范围区间

${[unit1, unit2, unit_x]}表示枚举值

(1) 行表达式 ${['online', 'offline']}_table${1..3} 解析为:

online_table1, online_table2, online_table3, offline_table1, offline_table2, offline_table3

(2) 数据节点配置

db0
  ├── t_order0 
  └── t_order1 
db1
  ├── t_order0 
  └── t_order1

行表达式简化为: db${0..1}.t_order${0..1}db$->{0..1}.t_order$->{0..1}

限制

不支持 HAVINGUNIONUNION ALL

参考