MySQL运维篇之Mycat分片规则

2023-11-06

3.5.3、Mycat分片规则
3.5.3.1、范围分片

根据指定的字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。

在这里插入图片描述

示例:

在这里插入图片描述

可以通过修改autopartition-long.txt自定义分片范围。

注意:

范围分片针对于数字类型的字段,不适用于字符串类型的字段。

3.5.3.2、取模分片

根据指定的字段值与节点数量进行求模运算,根据运算结果,来决定该数据属于哪一个分片。

在这里插入图片描述

示例:

在这里插入图片描述

注意:

取模分片针对于数字类型的字段,不适用于字符串类型的字段。

3.5.3.3、一致性hash

所谓一致性hash,相同的hash因子计算值总是被划分到相同的分区表中,不会因为分区节点的增加而改变原来数据的分区位置

示例:将tb_order表内的数据根据字段id进行一致性hash分片

在这里插入图片描述

create table tb_order(
    id  varchar(100) not null primary key,
    money   int null,
    content varchar(200) null
);

INSERT INTO tb_order (id, money, content) VALUES ('b92fdaaf-6fc4-11ec-b831-482ae33c4a2d', 10, 'b92fdaf8-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b93482b6-6fc4-11ec-b831-482ae33c4a2d', 20, 'b93482d5-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b937e246-6fc4-11ec-b831-482ae33c4a2d', 50, 'b937e25d-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b93be2dd-6fc4-11ec-b831-482ae33c4a2d', 100, 'b93be2f9-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b93f2d68-6fc4-11ec-b831-482ae33c4a2d', 130, 'b93f2d7d-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b9451b98-6fc4-11ec-b831-482ae33c4a2d', 30, 'b9451bcc-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b9488ec1-6fc4-11ec-b831-482ae33c4a2d', 560, 'b9488edb-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b94be6e6-6fc4-11ec-b831-482ae33c4a2d', 10, 'b94be6ff-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b94ee10d-6fc4-11ec-b831-482ae33c4a2d', 123, 'b94ee12c-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b952492a-6fc4-11ec-b831-482ae33c4a2d', 145, 'b9524945-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b95553ac-6fc4-11ec-b831-482ae33c4a2d', 543, 'b95553c8-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b9581cdd-6fc4-11ec-b831-482ae33c4a2d', 17, 'b9581cfa-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b95afc0f-6fc4-11ec-b831-482ae33c4a2d', 18, 'b95afc2a-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b95daa99-6fc4-11ec-b831-482ae33c4a2d', 134, 'b95daab2-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b9667e3c-6fc4-11ec-b831-482ae33c4a2d', 156, 'b9667e60-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b96ab489-6fc4-11ec-b831-482ae33c4a2d', 175, 'b96ab4a5-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b96e2942-6fc4-11ec-b831-482ae33c4a2d', 180, 'b96e295b-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b97092ec-6fc4-11ec-b831-482ae33c4a2d', 123, 'b9709306-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b973727a-6fc4-11ec-b831-482ae33c4a2d', 230, 'b9737293-6fc4-11ec-b831-482ae33c4a2d');
INSERT INTO tb_order (id, money, content) VALUES ('b978840f-6fc4-11ec-b831-482ae33c4a2d', 560, 'b978843c-6fc4-11ec-b831-482ae33c4a2d');

在这里插入图片描述

3.5.3.4、枚举分片

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

在这里插入图片描述

示例:将tb_user表内的数据根据字段status进行枚举分片

在这里插入图片描述

rule.xml中可以将name="sharding-by-intfile"的tableRule复制一份,进行重写,使其name=“sharding-by-intfile-enumstatus”,专门用于status字段。

