场景: 雪花ID 都是偶数,根据ID 取模,肯定只会落到偶数的表里,所以要自定义分片算法
首先得去git 拉取一份mycat 服务代码
新建一个算法类 把ID最后一个字符去掉再取模(把普通的取模算法做一点修改即可)
package io.mycat.route.function;
import io.mycat.config.model.rule.RuleAlgorithm;
import java.math.BigInteger;
/**
* 自定义算法 字符串截取后取模,
* 字符串截取倒数第2位 取模 (雪花ID 最后一位永远都是偶数)
*/
public class SubStringPartitionByMod extends AbstractPartitionAlgorithm implements RuleAlgorithm {
private int count;
@Override
public void init() {
}
public void setCount(int count) {
this.count = count;
}
@Override
public Integer calculate(String columnValue) {
BigInteger bigNum = new BigInteger(columnValue.substring(0, columnValue.length() - 1)).abs();
return (bigNum.mod(BigInteger.valueOf(count)