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');

这就是取模范围算法

相关文章
|
3天前
|
机器学习/深度学习 算法
应用规则学习算法识别有毒的蘑菇
应用规则学习算法识别有毒的蘑菇
|
3天前
|
数据采集 机器学习/深度学习 算法
数据分享|WEKA关联规则挖掘Apriori算法在学生就业数据中的应用
数据分享|WEKA关联规则挖掘Apriori算法在学生就业数据中的应用
|
3天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。
|
3天前
|
数据可视化 算法
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(下)
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(下)
|
3天前
|
算法 数据可视化 网络可视化
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(上)
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(上)
|
3天前
|
数据采集 存储 算法
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
|
3天前
|
数据采集 算法 安全
数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据
数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据
|
3天前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
|
3天前
|
算法 数据可视化 搜索推荐
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
|
3天前
|
算法 数据可视化 数据挖掘
【视频】关联规则模型、Apriori算法及R语言挖掘商店交易数据与交互可视化|数据分享
【视频】关联规则模型、Apriori算法及R语言挖掘商店交易数据与交互可视化|数据分享