首页 > 数据库 >MySQL运维11-Mycat分库分表之应用指定分片

MySQL运维11-Mycat分库分表之应用指定分片

时间:2023-12-19 16:48:32浏览次数:30  
标签:11 分库 运维 tb 截取 节点 分片 数据 id

一、应用指定分片  

  此规则是在运行阶段有应用自主决定路由到那个分片,根据提供的字段,然后按照指定的规则,截取该字段的部分子字符串当做分片的依据,该分别方法比较灵活,适用于某个字段有几个特殊的字符串拼接而成的这种场景,例如:一个学校的学号:小学部的学号以0开头,形式为:0xxxxx(注意因为数据节点的索引是从0开始的,所以这里截取的字符串最好也是从0开始,不然第一个数据节点将会没有值存在,后面会有演示),中学部的学号以1开头,形式为1xxxxx,高中部的学号以2开头,形式为2xxxxx等,这样就不用在单独做一个字段区分学段了,只需要判断一下学号的开头就可以实现不同学段的学生分库分表储存。

  

  说明1:子字符串分片有一个局限性,就是截取的子字符串必须是数字,而且要从截取的数字0:代表第一个数据节点,1:代表第二个数据节点,以此类推,因为数据节点的下标是从0开始的。

  说明2:子字符串分片的规则是rule="sharding-by-substring"

  说明3:function中的startIndex是截取子字符串的开始截取的索引位置,即从第一个位置开始截取。

  说明4:function中的size是截取长度

  说明5:partitionCount是分片数量,注意分片的索引从0开始,所以这里partitionCount=3,即第一个数据分片的值为0,第二个数据分片的值为1,第三个数据分片的值为2

  说明6:defaultPartition是默认的数据保存的数据节点,即如果万一出现了不符合的截取数据,都会存放在这个默认数据节点上,例如现在有一个截取子字符串为5开头的数据,就会放在这个默认数据节点上。

二、准备工作

  子字符串分片需求:基于逻辑库hl_logs,创建逻辑表tb_school,里面包括id,name,age等字段,其中小学部的学生id以1开头,中学部的学生id以2开头,高中部的学生id以3开头

  

三、配置rule.xml

<tableRule name="sharding-by-substring">
    <rule>
        <columns>id</columns>
        <algorithm>sharding-by-substring</algorithm>
    </rule>
</tableRule>

  说明1:该分片方法没有在rule.xml示例中展示出来,所以需要我们手动在rule.xml文档中,添加上该规则。

<function name="sharding-by-substring" class="io.mycat.route.function.PartitionDirectBySubString">
    <property name="startIndex">0</property>
    <property name="size">1</property>
    <property name="partitionCount">3</property>
    <property name="defaultPartition">2</property>
</function>

  说明2:该分片方法的function引用也没有在rule.xml的示例中展示出来,同样需要我们手动添加上function的实现

  说明3:function中的startIndex是截取子字符串的开始截取的索引位置,即从第一个位置开始截取。

  说明4:function中的size是截取长度

  说明5:partitionCount是分片数量,注意分片的索引从0开始,所以这里partitionCount=3,即第一个数据分片的值为0,第二个数据分片的值为1,第三个数据分片的值为2

  说明6:defaultPartition是默认的数据保存的数据节点,即如果万一出现了不符合的截取数据,都会存放在这个默认数据节点上,例如现在有一个截取子字符串为5开头的数据,就会放在这个默认数据节点上。

四、配置schema.xml

  

  说明1:逻辑库为hl_logs

  说明2:逻辑表为tb_school

  说明3:分片规则我们改手动实现的"sharding-by-substring"

  

  

  说明4:dn10对应的是dbhost1即192.168.3.90分片

  说明5:dn11对应的是dbhost2即192.168.3.91分片

  说明6:dn12对应的是dbhost3即192.168.3.92分片

五、配置server.xml

  

  说明1:在之前的文章中已经将tb_logs表添加到root用户的权限中了,所以这里不需要更改即可。

六、应用指定分片测试

  首先重启Mycat

  

  登录Mycat

  

  查看逻辑库和逻辑表

  

  这里的tb_school只是逻辑库,而在MySQL中还并没有tb_school这个表,需要在Mycat中创建

create table tb_school(id varchar(5), name varchar(20), age int);

  

  插入数据进行测试:这里插入一组数据进行测试:

