shardingsphere 分片策略_sharding-sphere分片算法和分片策略

官方文档:官方文档

1b309788de7d

分片算法

类图:

1b309788de7d

分片算法.png

所有的分片算法都有一个共同的方法(doSharding),因为参数不同,所以并没有在ShardingAlgorithm中体现。代码如下:

public interface ShardingAlgorithm {

}

public interface HintShardingAlgorithm extends ShardingAlgorithm {

Collection doSharding(Collection availableTargetNames, ShardingValue shardingValue);

}

public interface ComplexKeysShardingAlgorithm extends ShardingAlgorithm {

Collection doSharding(Collection availableTargetNames, Collection shardingValues);

}

public interface PreciseShardingAlgorithm> extends ShardingAlgorithm {

String doSharding(Collection availableTargetNames, PreciseShardingValue shardingValue);

}

public interface RangeShardingAlgorithm> extends ShardingAlgorithm {

Collection doSharding(Collection availableTargetNames, RangeShardingValue shardingValue);

}

1b309788de7d

分片策略

1b309788de7d

分片策略.png

分片策略主要有两个方法,一个是获取分片项,一个是分片,分片主要是依赖于分片算法做分片,具体代码如下:

public interface ShardingStrategy {

//获取分片项

Collection getShardingColumns();

//做分片

Collection doSharding(Collection availableTargetNames, Collection shardingValues);

}

复合分片算法实现如下:

public final class ComplexShardingStrategy implements ShardingStrategy {

//分片项

@Getter

private final Collection shardingColumns;

//分片算法

private final ComplexKeysShardingAlgorithm shardingAlgorithm;

public ComplexShardingStrategy(final ComplexShardingStrategyConfiguration complexShardingStrategyConfig) {

shardingColumns = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);

//分片配置中获取所有的分片项,保存在shardingColumns中。

shardingColumns.addAll(StringUtil.splitWithComma(complexShardingStrategyConfig.getShardingColumns()));

//初始化分片算法

shardingAlgorithm = complexShardingStrategyConfig.getShardingAlgorithm();

}

@Override

public Collection doSharding(final Collection availableTargetNames, final Collection shardingValues) {

//调用分片算法做分片

Collection shardingResult = shardingAlgorithm.doSharding(availableTargetNames, shardingValues);

Collection result = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);

//组装分片结果并返回

result.addAll(shardingResult);

return result;

}

}

其他分片策略类似。

分片策略的初始化,是按照不同的分片策略配置,分片策略配置如下:

1b309788de7d

分片配置.png

代码很简单,就不列出来了。

分片策略是如何被初始化的?

工厂模式,按照不同的策略配置类型初始化不同的策略。

@NoArgsConstructor(access = AccessLevel.PRIVATE)

public final class ShardingStrategyFactory {

public static ShardingStrategy newInstance(final ShardingStrategyConfiguration shardingStrategyConfig) {

if (shardingStrategyConfig instanceof StandardShardingStrategyConfiguration) {

return new StandardShardingStrategy((StandardShardingStrategyConfiguration) shardingStrategyConfig);

}

if (shardingStrategyConfig instanceof InlineShardingStrategyConfiguration) {

return new InlineShardingStrategy((InlineShardingStrategyConfiguration) shardingStrategyConfig);

}

if (shardingStrategyConfig instanceof ComplexShardingStrategyConfiguration) {

return new ComplexShardingStrategy((ComplexShardingStrategyConfiguration) shardingStrategyConfig);

}

if (shardingStrategyConfig instanceof HintShardingStrategyConfiguration) {

return new HintShardingStrategy((HintShardingStrategyConfiguration) shardingStrategyConfig);

}

return new NoneShardingStrategy();

}

}

the end。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值