Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL运维9-Mycat分库分表之枚举分片

MySQL运维9-Mycat分库分表之枚举分片

作者头像
Se7eN_HOU
发布于 2023-12-19 01:38:57
发布于 2023-12-19 01:38:57
19600
代码可运行
举报
运行总次数:0
代码可运行

一、枚举分片

  通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,这种方式就是枚举分片规则,本规则适用于按照省份,性别,状态拆分数据等业务

二、枚举分片案例

  枚举分片需求:现有 tb_enum 表,其中有 id, username, status三个字段,其中status值为1,2,3 当status=1时表示:未启用,status=2时表示:已启用,status=3时表示:已注销。现在我们就需要根据这三种状态进行分片。

  数据库需求:还是用之前文章中创建的 hl_logs 数据库

  表需求:在 hl_logs 中重新创建表为 tb_enum

三、配置rule.xml

  说明1:系统默认的枚举分片规则为:sharding-by-intfile

  说明2:系统默认的枚举字段是:sharding_id (可以根据需要改成自己需要的枚举字段,但是不推荐,因为有可能多个表的枚举字段会有冲突,请看说明4)

  说明3:系统默认的枚举分片的算法:hsah-int

  说明4:这里我将系统的枚举算法复制一份改了名字为"my-sharding-by-intfile1",columns改为我需要的枚举字段status,这样做的原因是,因为如果一个数据库中可能还会有其他的表根据其他枚举字段分片,这样就冲突了,所以为了防止多个表的枚举分片规则冲突,最好的方式就是重新复制一个新的枚举规则,改一下规则的名称,然后再改一个枚举的字段,只要保证枚举算法:hash-int不变就行了。

  说明5:在function标签中的mapFile属性可以看出,枚举分片的配置通过partition-hash-int.txt文件配置

  说明6:修改partition-hash-int.txt文件,其中1代表status=1,表示未启用的用户,写入到索引为0的第一个数据节点中

  说明7:修改partition-hash-int.txt文件,其中2代表status=2,表示已启用的用户,写入到索引为1的第二个数据节点中

  说明8:修改partition-hash-int.txt文件,其中3代表status=3,表示已注销的用户,写入到索引为2的第三个数据节点中

四、配置schema.xml

  说明1:枚举分片的逻辑库是hl_logs

  说明2:枚举分片的逻辑表是tb_enum

  说明3:dataNode同样是dn4,dn5,dn6

  说明4:枚举分片的规则是自定义的枚举规则 rule="my-sharding-by-intfile1"

  说明5:因为 tb_logs 和 tb_enum 是在同一个数据库中,所以dataNode配置一样,就可以共用

  说明6:dbhost1数据节点为192,168.3.90

  说明7:dbhost2数据节点为192.168.3.91

  说明8:dbhost3数据节点为192.168.3.92

五、配置server.xml

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

六、枚举分片测试

  首先重启Mycat

  登录Mycat

  查看逻辑库和逻辑表

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table tb_enum(id bigint(20), username varchar(20), status int(2));

  插入一下数据进行分片测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert into tb_enum(id, username,status) values (1, "张三", 1);
insert into tb_enum(id, username,status) values (2, "李四", 2);
insert into tb_enum(id, username,status) values (3, "王五", 3);
insert into tb_enum(id, username,status) values (4, "赵六", 1);
insert into tb_enum(id, username,status) values (5, "侯七", 2);
insert into tb_enum(id, username,status) values (6, "孙八", 3);

  说明1:数据节点192.168.3.90上存的全部是status=1的数据

  说明2:数据节点192.168.3.91上存的全部是status=2的数据

  说明3:数据节点192.168.3.92上存的全部是status=3的数据

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL运维11-Mycat分库分表之应用指定分片
  此规则是在运行阶段有应用自主决定路由到那个分片,根据提供的字段,然后按照指定的规则,截取该字段的部分子字符串当做分片的依据,该分别方法比较灵活,适用于某个字段有几个特殊的字符串拼接而成的这种场景,例如:一个学校的学号:小学部的学号以0开头,形式为:0xxxxx(注意因为数据节点的索引是从0开始的,所以这里截取的字符串最好也是从0开始,不然第一个数据节点将会没有值存在,后面会有演示),中学部的学号以1开头,形式为1xxxxx,高中部的学号以2开头,形式为2xxxxx等,这样就不用在单独做一个字段区分学段了,只需要判断一下学号的开头就可以实现不同学段的学生分库分表储存。
Se7eN_HOU
2023/12/20
2380
MySQL运维11-Mycat分库分表之应用指定分片
MySQL运维12-Mycat分库分表之按天分片
  指定一个时间周期,将数据写入一个数据节点中,例如:第1-10天的数据,写入到第一个数据节点中,第2-20天的数据写入到第二个节点中,第3-30天的数据节点写入到第三个数据节点中。    
