MyCat - 分片 - 分片规则 - 取模范围算法 | 学习笔记

简介: 快速学习 MyCat - 分片 - 分片规则 - 取模范围算法

开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 分片 - 分片规则 - 取模范围算法】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/756/detail/13270


MyCat - 分片 - 分片规则 - 取模范围算法

内容介绍:

一、取模范围算法

二、测试

 

一、取模范围算法

1.简介

取模范围算法是先进行取模,然后根据取模值所属范围进行分片

2.优点

可以自主决定取模后数据的节点分布,意味着可以手动的去指定基准的数值是多少

3.缺点

data node 划分节点是事先建好的,需要扩展时比较麻烦,也会存在之前提到的数据迁移问题

4.配置

< tableRule name =" sharding - by - pattern " s

< ule >

< columns > id </ columns >

< algorithm > sharding - by - pattern </ algorithn >

</ rule >

</ tableRule >

< function name =' sharding - by - pattern ' class =" io . mycat . route . function . PartitionByPattern ">

sproperty name ="mapFi1e"> partit ion - pattern . txt </ property >

< pr operty name =" defaultNode ">0</ pr operty >

< property name =" patternValue ">96</ property

</ function >

配置一个 tableRule 规则取模范围算法,算法是 sharding - by - pattern,function 是分片的处理类叫做 PartitionByPattern,里面有一个映射文件 partit ion - pattern . txt,defaultNode 默认节点,patternValue 就是刚才说的求模的基数,96 是对应的插入值要除以 96,要模于 96,

而对于 partit ion - pattern . txt 当中的配置如下,

0-32=0

33-64=1

65-96=2

代表的意思是插入的值模于 96 算出来的值如果在 0~32 之间存储在第一个节点上,如果在 33~64 之间存储在第二个节点上,如果在 65~96 之间存储在第三个节点上,插入的 ID 模于 96 算出来的值肯定介于 0~96 之间,如果在 0~32 之间是在第一个节点,33~64 之间,在第二个节点,65~96 在第三个节点。这是取模范围算法含义以及配置

 

二、测试

以一个案例的形式被大家进行演示,首先要配置一个逻辑表,在 schema 中进行配置,逻辑表的表名叫做 tb _mod _range,sharding - by - pattern 配置一个分片

<table name =' tb _mod _range " dataNode ='dn1,cn2,dn3" rule =" sharding - by - pattern "/>

接下来需要在 ruler.xml 中配置 sharding - by - pattern ,里面没有需要自己进行配置

< tableRule name =" sharding - by - pattern ">

< rule

< columns > id </ columng >

< algorithm > sharding - by - pattern </ algorithm >

</ rule ></ tableRule >

这里面所使用的算法叫做 sharding - by - pattern ,这里面也没有也需要自己进行配置

< function name =' sharding - by - pattern ' class =" io . mycat . route . function . PartitionByPattern ">

sproperty name ="mapFi1e"> partition - pattern . txt </ property >

< property name =" defaultNode ">0</ pr operty >

< property name =" patternValue ">96</ property

</ function >

里面还有一段配置文件叫做 partition - pattern . txt,这份配置文件也没有,需要增加这样一份配置文件,这份配置文件名就叫 partition - pattern . txt,这份文件配置好之后,需要在这份配置文件当中进行配置,配置内容如下

0-32=0

33-64=1

65-96=2

关于分片规则的配置就已经配置好了,第一步是生成一个逻辑表,然后指定分片规则,这个分片规则需要在 ruler.xml 中进行声明,然后指定分片算法 sharding - by - pattern,下面需要指定 sharding - by - pattern 的处理类,这块的配置已经完成,接下来重启 my cat,执行重新操作,重启后再连接 mycat,连接上以后 show databases   接下来执行操作 use PARTITION_DB 再 show databases 这样就能查看到当前数据库所有的表,接下来需要创建这个表对应的表结构

CREATE TABLE tb _ mod _ range (

id int (11) NOT NULL coMMENT ' ID ',

namp varchar (200) DEFAULT NULL coMMENT '名称’

PRIMARY KEY ( id )

) ENGINE = InnoDB DEFAULT CHARSET =utf8mb4;

是一个无效的创建值,找一下原因是名城后面缺少一个逗号,在后面加上一个逗号,再来拷贝,继续执行

CREATE TABLE tb _ mod _ range (

id int (11) NOT NULL coMMENT ' ID ',

namp varchar (200) DEFAULT NULL coMMENT '名称’,

PRIMARY KEY ( id )

) ENGINE = InnoDB DEFAULT CHARSET =utf8mb4;

表结构现在已经创建好了,接下来看一下这个表结构 show tables;

image.png

在这里可以看到,现在需要在这个表 mycat 中向表中插入数据,插入以下数据:

insert into tb _ br and ( id , name ) values (1,'Test1'); insert into tb _ br and ( id , name ) values (2,'Test2');

