一、枚举分片

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

  

二、枚举分片案例

  枚举分片需求:现有 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中创建

create table tb_enum(id bigint(20), username varchar(20), status int(2));

  

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

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上进行查询的数据是,所有数据节点的全集。枚举分片是水平分库分表的一种方式。

MySQL运维9-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. 分库分表后跨分片查询与Elastic Search

    携程酒店订单Elastic Search实战:http://www.lvesu.com/blog/main/cms-610.html 为什么分库分表后不建议跨分片查询:https://www.jian ...

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

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

  7. MyCat | 分库分表实践

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

  8. mycat 分库分表

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

  9. MyCat分库分表入门

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

  10. mysql(5):主从复制和分库分表

    主从复制集群 概念:主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点. 使用场景: 读写分离:使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读 ...

随机推荐

  1. 2020 ICPC 南京站

    gym A. Ah, It's Yesterday Once More 有趣的题,但场上的人恐怕不会这么想( 构造一条长路径,且拐弯处在不同边界.这样每条竖线合并后都在一边,还需要走一遍才能合并到一起 ...

  2. FFmpeg FFmpeg

     FFmpeg About News Download Documentation Community Code of Conduct Mailing Lists IRC Forums Bug Rep ...

  3. snowboy 无法 install

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple snowboy Looking in indexes: https://pypi.tun ...

  4. Sunshine on my shoulders

    https://music.163.com/#/song?id=1477706 Sunshine on my shoulders makes me happy照在我肩上的阳光让我欢乐Sunshine ...

  5. 若依(ruoyi)开源系统保姆级实践-完成第一个页面

    一.案例描述 若依官网文档地址:http://doc.ruoyi.vip/ruoyi/document/hjbs.html 本教程主要内容,自定义数据库表,使用若依开源系统生成代码并配置权限. 若依环 ...

  6. SonarQube系列-通过配置扫描分析范围,聚焦关键问题

    在许多情况下,你可能不希望分析项目中每个源文件的各个方面.例如,项目可能包含生成的代码.库中的源代码或有意复制的代码.在这种情况下,跳过这些文件分析的部分或全部方面是有意义的,从而消除干扰并将焦点缩小 ...

  7. 使用VSCode新建解决方案,添加ClassLib类库工程

    最近准备全面转向VSCode开发C#代码,所以第一件事就是使用VSCode新建解决方案,添加工程. 通过ChatGPT找到的大致的实现方案: 首先,打开VS Code的终端,然后导航到您想要创建解决方 ...

  8. 网络层IP数据包

    网络层 功能 选择数据通过网络(IP地址)的最佳路径 协议字段 版本号(4bit):指IP协议版本.并且通信双方使用的版本必须一致,目前我们使用的是IPv4,表示为0100 十进制 是4 首部长度(4 ...

  9. 长程 Transformer 模型

    Tay 等人的 Efficient Transformers taxonomy from Efficient Transformers: a Survey 论文 本文由 Teven Le Scao.P ...

  10. 使用Python批量发送个性化邮件

    前言 在现代工作环境中,我们经常需要向多个收件人发送个性化的邮件.通过使用Python编程语言,我们可以自动化这个过程,从Excel文件中读取收件人和相关数据,并发送定制的邮件. 首先,导入所需的库: ...