美文网首页
sharding-sphere分片算法和分片策略

sharding-sphere分片算法和分片策略

作者: 一滴水的坚持 | 来源:发表于2018-06-11 15:34 被阅读0次

官方文档:官方文档

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

public interface HintShardingAlgorithm extends ShardingAlgorithm {
    Collection<String> doSharding(Collection<String> availableTargetNames, ShardingValue shardingValue);
}

public interface ComplexKeysShardingAlgorithm extends ShardingAlgorithm {
    Collection<String> doSharding(Collection<String> availableTargetNames, Collection<ShardingValue> shardingValues);
}

public interface PreciseShardingAlgorithm<T extends Comparable<?>> extends ShardingAlgorithm {
    String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<T> shardingValue);
}
public interface RangeShardingAlgorithm<T extends Comparable<?>> extends ShardingAlgorithm {
    Collection<String> doSharding(Collection<String> availableTargetNames, RangeShardingValue<T> shardingValue);
}
分片策略
分片策略.png

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

public interface ShardingStrategy {
    //获取分片项
    Collection<String> getShardingColumns();  
    //做分片
    Collection<String> doSharding(Collection<String> availableTargetNames, Collection<ShardingValue> shardingValues);
}

复合分片算法实现如下:

public final class ComplexShardingStrategy implements ShardingStrategy {
     //分片项
    @Getter
    private final Collection<String> 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<String> doSharding(final Collection<String> availableTargetNames, final Collection<ShardingValue> shardingValues) {
        //调用分片算法做分片
        Collection<String> shardingResult = shardingAlgorithm.doSharding(availableTargetNames, shardingValues);
        Collection<String> result = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
        //组装分片结果并返回
        result.addAll(shardingResult);
        return result;
    }
}

其他分片策略类似。
分片策略的初始化,是按照不同的分片策略配置,分片策略配置如下:


分片配置.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。

相关文章

  • ShardingSphere官网及总结

    中文文档 分片 分片算法 精确分片算法 范围分片算法 复合分片算法 Hint分片算法 分片策略 标准分片策略 复合...

  • 【mongoDB】mongoDB分片策略

    chunk切分是根据分片策略进行实施的,分片策略的内容包括分片键和分片算法。 当前,MongoDB支持两种分片算法...

  • sharding-sphere分片算法和分片策略

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

  • 日知录1-数据分片模型和路由算法

    分片模型: 先将数据映射到分片;再将分片映射到机器;都是多对一的关系。 分片策略:哈希分片和范围分片。 哈希分片通...

  • shardindjdbc-hint策略

    HintShardingStrategy不需要分片键的强制分片策略。这个分片策略,简单来理解就是说,他的分片键不再...

  • sharding-jdbc分片策略

    分片维度 Sharding-JDBC中的分片策略有两个维度,分别是:数据源分片策略(DatabaseShardin...

  • 定时器(elastic-job 二)

    分片策略 平均分片策略:举例10个分片,3台服务。第一个台服务分片0,1,2,9。第二台服务分片3,4,5。第三台...

  • shardindjdbc-complex策略

    支持多分片键的复杂分片策略。配置参数:complex.sharding-columns 分片键(多个);compl...

  • shardindjdbc-range策略

    StandardShardingStrategy策略只支持单分片键的标准分片策略。配置参数:standard.sh...

  • ElasticSearch-索引原理

    索引分片 索引分片-水平扩展: 索引分片-应对故障: 数据路由 路由策略: 1、 路由公式:shard = has...

网友评论

      本文标题:sharding-sphere分片算法和分片策略

      本文链接:https://www.haomeiwen.com/subject/zvkheftx.html