前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL运维9-Mycat分库分表之枚举分片

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

作者头像
Se7eN_HOU
发布2023-12-19 09:38:57
1560
发布2023-12-19 09:38:57
举报
文章被收录于专栏:侯哥的Python分享

一、枚举分片

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

二、枚举分片案例

  枚举分片需求:现有 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
复制
create table tb_enum(id bigint(20), username varchar(20), status int(2));

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

代码语言:javascript
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、枚举分片
  • 二、枚举分片案例
  • 三、配置rule.xml
  • 四、配置schema.xml
  • 五、配置server.xml
  • 六、枚举分片测试
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档