ShardingSphere的分片策略

本篇文章源码基于4.0.1版本

上篇文章我们说到ShardingSphere通过路由引擎根据路由规则获取数据节点,然后生成路由结果,具体路由策略在ShardingStrategy的实现类中体现,这篇文章就说说ShardingSphere的分片策略,分配策略可以通过工厂类ShardingStrategyFactory来创建实例,这一块的代码在sharding-core模块的sharding-core-common子模块中

分片策略的组成

分片策略由分片算法和分片键组成,分片算法对应是接口是ShardingAlgorithm,分片策略类中会调用分片算法来进行分片处理

复合分片策略

复合分片策略对应的实现类是ComplexShardingStrategy,由于表与表之间存在复杂的关系,ShardingSphere没有帮我们实现分片算法,而是提供ComplexKeysShardingAlgorithm接口,由我们来自定义实现复合分片的算法。

Hint分片策略

Hint分片策略对应的实现类是HintShardingStrategy,它是根据Hint进行路由,我们在讲强制路由的时候就使用的这种分片策略,它的doSharding()方法中调用了HintShardingAlgorithm的分片算法,一般我们会自定义HintShardingAlgorithm的实现类,通过 HintShardingStrategyConfiguration加载了HintShardingAlgorithm实例

行表达式分片策略

行表达式分片策略对应的实现类是InlineShardingStrategy,它是根据分片键和行表达式来进行分配,行表达式通过Groovy进行解析,

不分片策略

NoneShardingStrategy是不分片策略的实现类,方法中不执行任何的路由操作。

标准分片策略

标准分片策略对应的实现类是StandardShardingStrategy,它的成员变量有分配列shardingColumn,分片算法有精确匹配分片算法PreciseShardingAlgorithm和范围匹配分配算法RangeShardingAlgorithm两种

精确匹配分片算法

精确匹配分片算法对应的接口是PreciseShardingAlgorithm,主要处理的是分配键的in和等号的SQL语句,它作为一个接口,实现类有:

  1. 对数据库进行模运算分片算法PreciseModuloDatabaseShardingAlgorithm,根据分片值对2进行取模运算
  2. 对表进行模运算分片算法PreciseModuloTableShardingAlgorithm,根据分片值对4进行取模运算

范围匹配分配算法

范围匹配分配算法算法对应的接口是RangeShardingAlgorithm,它处理的是分片键为一定范围的语句,实现类同样有两个:

  1. 对数据库进行模运算分片算法RangeModuloDatabaseShardingAlgorithm,根据最小值和最大值的范围遍历,根据分片值对2进行取模运算
  2. 对表进行模运算分片算法RangeModuloTableShardingAlgorithm,根据最小值和最大值的范围遍历,根据分片值对4进行取模运算

总结

这篇文章我们讲了ShardingSphere的分片策略,具体有5种:复合分片策略、Hint分片策略、行表达式分片策略、不分片策略、标准分片策略,并对每种分配策略用到的分配算法进行了介绍。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
  3. 有不当之处欢迎批评指正。