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

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

作者头像
Se7eN_HOU
发布于 2023-12-20 01:23:39
发布于 2023-12-20 01:23:39
22200
代码可运行
举报
运行总次数: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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
Python实现实验室药品管理和预警系统(毕设源码)
在Python3.7,Django2.2,MySQL8.0 版本下测试运行成功,windows,linux平台。
Python研究者
2022/10/27
7330
基于Python+Vue开发的电影订票管理系统源码
本项目是基于Python和Vue实现的电影订票管理系统,采用前后端分离架构,专为大学生课程设计作业开发。该系统旨在帮助学生熟悉Python编程语言,提升项目设计与开发技能。通过参与该项目,学生能够在实战中掌握技术要点,强化实践能力,并为未来的职业发展奠定扎实的基础。
西门吹雪1997
2025/04/15
440
基于Python+Vue开发的音乐推荐管理系统源码与设计
这是一个采用前后端分离架构,基于Python和Vue开发的音乐推荐管理系统,专为大学生课程设计项目而打造。该项目旨在帮助学生深入学习Python编程语言的应用,同时提高他们在项目设计和开发中的实践能力。通过开发这一音乐推荐管理系统,学生能够在实际操作中巩固知识,提升技术水平,并为未来的职业拓展积累宝贵的经验与能力。共同学习技术
西门吹雪1997
2025/04/13
510
基于Python+Vue开发的健身房管理系统源码+运行学习
(4) 配置数据库。在server目录下的server下的settings.py中配置您的数据库账号密码
西门吹雪1997
2025/04/21
560
基于Python+Vue开发的婚恋相亲网站管理系统-源码+课程设计+前后端分离
基于 Python 和 Vue 开发的婚恋交友管理系统(前后端分离)是一个为大学课程设计作业而创建的项目。该系统旨在帮助大学生学习并掌握 Python 编程技能,同时培养他们的项目设计与开发能力。通过参与这个基于 Python 的婚恋相亲交友系统项目,大学生能够在实践中提升自己的技能,为未来的职业发展奠定坚实的基础。
西门吹雪1997
2025/04/08
1130
基于Python+Vue开发的大学竞赛报名管理系统源码+运行
(4) 配置数据库。在server目录下的server下的settings.py中配置您的数据库账号密码
西门吹雪1997
2025/04/05
720
基于Python+Vue开发的旅游景区管理系统源码+运行
本项目是一款基于 Python 和 Vue 技术栈开发的旅游景区管理系统,采用前后端分离架构,专为大学生课程设计作业所开发。其核心目标是帮助大学生在实践中学习和掌握 Python 编程技术,同时提升项目设计与开发的综合能力。通过对本旅游景区管理系统的学习与参与,学生能够切实体验从需求分析、设计实现到上线部署的完整开发流程,为未来的职业发展积累宝贵的实践经验,并奠定扎实的技能基础。
西门吹雪1997
2025/04/14
700
基于Python+Vue开发的民宿客房预订管理系统源码+运行
本项目是一项为大学生课程设计任务开发的民宿客房预订管理系统,采用Python与Vue技术实现前后端分离。该系统旨在引导大学生深入学习Python编程知识,同时提高其项目设计与开发能力。通过实践该管理系统的开发过程,学生能够在实际操作中提升自身技能,为今后的职业生涯积累经验和奠定扎实基础。
西门吹雪1997
2025/04/09
1810
基于Python+Vue开发的酒店客房预订管理系统源码运行
该项目是一个基于 Python 和 Vue 开发的酒店客房预订管理系统(前后端分离),是为大学生课程设计作业而创作的。该系统旨在帮助学生学习和掌握 Python 编程技能,同时培养他们的项目设计与开发能力。通过参与这个基于 Python 的酒店客房预订管理系统项目,大学生能够在实际操作中提升自身能力,为未来职业发展打下坚实的基础。
西门吹雪1997
2025/04/12
1620
酒店管理项目
该项目是基于Django技术开发的一套酒店管理系统,系统应用浏览器/服务期(Browser/Server)架构。系统主要包括员工用户功能和管理员用户功能两部分。开发员工信息管理、顾客信息管理、会员信息管理、停车场信息管理、餐厅信息管理、客房信息管理、餐饮订单管理、客房订单管理等功能,管理人员只需要操作系统就可以快捷、方便地完成对酒店管理的各项任务。
润森
2022/12/20
4610
酒店管理项目
基于Python+Vue开发的新闻管理系统源码+运行
该项目是一个基于Python和Vue开发的新闻管理系统,采用前后端分离的架构。这是为大学生课程设计作业而创建的项目,旨在帮助学生学习并掌握Python编程技能,同时提升他们的项目设计和开发能力。通过参与这一基于Python的新闻管理系统项目,大学生能够在实践中提升自己的技能,为未来的职业发展奠定坚实的基础。
西门吹雪1997
2025/04/10
1820
基于Python+Vue开发的房产销售管理系统源码+运行
本项目是一款基于 Python 和 Vue 开发的房产销售管理系统,采用前后端分离架构设计,专为大学生课程设计作业而开发。其主要目的在于帮助学生掌握 Python 编程技能,同时强化其在项目设计与开发方面的实践能力。通过开发这一房产销售管理系统,学生能够在实际操作中提升综合能力,为未来职业发展积累经验并奠定扎实基础。
西门吹雪1997
2025/04/11
1210
基于Python+Vue开发的体育用品商城管理系统源码+运行
(4) 配置数据库。在server目录下的server下的settings.py中配置您的数据库账号密码
西门吹雪1997
2025/04/06
790
Django框架开发001期 Python+Django开发教程,开启你的第一个django网站应用
Python的能力很强,它几乎可以写除了操作系统之外的所有应用程序。从这里,我们可以一起用Python开发网站,提升我们对Python的应用价值。
刘金玉编程
2023/02/27
1.1K0
Django框架开发001期 Python+Django开发教程,开启你的第一个django网站应用
Python3+Django2配置后台管理
使用 Django 我们只需要做一些配置,就可以实现简单的后台管理系统,下面我们以新闻系统为例子来搭建后台。
小柒2012
2018/12/14
6350
Python3+Django2配置后台管理
基于python+django的图书借阅网站-图书借阅管理系统
https://github.com/geeeeeeeek/python_book
西门吹雪1997
2023/07/12
5660
Django学习记录
创建:app01 执行 python manage.py startapp app01 在setting中奖app01应用加入INSTALL_APPS选项中
懿曲折扇情
2022/08/24
4340
Django-4 管理页面
Django 管理页面是查看我们的应用程序中当前数据的好方法,并且还为我们提供了用于创建或修改该数据的良好图形化界面展示。让我们开始吧:
XXXX-user
2019/07/23
7270
Django-4 管理页面
django 项目常用配置
django 项目常用配置 部署管理 创建环境 mkdir LJblog && cd LJblog #建立目录 python3 -m venv env_django (或: virtualenv -p `which python3` env_django) source env_django
以谁为师
2019/05/29
3940
Django实践-03模型-02基于admin管理表
官网:https://www.djangoproject.com/ 博客:https://www.liujiangblog.com/
IT从业者张某某
2023/10/16
2530
Django实践-03模型-02基于admin管理表
推荐阅读
相关推荐
Python实现实验室药品管理和预警系统(毕设源码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档