开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 分片 - 分片规则 - 应用指定算法】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/756/detail/13272
MyCat - 分片 - 分片规则 - 应用指定算法
内容介绍:
一、应用指定算法
二、测试
一、应用指定算法
1.简介
应用指定算法分片指的是在运行阶段由应用程序自主决定当前这条数据路由到哪个分片,直接根据字符子串(必须是数字)继续的分片号,然后再路由到对应的分片。
2.配置如下
<tableRule name =" arding - by - substring ">
< rule >
< columns > ids / columns >
xalgorithm > sharding - by - substring </ algorithm >
</ rule >
</ t ableRule >
< function name =" sharding - by - substring " class =" io . mycat . route . function . PartitionDirectBySubString ">
< property name =" startIndex ">0</ property ><!-- zero - bas ed --> xproperty name =" size ">2</ property >
< property name =" partitionCount ">3</ pr operty >
< property name =" defaultPartition '>0</ property ></ funct ion >
首先是分片规则安照哪个字段进行分片,然后来指定分片法,下面要配置分片结果的处理类,指定 startIndex 起始索引,这个起始索引指的是子字符串的起始索引,从哪个位置开始截取子字符串,size 截取的长度是多长,partitionCount 指的是分片的数量,默认的分片为零,假如在这里插入了一个 ID,它的值是 05-100000002,按照刚才的配置从第一位开始截取,截取长度是两个,截取出来的就是 05,这两位代表的就是他获得的分区号,如果 05 一共有五个分区,他就会存储在这个分区中,如果没有,他会使用默认分区。
二、测试
1.配置
<table name =" tb _ app " dataNode ="dn1,dn2,dn3" rule =" sharding - by - substring "/>
首先配置一个逻辑表,在 schema.xml 中进行配置,然后需要进行配置分配规则,分片规则需要使用 sharding - by - substring
<tableRule name =" sharding - by - substring "
xrule >
< columns > id </ columns >
< algorithm > sharding - by - substring </ algorithm ></ rule >
</tab1eRule
还需要分片的函数
< function name =" sharding - by - substring " class =" io . mycat . route . function . PartitionDirectBySubString ">
< property name =" startIndex ">0</ property ><!-- zero - bas ed --> xproperty name =" size ">2</ property >
< property name =" partitionCount ">3</ pr operty >
< property name =" defaultPartition '>0</ property ></ funct ion >
这里面的属性都不用改变,这些属性已经配置好了,还需要重启 my cat,My cat 重启,完成之后,再次重新连接这个 mycat,mycat 重新连接后执行指令 show tables 查看一下里面的表,刚才所设置的表 APP 已经有了。
接下来需要创建表结构,插入数据
2.数据
CREATE TABLE ‘ tb _ app (
id varchar (10) NOT NULL cOMMENT ‘ ID ',
name varchar (200) DEFAULT NULL cOMMENT ‘名称’,
PRIMARY KEY ( id )
) ENGINE = InnoDB DEFAULT CHARSET = ut f8mb4; I
执行,表结构已经创建好了,接下来再像这张表结构中插入数据
insert into tb _ app ( id , name ) values ('00-00001','Testx00001');
insert into tb _ app ( id , name ) values ('01-00001",'Test100001');
insert into tb _ app ( id , name ) values ('01-00002','Test200001');
insert into tb _ app ( id , name ) values ('02-00001','Test300001');
insert into tb _ app ( id , name ) values ('02-00002','TesT400001');
数据插入进来以后,执行select*from tb_app
这五条数据都已经有了,接下来需要知道这五条数据到底存储在哪个节点当中,select*from tb_app 第一个中有,select*from tb_app 第二个中也有,select*from tb_app 第三个中也有,在插入数据时,前两位 00,01,01,02,02这些就是指定分片,00 指定第一个分片,01 指定第二个分片,零二指定第三个分片,接下来还想插入一条数据
insert into tb _ app ( id , name ) values ('00-00003','Testx00001');
让这条数据在第一个分片中就是 00,接下来再来看第一个分片
00003 就已经进来了,这就是应用指定分配