complex複雑アルゴリズム

1716 ワード

complex複雑アルゴリズム
  • CoplexKeys Sharding Algorithm
  • CoplexKeys Sharding Algorithm
    複数のスライスキーのID、user_をサポートします.idは範囲ごとにIDを検索することができます.5 and id<10は各スライスキーに複数の値があります.
    import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingValue;
    
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    
    public class ComplexDbAlgorithm implements ComplexKeysShardingAlgorithm {
        @Override
        public Collection doSharding(Collection availableTargetNames, ComplexKeysShardingValue shardingValue) {
            Map columnNameAndShardingValuesMap = shardingValue.getColumnNameAndShardingValuesMap();
            System.out.println("   sharding    "+columnNameAndShardingValuesMap);
            for (Map.Entry entry: columnNameAndShardingValuesMap.entrySet()) {
                String shardColumn = entry.getKey();
                Object shardValue = entry.getValue();
            }
            Set result = new HashSet<>();
            Collection idColl = (Collection)columnNameAndShardingValuesMap.get("id");
            for (Object idObj: idColl) {
                if (idObj instanceof Integer || idObj instanceof Long) {
                    long idTemp = Long.parseLong(idObj.toString());
                    long target = idTemp % 2;
                    for (Object targetNames:availableTargetNames) {
                        if (targetNames.toString().endsWith(target + "")) {
                            result.add(targetNames.toString());
                        }
                    }
                }
            }
            System.out.println("complex  result="+result);
            return result;
    
        }
    }