MyCat - 分片 - 分片规则 - 枚举分片 | 学习笔记

简介: 快速学习 MyCat - 分片 - 分片规则 - 枚举分片

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

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


MyCat - 分片 - 分片规则 - 枚举分片

内容介绍:

一、概念

二、演示

 

一、概念

枚举分片,指的是可以通过配置文件当中配置可能枚举的值。这个可能枚举的值指的是某一个字段可能枚举的值,指定数据分布到不同的数据节点上。枚举分片比较常用或者典型的应用场景是按照一些状态:性别、省份这些方面进行业务拆分。拆分的业务就可以使用枚举。

枚举分片规则的配置如下:

<tableRule name=“sharding-by-intfile”>

<rule>

<columns>status</columns>

<algorithm>hash-int</ algorithm>

</rule>

</tableRule>

枚举分片默认的名称做 sharding-by-intfile, 可以指定按照哪个字段进行枚举分片,也可以自己定义。比如按照状态是 status,然后分片算法叫 hash-int。class是枚举分片的处理的类。

<function name=”hash-int”class=”io.mycat.route.function. PartitionByFileMap”>

<property name =”mapFile‘’>partition-hash-int.txt</property>

<property name =”type‘’>0</property>

<property name =”defaultNode‘’>0</property>

</function>

以上配置了三个属性。第一个映射的文件 mapFile。在 mapFile 对应的文件当中,它所需要配置的是枚举值与分片节点的一个对应关系。type 表示的是该字段的类型。接下来还有一个是否有默认的 defaultNode 节点。

partition-hash-int.txt 内容如下:

1=0

2=1

3=2

partition-hash-int.txt 映射文件当中配置的格式是一个 key 和 value。注意 key 的123 可能就是上面 status 的枚举值。对应的节点相当于是 0、1、2,分别对应了三个节点。即如果 status 值为 1,会坐落在第一个节点上。如果 status 值为 2,将坐落在第二个节点。如果 status 值为 3,将坐落在第三个节点。

 

二、演示

首先需要定义逻辑表,拷贝<table name=”tb_log”dataNode=”dn1,dn2,dn3” rule=”auto-sharding-long”/>

<tablename=”tb_user”dataNode=”dn1,dn2,dn3” rule=”auto-sharding-long”/>

接着关注分片规则 rule.xml 。可以直接把下面的分片规则放置在 rule 中。

<tableRule name=“sharding-by-intfile”>

<rule>

<columns>status</columns>

<algorithm>hash-int</ algorithm>

</tableRule>

当然更改 sharrding_id 也可以,但是假如在业务系统当中有另一张表,它的分片规则想要按照枚举分片的规则进行,但是分片的字段名不一样。所以同一个分片规则是可以定义多个的。

再次定义 TableRule, 重新命名为 “sharding-by-enum-status”,修改为<columns>status</columns>

<algorithm>hash-int</ algorithm>

hash-int 所关联的就是分片函数 hash-int:

<function name=”hash-int”

class=”io.mycat.route.function. PartitionByFileMap”>

<property name =”mapFile‘’>partition-hash-int.txt</property

当然 function 也允许定义多个。

分片规则已经定义出来,接下来需要在 scheme.xml 中的逻辑表来引用分片规则,然后还需要去修改 partition-hash-int.txt 文件。

举例如下:用户表里面有 id、username、status。status 的取值只可能为三个值:1 是未启用,2 代表已启用,3 代表已关闭。即 status 的取值为 123,那么它的枚举也是三个:1=0、2=1、3=2。当 status 值是 1 时,它坐落在第一个节点上;status 值为 2 的时候,它坐落在第二个节点上;status 值为 3 时,将会坐落在第三个节点上。后面从 0 开始的数,是分片节点的索引值。

以上操作下已经配置完毕。那么一旦文件变化,就需要重启 mycat。mycat 启动完成之后,重新输入密码 123456,接下来在 mysql 后分别输入 show databases 和 PARTITION_DB 切换数据库。发现里面有两张逻辑表,一个是 tb_log,一个是tb_user。tb_user 的表结构还没有定义,接下来需要创建有 tb_user 的表结构。执行以下代码:

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

user 的表结构已经创建出来,接下来再往 user 中插入数据。注意 status 的取值在123 之间。

再插入以下代码:

insert into tb_log(id,operateuser,operation)values(1,‘Tom’,1);insert into tb_log(id,operateuser,operation)values(2,‘Cat’,2);insert into tb_log(id,operateuser,operation)values(3,‘Rose’,3);insert into tb_log(id,operateuser,operation)values(4,‘Coco’,2);insert into tb_log(id,operateuser,operation)values(5,‘Lily’,1);

再次浏览可以看到 1、2、3、4、5 节点的数据已经插入。接着关注 1、2、3、4、5 数据到坐落在哪一个节点,是否是 status 为 1,就在第一个节点上呢,如果status为2,就在第二个节点上的结果。

在 mysql 后输入 select*from tb_user,可以看到 status 为 1。接下来再到第二个节点当中看 status 为 2,到第三个节点中来看 status 为 3,

是按照指定的规则 status 的枚举值进行分片。

那么假如进行数据插入时,插入了一个值 4,4 没有在配置文件当中配置,会出现报错的现象,不能找到有效的一个数据节点。

image.png

如果不想出现报错的情况,可以配置  defaultNode,

<property name=”defaultNode”>0</property>

它是默认的节点,配置 defaultNode 属性就可以避免报错的发生。

相关文章
|
存储 SQL 缓存
27MyCat - 分片规则
27MyCat - 分片规则
43 0
28MyCat - 分片规则(分片枚举)
28MyCat - 分片规则(分片枚举)
34 0
38MyCat - 分片规则(自然月分片)
38MyCat - 分片规则(自然月分片)
56 0
31MyCat - 分片规则(按日期分片)
31MyCat - 分片规则(按日期分片)
48 0
36MyCat - 分片规则(一致性hash)
36MyCat - 分片规则(一致性hash)
55 0
34MyCat - 分片规则(应用指定)
34MyCat - 分片规则(应用指定)
59 0
|
算法
29MyCat - 分片规则(固定分片hash算法)
29MyCat - 分片规则(固定分片hash算法)
51 0
35MyCat - 分片规则(字符串hash解析)
35MyCat - 分片规则(字符串hash解析)
81 0
|
存储 算法 关系型数据库
MyCat - 分片 - 分片规则 - 范围分片 | 学习笔记
快速学习 MyCat - 分片 - 分片规则 - 范围分片
MyCat - 分片 - 分片规则 - 范围分片 | 学习笔记
|
存储 算法 中间件
MyCat - 分片 - 分片规则 - 应用指定算法 | 学习笔记
快速学习 MyCat - 分片 - 分片规则 - 应用指定算法
MyCat - 分片 - 分片规则 - 应用指定算法 | 学习笔记