关于DistSQL的用法(ALTER SHARDING ALGORITHM)

当前的规则:

分片算法,(仅仅是为了验证props的使用)

package com.standard;


import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
import org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm;

import java.util.Collection;
import java.util.Properties;

/**
 * @author liuweijia
 * @email: weijialiu@hiretual.com
 */
public class TestSharding implements StandardShardingAlgorithm<String> {

    private static final String PREFIX = "database_";
    private Properties props = new Properties();

    @Override
    public String doSharding(Collection<String> collection, PreciseShardingValue<String> preciseShardingValue) {
        System.out.println("========single sharding[Start]========");
        System.out.println(props.toString());
        if (preciseShardingValue != null) {
            System.out.println("preciseShardingValue = " + preciseShardingValue.getValue());
            String value = preciseShardingValue.getValue();
            System.out.println("Will return \"team_" + value + "\"");
            return PREFIX + "team_" + value;
        } else {
            System.out.println("preciseShardingValue is Null.");
            System.out.println("Will Return \"team_default\"");
            return PREFIX + "team_default";
        }
    }

    @Override
    public Collection<String> doSharding(Collection<String> collection, RangeShardingValue<String> rangeShardingValue) {
        return null;
    }

    @Override
    public void init() {

    }

    @Override
    public String getType() {
        return null;
    }
}

执行的DistSQL:

mysql> ALTER SHARDING ALGORITHM database-sharding-method(TYPE(PROPERTIES("team_a"="team_a","team_b"="team_b","team_c"="team_c")));
ERROR 1235 (42000): This version of ShardingSphere-Proxy doesn't yet support this SQL. 'You have an error in your SQL syntax'

我是按照这个线索: 关于自定义分片类的切换问题 - Apache ShardingSphere / 提问 - OpenSEC (sphere-ex.com)

只是想在使用proxy的过程中,动态的改变规则,所以有了这些操作,请问这些操作思路是否正确,亦或是驴唇不对马嘴?谢谢大佬们!!!

  1. 语法不完整,可以参考 ss-proxy如何创建复杂的自定义算法规则?

CREATE SHARDING ALGORITHM database_sharding_method (
    TYPE(NAME=CLASS_BASED,PROPERTIES(
    "strategy"="standard",
    "algorithm-class-name"="com.standard.TestSharding",
    "自定义key"="自定义value",
)));
  1. 自定义算法实现,需要在覆写 init 方法,从 props 中获取自己需要的自定义参数。还是参考 example 中的例子吧
    image
1 个赞
京ICP备2021015875号