insert into tb _ br and ( id , name ) values (3,"Test3);

ins ert into tb _ br and ( id , name ) values (4,'Test4');

insert into tb _ br and ( id , name ) values (5,'Test5');

插入了 ID 为 12345 这五条数据,

接下来执行select*from tb_mod_range 会发现是空的,因为刚才插入的数据插入到了 brand 的当中,想要插入的是 mod range,所以在这里需要增改一下表名,将 brand 更改为 mod

insert into tb _ mod _ range ( id , name ) values (1,'Test1');

insert into tb _ mod _ range ( id , name ) values (2,'Test2');

insert into tb _ mod_range ( id , name ) values (3,'Test3');

insert into tb _ mod_range ( id , name ) values (4,'Test4');

insert into tb _ mod _ range ( id , name ) values (5,'Test5');

更改完成以后再进行插入,执行,这次插入了五条数据之后再来进行查询select*from tb_mod_range

image.png

这五条数据已经查询出来了,我们想知道这五条数据到底落在哪个节点当中,按照刚才的分片规则配置 sharding - by - pattern,而且叫做取模范围算法,在这里任何 ID 会模于 96,模于 96 以后再根据配置文件配置范围进行计算,如果模于 96 之后在 0~32 之间就在第一个节点,33~64 之间,在第二个节点,65~96 之间,处于第三个节点,12345 模于 96 出来的值就是 123456,应该在第一个节点,执行select*from tb_mod_range

image.png

可以看到 12345 有在第一个节点,select*from tb_mod_range 第二个节点没有,同样 select*from tb_mod_range 第三个节点当中也是没有的,这是插入 ID 小于 5的,接下来进行一个测试,接下来插入一个 34 的,再插入一个 35 的,再插入一个 36 的

insert into tb _ mod _ range ( id , name ) values (34,'Test34');

insert into tb _ mod _ range ( id , name ) values (35,'Test35');

insert into tb _ mod_range ( id , name ) values (36,'Test36');

插入完以后执行查询

image.png

可以看到三条数据已经插入,第一个节点现在没有,存储在第二个节点中,因为根据刚才的规则 33~64 都是在第二个节点,要想使数据存在第三个节点中必须在 ID处作修改,如果 ID 模于 96 是大于 65 的这时就会存储在第三个节点当中比如 66,67,这些都是大于 65 的,都会存储在第三个节点中

insert into tb _ mod_range ( id , name ) values (66,'Test66');

insert into tb _ mod_range ( id , name ) values (67,'Test67');

这就是取模范围算法

相关文章
|
29天前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩分享分库分表的基因算法设计,涵盖分片键选择、水平拆分策略及基因法优化查询效率等内容,助力面试者应对大厂技术面试,提高架构设计能力。
美团面试:百亿级分片,如何设计基因算法?
|
14天前
|
存储 编解码 负载均衡
数据分片算法
【10月更文挑战第25天】不同的数据分片算法适用于不同的应用场景和数据特点,在实际应用中,需要根据具体的业务需求、数据分布情况、系统性能要求等因素综合考虑,选择合适的数据分片算法,以实现数据的高效存储、查询和处理。
|
14天前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
|
29天前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩在读者群中分享了关于分库分表的基因算法设计,旨在帮助大家应对一线互联网企业的面试题。文章详细介绍了分库分表的背景、分片键的设计目标和建议,以及基因法的具体应用和优缺点。通过系统化的梳理,帮助读者提升架构、设计和开发水平,顺利通过面试。
美团面试:百亿级分片,如何设计基因算法?
|
2月前
|
算法 前端开发 机器人
一文了解分而治之和动态规则算法在前端中的应用
该文章详细介绍了分而治之策略和动态规划算法在前端开发中的应用,并通过具体的例子和LeetCode题目解析来说明这两种算法的特点及使用场景。
一文了解分而治之和动态规则算法在前端中的应用
|
3月前
|
数据可视化 算法 前端开发
基于python flask+pyecharts实现的中药数据可视化大屏,实现基于Apriori算法的药品功效关系的关联规则
本文介绍了一个基于Python Flask和Pyecharts实现的中药数据可视化大屏,该系统应用Apriori算法挖掘中药药材与功效之间的关联规则,为中医药学研究提供了数据支持和可视化分析工具。
127 2
|
4月前
|
数据采集 机器学习/深度学习 算法
Python基于Apriori关联规则算法实现商品零售购物篮分析
Python基于Apriori关联规则算法实现商品零售购物篮分析
257 0
|
5月前
|
机器学习/深度学习 算法 BI
机器学习笔记(一) 感知机算法 之 原理篇
机器学习笔记(一) 感知机算法 之 原理篇
|
5月前
|
存储 NoSQL 算法
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
|
5月前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】Apriori算法在关联规则学习中的应用
【机器学习】Apriori算法在关联规则学习中的应用
94 0