CREATE TABLE tb_user (
  id bigint(20) NOT NULL COMMENT 'ID',
  username varchar(200) DEFAULT NULL COMMENT '姓名',
  status int(2) DEFAULT '1' COMMENT '1: 未启用, 2: 已启用, 3: 已关闭',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


insert into tb_user (id,username ,status) values(1,'Tom',1);
insert into tb_user (id,username ,status) values(2,'Cat',2);
insert into tb_user (id,username ,status) values(3,'Rose',3);
insert into tb_user (id,username ,status) values(4,'Coco',2);
insert into tb_user (id,username ,status) values(5,'Lily',1);
insert into tb_user (id,username ,status) values(6,'Tom',1);
insert into tb_user (id,username ,status) values(7,'Cat',2);
insert into tb_user (id,username ,status) values(8,'Rose',3);
insert into tb_user (id,username ,status) values(9,'Coco',2);
insert into tb_user (id,username ,status) values(10,'Lily',1);

在这里插入图片描述

此时插入一个数据,其status为4,此时会报错:

在这里插入图片描述

解决方案:给予找不到数据节点的数据一个默认节点

<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
 <property name="defaultNode">2</property>
 <property name="mapFile">partition-hash-int.txt</property>
</function>

结果:

在这里插入图片描述

3.5.3.5、应用指定算法

运行阶段由应用自主决定路由到哪个分片,直接根据字符子串(必须是数字)计算分片号。

在这里插入图片描述

示例:

在这里插入图片描述

CREATE TABLE tb_app (
  id varchar(10) NOT NULL COMMENT 'ID',
  name varchar(200) DEFAULT NULL COMMENT '名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert into tb_app (id,name) values('0000001','Testx00001');
insert into tb_app (id,name) values('0100001','Test100001');
insert into tb_app (id,name) values('0100002','Test200001');
insert into tb_app (id,name) values('0200001','Test300001');
insert into tb_app (id,name) values('0200002','TesT400001');

在这里插入图片描述

3.5.3.6、固定分片hash算法

该算法类似于十进制的求模运算,但是为二进制的操作,例如,取id的二进制低10位与1111111111进行位&运算。

位&运算:同为1则为1,有一个0则为0

在这里插入图片描述

特点:

  • 如果是求模,连续的值,分别分配到各个不同的分片;但是此算法会将连续的值可能分配到相同的分片,降低事务处理的难度。
  • 可以均匀分配,也可以非均匀分配。
  • 分片字段必须为数字类型。

示例:

在这里插入图片描述

注意:

分片长度加起来必须等于1024。

CREATE TABLE tb_longhash (
  id int(11) NOT NULL COMMENT 'ID',
  name varchar(200) DEFAULT NULL COMMENT '名称',
  firstChar char(1)  COMMENT '首字母',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert into tb_longhash (id,name,firstChar) values(1,'七匹狼','Q');
insert into tb_longhash (id,name,firstChar) values(2,'八匹狼','B');
insert into tb_longhash (id,name,firstChar) values(3,'九匹狼','J');
insert into tb_longhash (id,name,firstChar) values(4,'十匹狼','S');
insert into tb_longhash (id,name,firstChar) values(5,'六匹狼','L');
insert into tb_longhash (id,name,firstChar) values(6,'五匹狼','W');
insert into tb_longhash (id,name,firstChar) values(7,'四匹狼','S');
insert into tb_longhash (id,name,firstChar) values(8,'三匹狼','S');
insert into tb_longhash (id,name,firstChar) values(9,'两匹狼','L');
3.5.3.7、字符串hash解析算法

截取字符串中的指定位置的子字符串,进行hash算法,算出分片。

在这里插入图片描述

示例:

在这里插入图片描述

create table tb_strhash(
	name varchar(20) primary key,
	content varchar(100)
)engine=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO tb_strhash (name,content) VALUES('T1001', UUID());
INSERT INTO tb_strhash (name,content) VALUES('ROSE', UUID());
INSERT INTO tb_strhash (name,content) VALUES('JERRY', UUID());
INSERT INTO tb_strhash (name,content) VALUES('CRISTINA', UUID());
INSERT INTO tb_strhash (name,content) VALUES('TOMCAT', UUID());

在这里插入图片描述

3.5.3.8、按(天)日期分片

在这里插入图片描述

示例:

在这里插入图片描述

create table tb_datepart(
    id   bigint  not null comment 'ID'  primary key,
    name varchar(100) null comment '姓名',
    create_time date  null
);

insert into tb_datepart(id,name ,create_time) values(1,'Tom','2022-01-01');
insert into tb_datepart(id,name ,create_time) values(2,'Cat','2022-01-10');
insert into tb_datepart(id,name ,create_time) values(3,'Rose','2022-01-11');
insert into tb_datepart(id,name ,create_time) values(4,'Coco','2022-01-20');
insert into tb_datepart(id,name ,create_time) values(5,'Rose2','2022-01-21');
insert into tb_datepart(id,name ,create_time) values(6,'Coco2','2022-01-30');
insert into tb_datepart(id,name ,create_time) values(7,'Coco3','2022-01-31');

在这里插入图片描述

3.5.3.9、按自然月分片

使用场景为按照月份来分片,每个自然月为一个分片。

在这里插入图片描述

示例:

在这里插入图片描述

create table tb_monthpart(
    id   bigint  not null comment 'ID'  primary key,
    name varchar(100) null comment '姓名',
    create_time date  null
);

insert into tb_monthpart(id,name ,create_time) values(1,'Tom','2022-01-01');
insert into tb_monthpart(id,name ,create_time) values(2,'Cat','2022-01-10');
insert into tb_monthpart(id,name ,create_time) values(3,'Rose','2022-01-31');
insert into tb_monthpart(id,name ,create_time) values(4,'Coco','2022-02-20');
insert into tb_monthpart(id,name ,create_time) values(5,'Rose2','2022-02-25');
insert into tb_monthpart(id,name ,create_time) values(6,'Coco2','2022-03-10');
insert into tb_monthpart(id,name ,create_time) values(7,'Coco3','2022-03-31');
insert into tb_monthpart(id,name ,create_time) values(8,'Coco4','2022-04-10');
insert into tb_monthpart(id,name ,create_time) values(9,'Coco5','2022-04-30');

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL运维篇之Mycat分片规则 的相关文章

随机推荐

  • 在unicode环境下将CString类型转换成char

    原帖地址 http hi baidu com sqhily2008 blog item e38834fcaf105d0d09244d83 html 在Visual C NET2005中 默认的字符集形式是Unicode 但在VC6 0等工程
  • 自己动手绕线圈电感详细计算公式

    加载其电感量按下式计算 线圈公式 阻抗 ohm 23 14159F 工作频率 电感量 mH 设定需用360ohm阻抗 因此 电感量 mH 阻抗 ohm 23 14159 F 工作频率 360 23 14159 7 06 8 116mH 据此
  • element-table中当点击row的时候背景色发生

    效果图 当点击行的时候 则背景添加颜色 再次点击则颜色去掉 1 在el table标签中添加 row click和row style事件 row click tableClick row style isActive tableClick
  • Pyinstaller PyQt5 QFontDatabase: Cannot find font directory

    在解决了上一篇的 no module named pyqt5 sip问题以后 这是打包以后的第二个问题 在ubuntu 执行源码的时候字体可以正常显示 python3 main py 但是通过pyinstaller打包以后就找不到字体了 大
  • 根据数字二进制下1的数目排序

    LeetCode 根据数字二进制下1的数目排序 给你一个整数数组 arr 请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序 如果存在多个数字二进制中 1 的数目相同 则必须将它们按照数值大小升序排列 请你返回排序后的数组 示例
  • 【Vivado使用误区与进阶】XDC约束技巧——时钟篇

    Xilinx 的新一代设计套件Vivado中引入了全新的约束文件XDC 在很多规则和技巧上都跟上一代产品ISE中支持的UCF大不相同 给使用者带来许多额外挑战 Xilinx工具专家告诉你 其实用好XDC很容易 只需掌握几点核心技巧 并且时刻
  • 第二十二讲:神州路由器OSPF单区域路由的配置

    实验拓扑图如下所示 设备 端口 IP 子网掩码 网关 Router A F0 0 172 16 1 1 255 255 255 0 无 F0 3 172 16 0 1 255 255 255 0 无 Router B F0 0 172 16
  • 【MySQL笔记】MySQL数据库分库分表解读

    目录 一 为什么要分库分表 1 IO瓶颈 2 CPU瓶颈 二 分库分表的拆分方法 1 垂直拆分 1 1 数据库垂直拆分 1 2表垂直拆分 根据业务去拆分表 如把user表拆分成user base表和user info表 use base负责
  • Android adb 输出指定app 错误日志

    查看错误日志 adb logcat E 按照时间查看日志 adb logcat v time
  • VMware16安装Linux CentOS7完整教程(附国内镜像链接)

    一 准备工作 1 安装VMware Workstation Pro 16 1 百度网盘下载地址 链接 https pan baidu com s 1jv0kQ26TLMt9MzofImRzgA pwd s0m1 提取码 s0m1 2 VMw
  • SLAM方法汇总

    原文 http blog csdn net smartxxyx article details 53068855 目录 SLAM概述 SLAM一般处理流程包括track和map两部分 所谓的track是用来估计相机的位姿 也叫front e
  • 在Windows远程桌面的不同会话之间,如何实现程序的互斥?

    问题 1 场景一 我是使用CreateMutex来实现限制只能运行程序的一个实例的 由于程序是放在服务器上运行 所以维护人员经常使用Windows的远程登录功能维护服务器 我发现在远程桌面不同会话之间 CreateMutex是不起作用的 即
  • Parallels desktop 安装 Centos7 root 默认密码

    parallels desktop下载的centos7 默认用户名是parallels 密码是需要设置的 软件没有自动设置 密码必须大于8位 并且无法进行su命令 提示 Authentication failure 这个问题产生的原因是由于
  • Xcode登录apple id 提示 This action could not be completed

    问题描述 打开xcode 运行工程时 xcode提示输入公司开发者账号密码 惊讶 之前没出现过的 按照要求输入密码 但又提示账号过期或密码可能被修改 但是网上登录苹果开发者 密码又是正常的 百度了下 把xcode偏好设置里面的过期账号 所有
  • 动态规划之二维数组系列——01背包,不同的子序列

    01背包问题 题目描述 小明有一个容量为 V 的背包 这天他去商场购物 商场一共有 N 件物品 第 i 件物品的体积为 wi 价值为 vi 小明想知道在购买的物品总体积不超过 V 的情况下所能获得的最大价值为多少 解题思路 现假设 V 为
  • 【深入理解C++】隐式构造与explicit

    文章目录 1 隐式构造 1 1 情况一 1 2 情况二 1 3 情况三 2 explicit 1 隐式构造 C 中存在隐式构造的现象 即在某些情况下 会隐式调用单参数的构造函数 1 1 情况一 include
  • Latex语法学习02:文本悬挂缩进

    目录 1 简单文本缩进案例 2 算法表格中的缩进案例 3 完整代码 1 简单文本缩进案例 解决方案 将要缩进的文本定义在minipage环境下 勾股定理 begin minipage t linewidth 直角三角形的直角边的平方求和等于
  • C# WinForm控件美化扩展系列之ListView(2)

    前面的一篇文章C WinForm控件美化扩展系列之ListView实现了隔行不同颜色和对列表头进行了美化 但遗憾的是对列表的最后的不包含列头的部分没有进行重绘 主要原因是上次没时间处理 因为处理那一部分是比较困难的 需要花不少时间 今天总算
  • Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)

    朴素贝叶斯是机器学习中比较常用的一种模型 尤其在文本分类的问题上是比较常用的baseline 朴素贝叶斯本身训练速度快 具有可并行化程度高 可解释性好的优点 但由于其对特征之间的独立性假设不是很符合某些需求场景 因此在实际的使用过程中往往需
  • MySQL运维篇之Mycat分片规则

    3 5 3 Mycat分片规则 3 5 3 1 范围分片 根据指定的字段及其配置的范围与数据节点的对应情况 来决定该数据属于哪一个分片 示例 可以通过修改autopartition long txt自定义分片范围 注意 范围分片针对于数字类