Se7eN_HOU
2023/12/21
4760
MySQL运维12-Mycat分库分表之按天分片
MySQL运维8-Mycat分库分表之范围分片
  根据指定的字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。
Se7eN_HOU
2023/12/19
2630
MySQL运维8-Mycat分库分表之范围分片
MySQL运维13-Mycat分库分表之按月分片
  使用场景为按照自然月来分片,每个自然月为一个分片,但是一年有12个月,是不是要有12个数据节点才行呢?并不是。例如我现在只有三个分片数据库,这样就可以1月在第一个数据分片中,2月在第二个数据分片中,3月在第三个数据分片中,当来到4月的时候,就会重新开始分片,4月在第一个数据分片,5月在第二个数据分片,6月在第三个数据分片,以此类推。
Se7eN_HOU
2023/12/21
1.1K0
MySQL运维13-Mycat分库分表之按月分片
MySQL 分库分表
随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:
用户9615083
2022/12/25
14.9K0
MySQL 分库分表
MySQL运维10-Mycat分库分表之一致性哈希分片
  一致性哈希分片的实现思路和我们之前介绍的水平分表中的取模分片是类似的。只不过取模分片,采用的是利用主键和分片数进行取模运算,然后根据取模后的结果,将数据写入到不同的分片数据中。但是这种分片方式有一个局限性就只能对id是整形的数据使用,如果id是个uuid类型这个的非整形的字段,就没有办法使用取模的方式进行分片了。这时候就可以采用一致性hash算法分片,其分片的原则是根据id 哈希运算之后,然后再决定写入到哪个分片,所以我认为一致性哈希的分表方式是对取模分片的补充。
Se7eN_HOU
2023/12/20
4950
MySQL运维10-Mycat分库分表之一致性哈希分片
mycat分片规则详解+实例演示
MyCat的分片规则配置在conf目录下的rule.xml文件中定义 ;
别团等shy哥发育
2023/02/25
1.5K0
mycat分片规则详解+实例演示
MySQL数据库实践学习(十八)
通过在配置文件中配置可能的枚举值, 指定数据分布到不同数据节点上, 本规则适用于按照省份、性别、状态拆分数据等业务 。
用户1289394
2022/10/26
1810
MySQL数据库实践学习(十八)
数据库分库分表,分片配置轻松入门!
当我们把 MyCat + MySQL 的架构搭建完成之后,接下来面临的一个问题就是,数据库的分片规则:有那么多 MySQL ,一条记录通过 MyCat 到底要插入到哪个 MySQL 中?这就是我们今天要讨论的问题。
江南一点雨
2019/07/10
5700
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读写分离及分库分表
MySQL运维7-Mycat水平分表
  在业务系统中,有一张日志表,业务系统每天都会产生大量的日志数据,单台服务器的数据存储即处理能力是有限的,可以对数据库表进行拆分,这时候就可以使用水平分表的策略
Se7eN_HOU
2023/12/18
5100
MySQL运维7-Mycat水平分表
Mycat分库分表全解析 Part 5 Mycat 分片规则介绍
上面一节我们讲到分片规则依赖于算法,Mycat提供一些常用的算法,基本满足我们的需求,这里介绍几个,全部的请查看官方文档的10.5章节
bsbforever
2020/08/18
1.3K0
Mycat分库分表全解析 Part 5 Mycat 分片规则介绍
MyCat:第八章:MyCAT In Action中文版
MyCAT的目标是:低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
Java廖志伟
2022/09/28
8280
MyCat:第八章:MyCAT  In Action中文版
MyCat教程【安装及配置介绍】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
用户4919348
2019/10/17
3.2K0
MyCat教程【分库分表】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
用户4919348
2019/10/17
2.3K0
Mycat分库分表的简单实践
MySQL的使用场景中,读写分离只是方案中的一部分,想要扩展,势必会用到分库分表,可喜的是Mycat里已经做到了,今天花时间测试了一下,感觉还不错。 关于分库分表 当然自己也理了一下,分库分表
jeanron100
2018/03/21
1.4K0
Mycat分库分表的简单实践
Demo入门Mycat【面试+工作】
Mycat是一个开源的分布式数据库系统,是一个实现了MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里;
Java帮帮
2018/12/05
1.2K0
我自己实际操作安装MyCat水平分割之分片枚举和取模算法(二)
水平分割之分片枚举实战操作 根据地区进行分库:湖北数据库、江苏数据库 山东数据库 分表对应db0;db1;db2 在这三个库里面分表创建相同的表t_order表
全栈程序员站长
2022/06/30
2620
Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用
MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
程序员鹏磊
2018/01/16
2.1K0
Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用
数据库中间MyCat硬核教程,主从复制,分库分表
如今随着互联网的发展,数据的量级也是成指数的增长,从 GB 到 TB 到 PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候 NoSQL 的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。
小熊学Java
2023/10/23
2.6K0
数据库中间MyCat硬核教程,主从复制,分库分表
相关推荐
MySQL运维11-Mycat分库分表之应用指定分片
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档