insert into tb_school(id, name, age) values ("00001", "张三", 7);
insert into tb_school(id, name, age) values ("00002", "李四", 8);
insert into tb_school(id, name, age) values ("10001", "王五", 14);
insert into tb_school(id, name, age) values ("10002", "赵六", 15);
insert into tb_school(id, name, age) values ("20001", "侯七", 17);
insert into tb_school(id, name, age) values ("30003", "孙八", 18);
insert into tb_school(id, name, age) values ("40001", "周九", 17);

  

  说明1:这里的id要求是字符串类型的

  说明2:id虽然是字符串类型的,但是我们要截取的第一位还必须是数字,所以这中分片方式比较苛刻

  

  说明3:第一个数据节点192.168.3.90里面保存的数据全部是id以0开头的数据

  

  说明4:第二个数据节点192.168.3.91里面保存的数据全部是id以1开头的数据

  

  说明5: 第三个数据节点的索引是2,所以第三个数据节点是默认数据阶段,这里面保存了id以2开头的数据,可其他不满足分片规则的数据,例如id截取第一个字符串3和4,就不满足数据分片下标0,1,2的规则,就只能进入到默认的这个数据节点中。也可以理解为默认的数据节点是兜底的分片

  说明6:其实这个应用指定字符串截取的方式和枚举分片有同工异曲的效果,只是不用在单独创建一个枚举字段了。

  

  说明7:在Mycat上进行查询的数据是,所有数据节点的全集。应用指定分片是水平分库分表的一种方式。

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:11,分库,运维,tb,截取,节点,分片,数据,id
From: https://www.cnblogs.com/Se7eN-HOU/p/17913587.html

相关文章

  • 111
    /home/sdnu/anaconda3/envs/DDIM/bin/python/media/sdnu/f9cc3556-f530-42b2-95df-64c823288321/home/sdnu/SXY/Diffusion/latent-dehazing/train.pyexportCUDA_VISIBLE_DEVICES=0Disableddistributedtraining.Pathalreadyexists.Renameitto[/media/sdnu/f9cc3556-f......
  • 11个linux命令
    1.sudo!!命令没有特定输入sudo命令而运行,将给出没有权限的错误。那么,你不需要重写整个命令,仅仅输入’!!‘就可以抓取最后的命令。$ apt-get updateE: Could not openlock file /var/lib/apt/lists/lock - open (13: Permission denied)E: Unable to lock direct......
  • 【2023潇湘夜雨】WIN11_Pro_Canary_26016.1000软件选装纯净版12.19
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_Canary_26016.1000。2.增加部分优化方案,手工精简部分较多,干掉右下角水印。3.OS版本号为26016.1000。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.1......
  • CF1191B 题解
    原题传送门题目大意\(3\)块麻将,求需要换掉几张牌才能一次出完\(3\)块麻将。每块麻将,用一个长度为\(2\)的字符串给出,字符串由\((1,9)\)的一位数字和\(m\)、\(s\)或\(p\)组成。\(3\)块一模一样的麻将或第\(2\)位相同,前面是连号的\(3\)块麻将都可以一次性出完。......
  • C0392 B 【1109 B组】预处理器 题解
    题意:求有多少个长度为\(n\)的数组\(a\)满足以下条件。条件一:\(l_{i}\lea_{i}\ler_{i}\)。条件二:\(a_{i}\)模\(2\)等于\(p_{i}\)。条件三:\(s\le\suma_{i}\let\)。求答案模\(mod\)的值,\(mod\)不一定是一个质数。数据范围:\(n\le13\)。又积累到一......
  • Landsat 5 C02数据集2007-2011年
    Landsat5是美国陆地卫星系列(Landsat)的第五颗卫星,于1984年3月1日发射,2011年11月停止工作。16天可覆盖全球范围一次。Landsat5_C2_TOA数据集是由Collection2level1数据通过MTL文件计算得到的TOA反射率产品。数据集的空间分辨率为30米,相对于Collection1level1数据,Collection2level......
  • Windows11忘记开机密码重置
    在锁屏页面按着shift键重启,找到命令行输入一下两行代码copyc:\windows\system\system32\utilman.exec:\windows\system32\utilman.exebakcopyc:\windows\system32\cmd.exec:\windows\system32\utilman.exe/y然后退出命令行,重启计算机,在输入密码页面右下角有一个轻松使......
  • MySQL运维9-Mycat分库分表之枚举分片
    一、枚举分片通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,这种方式就是枚举分片规则,本规则适用于按照省份,性别,状态拆分数据等业务二、枚举分片案例枚举分片需求:现有tb_enum表,其中有id,username,status三个字段,其中status值为1,2,3当statu......
  • 11/02
    今天的课程安排相当紧凑,从UML统一建模语言开始,我对软件开发的蓝图有了更深的理解。这些图形化的表示方法让抽象的概念变得直观,我开始构想自己设计一个小型项目的框架。乒乓球课给了我一次释放压力的机会。球拍与小球的每一次碰撞,都让我暂时忘记了学业的繁重。我想象自己能用同样的......
  • centos 安装 x11
    centos编译安装x11需要的依赖安装xtrans下载地址进入解压目录:./configuremake&&makeinstall配置路径:exportPKG_CONFIG_PATH=/usr/local/share/pkgconfig:$PKG_CONFIG_PATH安装x11下载地址./configuremake&&makeinstallexportPKG_CONFIG_PATH=/usr/loc......