standard算法类
PreciseShardingAlgorithm
- implements PreciseShardingAlgorithm
- String doSharding(Collection availableTargetNames,
PreciseShardingValue shardingValue); 实现方法
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
import java.util.Collection;
public class StandardDbPreciseAlgorithm implements PreciseShardingAlgorithm<Integer> {
@Override
public String doSharding(Collection availableTargetNames, PreciseShardingValue shardingValue) {
String logicTableName = shardingValue.getLogicTableName();
String columnName = shardingValue.getColumnName();
Comparable shardValue = shardingValue.getValue();
System.out.println(String.format("库的路由规则,从SQL里取的值为 logicTableName=%s,shardColumn=%s,分片键值=%s",logicTableName,columnName,shardValue));
int suffix=-1;
if (shardValue instanceof Integer|| shardValue instanceof Long) {
long temp = (Long.parseLong(shardValue.toString())) % 2;
suffix = (int) temp;
}
for (Object each : availableTargetNames) {
if (each.toString().endsWith(suffix + "")) {
System.out.println("返回的目标库为"+each.toString());
return each.toString();
}
}
//如果没有处理则抛异常
throw new UnsupportedOperationException();
}
}
RangeShardingAlgorithm
- implements RangeShardingAlgorithm
- Collection doSharding(Collection
availableTargetNames, RangeShardingValue shardingValue); 实现方法
import com.google.common.collect.Range;
import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class StandardDbRangeAlgorithm implements RangeShardingAlgorithm {
@Override
public Collection<String> doSharding(Collection availableTargetNames, RangeShardingValue shardingValue) {
System.out.println("不太合适 让他全表扫描吧");
System.out.println("如果是日期可以考虑按范围查询");
System.out.println("或者0-1000放一个表,1000到2000放一个表");
return availableTargetNames;
}
}