一、应用指定分片  

  此规则是在运行阶段有应用自主决定路由到那个分片,根据提供的字段,然后按照指定的规则,截取该字段的部分子字符串当做分片的依据,该分别方法比较灵活,适用于某个字段有几个特殊的字符串拼接而成的这种场景,例如:一个学校的学号:小学部的学号以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上进行查询的数据是,所有数据节点的全集。应用指定分片是水平分库分表的一种方式。

 

MySQL运维11-Mycat分库分表之应用指定分片的更多相关文章

  1. Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解

    一.mycat的安装 环境准备:准备一台虚拟机192.168.152.128 1. 下载mycat cd /softwarewget http:-linux.tar.gz 2. 解压mycat tar ...

  2. MySQL+MyCat分库分表 读写分离配置

    一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : cor ...

  3. Mysql系列四:数据库分库分表基础理论

    一.数据处理分类 1. 海量数据处理,按照使用场景主要分为两种类型: 联机事务处理(OLTP) 面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果. ...

  4. 《MyCat分库分表策略详解》

    在我们的项目发展到一定阶段之后,随着数据量的增大,分库分表就变成了一件非常自然的事情.常见的分库分表方式有两种:客户端模式和服务器模式,这两种的典型代表有sharding-jdbc和MyCat.所谓的 ...

  5. 3.Mysql集群------Mycat分库分表

    前言: 分库分表,在本节里是水平切分,就是多个数据库里包含的表是一模一样的. 只是把字段散列的分到不同的库中. 实践: 1.修改schema.xml 这里是在同一台服务器上建立了4个数据库db1,db ...

  6. mycat 分库分表

    单库分表已经在上篇写过了,这次写个分库分表,不同在于配置文件上的一点点不同 <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> &l ...

  7. MyCat分库分表入门

    1.分区 对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm. 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后 ...

  8. Mycat分库分表(一)

    随着业务变得越来越复杂,用户越来越多,集中式的架构性能会出现巨大的问题,比如系统会越来越慢,而且时不时会宕机,所以必须要解决高性能和可用性的问题.这个时候数据库的优化就显得尤为重要,在说优化方案前,先 ...

  9. mycat分库分表 看这一篇就够了

    ​ 之前我们已经讲解过了数据的切分,主要有两种方式,分别是垂直切分和水平切分,所谓的垂直切分就是将不同的表分布在不同的数据库实例中,而水平切分指的是将一张表的数据按照不同的切分规则切分在不同实例的相同 ...

  10. MyCat | 分库分表实践

    引言 先给大家介绍2个概念:数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式. 切分模式 一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之 ...

随机推荐

  1. 《小白WEB安全入门》02. 开发篇

    @ 目录 初识HTML潜在漏洞 初识CSS潜在漏洞 初识JS潜在漏洞 初识后端潜在漏洞 后端能做什么 后端种类 后端框架 潜在漏洞 本系列文章只叙述一些超级基础理论知识,极少有实践部分 本文涉及到的语 ...

  2. 前端Vue仿企查查 天眼查知识产权标准信息列表组件

    ​ 引入Vue仿企查查天眼查知识产权标准信息列表组件 随着技术的不断发展,传统的开发方式使得系统的复杂度越来越高.在传统开发过程中,一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改,造成牵一 ...

  3. 使用flask开发web应用

    Flask环境搭建 要开发flash应用,我们需要做一些准备工作 我写了个初始化的脚本 Pip_init.sh来安装初始工作 可以到我的git上去下载该脚本进行初始化安装 要启动flask应用,我们需 ...

  4. 4399 Flash游戏专用浏览器, 无需安装Flash插件

    目前所有的主流浏览器都已经不再支持Flash了,即使有一些国内浏览器还支持flash,但只能安装国内特供版Flash Player. 但问题的关键在于,这个国内特供版跟 Adobe 海外发行的版本是两 ...

  5. oracle 验证流水存在性火箭试优化

    在生产中经常遇到"select * from  tbl_IsExist where date=?"的SQL,经与开发人员沟通得知此SQL是验证流水存在性,若不存在则插入,若存在退出 ...

  6. C#/.NET/.NET Core优秀项目和框架2023年9月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(公众号每周至少推荐两个优秀的项目和框架当然节假日除外),公众号推文有项目和框架的介绍.功能特点以及部分截图等(打不开或 ...

  7. Django-rest-framework框架——过滤排序分页异常处理、自动生成接口文档、JWT认证

    @ 目录 一 过滤Filtering 二 排序 三 分页Pagination 可选分页器 应用 四 异常处理 Exceptions 4.1 使用方式 4.2 案例 4.3 REST framework ...

  8. Python--乱码转化为中文

    1. \u和\x的含义 \u:代表的是unicode码 \x:代表的是16进制码 2. 代码实现 :\x类型 # \xe4\xb8\xad\xe6\x96\x87 代表的意思是'中文' s = u'\ ...

  9. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-18-处理鼠标拖拽-上篇

    1.简介 本文主要介绍两个在测试过程中可能会用到的功能:在selenium中宏哥介绍了Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后 ...

  10. 面向生产的 LLM 优化

    注意 : 本文同时也是 Transformers 的文档. 以 GPT3/4.Falcon 以及 LLama 为代表的大语言模型 (Large Language Model,LLM) 在处理以人为中心 ...