首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL运维11-Mycat分库分表之应用指定分片

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

作者头像
Se7eN_HOU
发布于 2023-12-20 01:23:39
发布于 2023-12-20 01:23:39
23200
代码可运行
举报
运行总次数:0
代码可运行

一、应用指定分片  

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<tableRule name="sharding-by-substring">
    <rule>
        <columns>id</columns>
        <algorithm>sharding-by-substring</algorithm>
    </rule>
</tableRule>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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:dn4对应的是dbhost1即192.168.3.90分片

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

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

五、配置server.xml

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

六、应用指定分片测试

  首先重启Mycat

  登录Mycat

  查看逻辑库和逻辑表

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table tb_school(id varchar(5), name varchar(20), age int);

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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上进行查询的数据是,所有数据节点的全集。应用指定分片是水平分库分表的一种方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mycat分库分表的简单实践
MySQL的使用场景中,读写分离只是方案中的一部分,想要扩展,势必会用到分库分表,可喜的是Mycat里已经做到了,今天花时间测试了一下,感觉还不错。 关于分库分表 当然自己也理了一下,分库分表
jeanron100
2018/03/21
1.4K0
Mycat分库分表的简单实践
MySQL运维12-Mycat分库分表之按天分片
  指定一个时间周期,将数据写入一个数据节点中,例如:第1-10天的数据,写入到第一个数据节点中,第2-20天的数据写入到第二个节点中,第3-30天的数据节点写入到第三个数据节点中。    
Se7eN_HOU
2023/12/21
4650
MySQL运维12-Mycat分库分表之按天分片
MySQL运维13-Mycat分库分表之按月分片
  使用场景为按照自然月来分片,每个自然月为一个分片,但是一年有12个月,是不是要有12个数据节点才行呢?并不是。例如我现在只有三个分片数据库,这样就可以1月在第一个数据分片中,2月在第二个数据分片中,3月在第三个数据分片中,当来到4月的时候,就会重新开始分片,4月在第一个数据分片,5月在第二个数据分片,6月在第三个数据分片,以此类推。
Se7eN_HOU
2023/12/21
1.1K0
MySQL运维13-Mycat分库分表之按月分片
Mycat分库分表全解析 Part 5 Mycat 分片规则介绍
上面一节我们讲到分片规则依赖于算法,Mycat提供一些常用的算法,基本满足我们的需求,这里介绍几个,全部的请查看官方文档的10.5章节
bsbforever
2020/08/18
1.3K0
Mycat分库分表全解析 Part 5 Mycat 分片规则介绍
MySQL数据库实践学习(十九)
运行阶段由应用自主决定路由到那个分片 , 直接根据字符子串(必须是数字)计算分片号。
用户1289394
2022/10/26
2620
MySQL数据库实践学习(十九)
mycat分片规则详解+实例演示
MyCat的分片规则配置在conf目录下的rule.xml文件中定义 ;
别团等shy哥发育
2023/02/25
1.5K0
mycat分片规则详解+实例演示
MyCat分库分表高级教程
简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机) 上面,以达到分散单台设备负载的效果。
张哥编程
2024/12/13
2320
MyCat分库分表高级教程
MyCat教程【分库分表】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
用户4919348
2019/10/17
2.2K0
Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用
MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
程序员鹏磊
2018/01/16
2.1K0
Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用
MySQL运维10-Mycat分库分表之一致性哈希分片
  一致性哈希分片的实现思路和我们之前介绍的水平分表中的取模分片是类似的。只不过取模分片,采用的是利用主键和分片数进行取模运算,然后根据取模后的结果,将数据写入到不同的分片数据中。但是这种分片方式有一个局限性就只能对id是整形的数据使用,如果id是个uuid类型这个的非整形的字段,就没有办法使用取模的方式进行分片了。这时候就可以采用一致性hash算法分片,其分片的原则是根据id 哈希运算之后,然后再决定写入到哪个分片,所以我认为一致性哈希的分表方式是对取模分片的补充。
Se7eN_HOU
2023/12/20
4840
MySQL运维10-Mycat分库分表之一致性哈希分片
mycat学习
区别读、写多数据源方式进行数据的存储和加载。 数据的存储(增删改)一般指定写数据源,数据的读取查询指定读数据源(读写分离会基于主从复制)
周杰伦本人
2022/10/25
7860
mycat学习
数据库分库分表,分片配置轻松入门!
当我们把 MyCat + MySQL 的架构搭建完成之后,接下来面临的一个问题就是,数据库的分片规则:有那么多 MySQL ,一条记录通过 MyCat 到底要插入到哪个 MySQL 中?这就是我们今天要讨论的问题。
江南一点雨
2019/07/10
5670
MySQL 分库分表
随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:
用户9615083
2022/12/25
14.8K0
MySQL 分库分表
MySQL数据库实践学习(二十一)
配置完毕后,重新启动MyCat,然后在mycat的命令行中,执行如下SQL创建表、并插入数据,查看数据分布情况。
用户1289394
2022/10/26
4020
MySQL数据库实践学习(二十一)
MySQL运维8-Mycat分库分表之范围分片
  根据指定的字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。
Se7eN_HOU
2023/12/19
2620
MySQL运维8-Mycat分库分表之范围分片
MySQL运维7-Mycat水平分表
  在业务系统中,有一张日志表,业务系统每天都会产生大量的日志数据,单台服务器的数据存储即处理能力是有限的,可以对数据库表进行拆分,这时候就可以使用水平分表的策略
Se7eN_HOU
2023/12/18
4960
MySQL运维7-Mycat水平分表
MySQL运维9-Mycat分库分表之枚举分片
  通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,这种方式就是枚举分片规则,本规则适用于按照省份,性别,状态拆分数据等业务
Se7eN_HOU
2023/12/19
1890
MySQL运维9-Mycat分库分表之枚举分片
Mysql之Mycat读写分离及分库分表
​ Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等, 然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。 如下图: ​ 上述图片里,Orders表被分为三个分片datanode(简称dn),这三个分片是分布在两台MySQL Server上(DataHost),即datanode=database@datahost方式, 因此你可以用一台到N台服务器来分片,分片规则为(sharding rule)典型的字符串枚举分片规则,一个规则的定义是分片字段(sharding column)+分片函数(rule function), ​ 这里的分片字段为prov而分片函数为字符串枚举方式。 ​ 当Mycat收到一个SQL时,会先解析这个SQL,查找涉及到的表,然后看此表的定义,如果有分片规则,则获取到SQL里分片字段的值,并匹配分片函数,得到该SQL对应的分片列表,
iginkgo18
2021/04/26
1K0
Mysql之Mycat读写分离及分库分表
快速学习-Mycat分片规则
在数据切分处理中,特别是水平切分中,中间件最终要的两个处理过程就是数据的切分、数据的聚合。选择合适的切分规则,至关重要,因为它决定了后续数据聚合的难易程度,甚至可以避免跨库的数据聚合处理。
cwl_java
2021/08/30
5610
快速学习-Mycat分片规则
MySQL运维5-Mycat配置
    schema.xml作为Mycat中最重要的配置文件之一,涵盖了Mycat的逻辑库、逻辑表、分片规则、分片节点即数据源的配置。主要包括一下三组标签
Se7eN_HOU
2023/12/18
5560
MySQL运维5-Mycat配置
相关推荐
Mycat分库分表的简单实践
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
加入[游戏服务器] 腾讯云官方交流站
游戏服运维小技巧 常见问题齐排查
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验