ShardingSphere 3.X
分片
分片键
用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段。 SQL中如果无分片字段,将执行全路由,性能较差。 除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片。
分片算法
通过分片算法将数据分片,支持通过=
、BETWEEN
和IN
分片。分片算法需要应用方开发者自行实现,可实现的灵活度非常高。
- 精确分片算法
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}
限制
不支持 HAVING
、UNION
、UNION ALL