【Mycat 1.6之TableRule分片规则介绍】

1、TableRule介绍

1)schema.xml文件

rule="rule1"/>

2)Rule.xml文件

name="rule1">

id

func1

 

name="func1" class="io.mycat.route.function.PartitionByLong">

partitionCount">8

partitionLength">128

tableRule配置是

name 为schema.xml 中table 标签中对应的 rule="rule1" ,也就是配置表的分片规则,

columns 是表的切分字段: id创建日期。

algorithm 是规则对应的切分规则:映射到function 的name即func1

 

function 配置是分片规则的配置。

name 为切分规则的名称,名字人员取,但是需要与tableRule 中匹配。

class 是切分规则对应的切分类,写死,需要哪种规则则配置哪种,例如本例子是PartitionByLong分片:org.opencloudb.route.function.PartitionByLong

property 标签是切分规则对应的不同属性,不同的切分规则配置不同。partitionCount、partitionLength


【Mycat 1.6之TableRule分片规则介绍】_第1张图片
 

2、自定义分片函数

一般情况是extends AbstractPartitionAlgorithm implements  RuleAlgorithm

分布式数据库系统中,分片规则用于定义数据与分片的路由关系,也就是 insert,delete,update,select

的基本 sql 操作中,如何将 sql 路由到对应的分片执行。

 

分片规则类 PartitionByDate 的配置属性与类的成员变量对应。 Mycat 的配置文件装载机制中,会根据 property 自动设置类的成员变量,因此只要设置了 Set…方法就可

以赋值。

 

 

init 方法:

主要处理每种规则的自定义处理

 

calculate 方法:

计算路由分片的核心方法,计算出偏移量即是分片节点,所有的分片节点编号都是从 0 开始编码。

 

 

calculateRange 方法:

calculateRange 方法默认根据继承的抽象类规则,可不实现,默认实现是获取分片字段的值连续范围内的所有分片,主要用于类似:update test where id<5; 这种语句中,通过解析条件 id<15 解析出所有的 id 值域分

片的对应关系,依次路由执行,[1->dn0,2->dn1,3->dn2,4->dn3].

package io.mycat.route.function;

import io.mycat.config.model.rule.RuleAlgorithm;

/**

 * 这是一个自定义的分片函数框架

 * @author gaojingsong

 *

 */

public class MyFun  extends AbstractPartitionAlgorithm implements RuleAlgorithm {

@Override

public void init() {

super.init();

}

 

@Override

public Integer calculate(String columnValue) {

return null;

}

}


【Mycat 1.6之TableRule分片规则介绍】_第2张图片
 

你可能感兴趣的:(数据库-----MYSQL,Mycat中间件)