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语句,它作为一个接口,实现类有:
- 对数据库进行模运算分片算法PreciseModuloDatabaseShardingAlgorithm,根据分片值对2进行取模运算
- 对表进行模运算分片算法PreciseModuloTableShardingAlgorithm,根据分片值对4进行取模运算
范围匹配分配算法
范围匹配分配算法算法对应的接口是RangeShardingAlgorithm,它处理的是分片键为一定范围的语句,实现类同样有两个:
- 对数据库进行模运算分片算法RangeModuloDatabaseShardingAlgorithm,根据最小值和最大值的范围遍历,根据分片值对2进行取模运算
- 对表进行模运算分片算法RangeModuloTableShardingAlgorithm,根据最小值和最大值的范围遍历,根据分片值对4进行取模运算
总结
这篇文章我们讲了ShardingSphere的分片策略,具体有5种:复合分片策略、Hint分片策略、行表达式分片策略、不分片策略、标准分片策略,并对每种分配策略用到的分配算法进行了介绍。
❤️ 感谢大家
如果你觉得这篇内容对你挺有有帮助的话: