乐趣区

关于开放源代码:ShardingSphere-4x-数据分片核心概念分片

分片键

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

分片算法

通过分片算法将数据分片,反对通过 =>=<=><BETWEENIN分片。分片算法须要利用方开发者自行实现,可实现的灵便度十分高。

目前提供 4 种分片算法。因为分片算法和业务实现严密相干,因而并未提供内置分片算法,而是通过分片策略将各种场景提炼进去,提供更高层级的形象,并提供接口让利用开发者自行实现分片算法。

  • 准确分片算法

对应 PreciseShardingAlgorithm,用于解决应用繁多键作为分片键的 = 与 IN 进行分片的场景。须要配合 StandardShardingStrategy 应用。

  • 范畴分片算法

对应 RangeShardingAlgorithm,用于解决应用繁多键作为分片键的 BETWEEN AND、>、<、>=、<= 进行分片的场景。须要配合 StandardShardingStrategy 应用。

  • 复合分片算法

对应 ComplexKeysShardingAlgorithm,用于解决应用多键作为分片键进行分片的场景,蕴含多个分片键的逻辑较简单,须要利用开发者自行处理其中的复杂度。须要配合 ComplexShardingStrategy 应用。

  • Hint 分片算法

对应 HintShardingAlgorithm,用于解决应用 Hint 行分片的场景。须要配合 HintShardingStrategy 应用。

分片策略

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

  • 规范分片策略

对应 StandardShardingStrategy。提供对 SQL 语句中的 =, >, <, >=, <=, IN 和 BETWEEN AND 的分片操作反对。StandardShardingStrategy 只反对单分片键,提供 PreciseShardingAlgorithm 和 RangeShardingAlgorithm 两个分片算法。PreciseShardingAlgorithm 是必选的,用于解决 = 和 IN 的分片。RangeShardingAlgorithm 是可选的,用于解决 BETWEEN AND, >, <, >=, <= 分片,如果不配置 RangeShardingAlgorithm,SQL 中的 BETWEEN AND 将依照全库路由解决。

  • 复合分片策略

对应 ComplexShardingStrategy。复合分片策略。提供对 SQL 语句中的 =, >, <, >=, <=, IN 和 BETWEEN AND 的分片操作反对。ComplexShardingStrategy 反对多分片键,因为多分片键之间的关系简单,因而并未进行过多的封装,而是间接将分片键值组合以及分片操作符透传至分片算法,齐全由利用开发者实现,提供最大的灵便度。

  • 行表达式分片策略

对应 InlineShardingStrategy。应用 Groovy 的表达式,提供对 SQL 语句中的 = 和 IN 的分片操作反对,只反对单分片键。对于简略的分片算法,能够通过简略的配置应用,从而防止繁琐的 Java 代码开发,如: t_user_$->{u_id % 8} 示意 t_user 表依据 u_id 模 8,而分成 8 张表,表名称为 t_user_0t_user_7

  • Hint 分片策略

对应 HintShardingStrategy。通过 Hint 指定分片值而非从 SQL 中提取分片值的形式进行分片的策略。

  • 不分片策略

对应 NoneShardingStrategy。不分片的策略。

SQL Hint

对于分片字段非 SQL 决定,而由其余外置条件决定的场景,可应用 SQL Hint 灵便的注入分片字段。例:外部零碎,依照员工登录主键分库,而数据库中并无此字段。SQL Hint 反对通过 Java API 和 SQL 正文 (待实现) 两种形式应用。

退出移动版