Mycat【Mycat分片规则(取模、分片枚举、范围约定)】(六)-全面详解(学习总结---从入门到深化)

news/2024/11/17 18:58:12/

 

目录

Mycat分片规则_取模

Mycat分片规则_分片枚举

Mycat分片规则_范围约定


 

Mycat分片规则_取模

实现方式 

取模分片就是根据数据表的某一个字段,通常是某一个整数型的字 段,对其进行十进制的求模运算,将运算结果作为Mycat的路由结果。

 注意:

优点:这种策略可以很好的分散数据库写的压力。

缺点:出现了范围查询,就需要MyCAT去合并结果,当数据量偏高的时候,这种跨库查询 +合并结果消耗的时间有可能会增加很多,尤其是还出现了order by的时候。

tableRule 标签 

这个标签定义表规则。

<tableRule name="mod-long"><rule><columns>user_id</columns><algorithm>mod-long</algorithm></rule>
</tableRule>

参数:

name :属性指定唯一的名字,用于标识不同的表规则。 内嵌的 rule 标签则指定对物理表中 的哪一列进行拆分和使用什么路由算法。

columns :内指定要拆分的列名字。

algorithm:使用 function 标签中的 name 属性。连接表规则和具体路由算法。当然,多个 表规则可以连接到 同一个路由算法上。

function标签

定义具体路由算法

<function name="mod-long" class="io.mycat.route.function.PartitionByMod"><!-- how many data nodes --><property name="count">2</property>
</function>

注意:

name 指定算法的名字。 class 制定路由算法具体的类名字。

property 为具体算法需要用到的一些属性。

count:表示需要取模的最大值,将数据分成该配置的切片。

实时学习反馈

1.Mycat技术中取模的分片规则缺点是___。

A 分散数据库写的压力

B 分但数据库的读压力

C 范围查询 

Mycat分片规则_分片枚举

实现原理 

有些业务需要按照省份或区县来做保存,这类业务使用本条规则。

实现过程

在这里,需定义三个值,规则均是在rule.xml中定义。

tableRule

function

mapFile

创建示例表 

#订单归属区域信息表
CREATE TABLE orders_ware_info(`id` INT AUTO_INCREMENT comment '编号',`order_id` INT comment '订单编号',`address` VARCHAR(200) comment '地址',`areacode` VARCHAR(20) comment '区域编号',PRIMARY KEY(id)
);

修改schema.xml配置文件

<table name="orders_ware_info" dataNode="dn1,dn2" rule="sharding-by-intfile"></table>

定义tableRule

<tableRule name="sharding-by-intfile"><rule><columns>areacode</columns><algorithm>hash-int</algorithm></rule>
</tableRule>

注意: 其中,sharding-by-intfile-test是规则名,会在schema.xml中用到。columns指的是对省份进行分片。algorithm是算法名, 该算法必须在function中定义。

定义funtion 

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

注意:

mapFile:指的是配置文件名

type:默认值为0,0表示Integer,非零表示String。因为我接下来的测试是基于省份分片, 所以需type指定为1。

defaultNode 默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点 默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点。

修改partition-hash-int.txt配置文件 

110=0
120=1

注意: 其中,110会被分发到第一个节点中,120分发被第二个节点中。

 重启Mycat

mycat restart

插入数据

INSERT INTO orders_ware_info(id,order_id,address,areacode) VALUES (1,1,'北京','110');
INSERT INTO orders_ware_info(id,order_id,address,areacode) VALUES (2,2,'天津','120');

实时学习反馈

1.Mycat技术中分片枚举指的是___。

A 需要按照省份或区县来做保存

B 范围保存

C 时间保存

D 排序

Mycat分片规则_范围约定

实现原理 

此分片适用于,提前规划好分片字段某个范围属于哪个分片。

举个例子

比如将id在0-500W的数据分片在第一个节点上面,将id在500W-1000W的数据分片在第二个节点上,依次类推下去。

优缺点:

优点:适用于想明确知道某个分片字段的某个范围具体在哪一个节点;

缺点:如果短时间内有大量的批量插入操作,那么某个分片节点可能一下子会承受比较大的 数据库压力,而别的分片节点此时可能处于闲置状态,无法利用其它节点进行分担压力(热 点数据问题);

实现过程 

创建示例表

#支付信息表
CREATE TABLE payment_info
(`id` INT AUTO_INCREMENT comment '编号',
`order_id` INT comment '订单编号',
`payment_status` INT comment '支付状态',PRIMARY KEY(id)
);

修改schema.xml配置文件

<table name="payment_info" dataNode="dn1,dn2" rule="auto_sharding_long" ></table>

定义tableRule

<tableRule name="auto_sharding_long"><rule><columns>order_id</columns><algorithm>rang-long</algorithm></rule>
</tableRule>

注意: 其中,auto_sharding_long是规则名,会在schema.xml中用 到。columns指的是对订单id进行分片。algorithm是算法名, 该算法必须在function中定义。

定义function

<function name="rang-long"class="io.mycat.route.function.AutoPartitionByLong"><property name="mapFile">autopartition-long.txt</property><property name="defaultNode">0</property>
</function>

 注意:

mapFile:指的是配置文件名

type:默认值为0,0表示Integer,非零表示String。因为我接下来的测试是基于省份分片, 所以需type指定为1。

defaultNode 默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点 默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点。

修改autopartition-long.txt配置文件 

0-102=0
103-200=1

重启Mycat

mycat restart

插入数据

INSERT INTO payment_info(id,order_id,payment_status) VALUES(1,101,0);
INSERT INTO payment_info(id,order_id,payment_status) VALUES(2,102,1);
INSERT INTO payment_info (id,order_id,payment_status) VALUES (3,103,0);
INSERT INTO payment_info(id,order_id,payment_status) VALUES(4,104,1);

实时学习反馈

1.Mycat技术中范围分片规则缺点是___。

A 范围查询

B 分散数据库写的压力

C 需要按照省份或区县来做保存

D 热点数据问题


http://www.ppmy.cn/news/789618.html

相关文章

图像分类标注小工具--快速,简单,高效

深度学习分类算法图像数据分类小工具 文章目录 深度学习分类算法图像数据分类小工具前言一、小工具使用方法二、实现代码总结 前言 做分类算法数据标注时如果利用labelme等工具来分类图片的话效率太低&#xff0c;不好使用。于是写了个小工具对图片进行分类给标注人员使用&…

Revit快速标注 | 有求必应的【万能标注】操作步骤

俗话说得好&#xff0c;Revit构件千千万&#xff0c;一一标注十分慢。而我们BIMer不是在出图&#xff0c;就是在出图的路上。当然了&#xff0c;出图最枯燥的当属对相同构件的尺寸标注&#xff0c;比如窗本身的的尺寸&#xff0c;桌子之间的距离&#xff0c;支吊架之间的距离。…

数据标注是什么,如何进行数据标注?

尽管人工智能有着悠久的历史&#xff0c;但是直到近些年它才被大众所熟知。任何一个行业都有可能从人工智能中受益&#xff0c;它能够实现业务流程和预测分析自动化&#xff0c;这对于现代企业的生产至关重要。 然而&#xff0c;即使人工智能和机器学习被企业广泛应用&#xff…

数据标注是什么,如何高效完成数据标注?

尽管人工智能有着悠久的历史&#xff0c;但是直到近些年它才被大众所熟知。任何一个行业都有可能从人工智能中受益&#xff0c;它能够实现业务流程和预测分析自动化&#xff0c;这对于现代企业的生产至关重要。 然而&#xff0c;即使人工智能和机器学习被企业广泛应用&#xf…

CAD标注快捷键有哪些?CAD标注快捷键命令大全

CAD设计过程中&#xff0c;为了能更清楚地表达出图纸中的图形尺寸、角度、用料等细节&#xff0c;一般会将其标注在图纸中。那么你知道CAD标注快捷键命令有哪些吗&#xff1f;下面&#xff0c;小编给大家整理了浩辰CAD软件中CAD标注快捷键命令大全&#xff0c;有需要的小伙伴抓…

AUTOCAD——快速标注命令

从选定对象中快速创建出一系列标注。 执行方式 命令行&#xff1a;QDIM 菜单栏&#xff1a;标注→快速标注 工具栏&#xff1a;快速标注图标 “快速标注操作命令位置”界面 执行以上命令后&#xff0c;命令行会显示以下信息&#xff1a; 选项说明 &#xff08;1&#xff0…

cad尺寸标注快捷键_CAD快速标注方法你知道几种?

CAD标注是快速出图的关键!尺寸标错,都会导致加工产品出错!那么如何快速准确地进行标注呢?这里给大家整理了CAD标注的一些方法,你知道几种呢? 一、CAD自带一键标注方法 1、CAD一次性标注(qdim) 输入快捷键qdim,框选需要标注的对象,空格即可标注完成! 2、CAD连续标注(dco…

cn.hutool.poi.excel.ExcelWriter 基础操作

创建ExcelWriter String fileName "F:\\4366.xlsx"; ExcelWriter writer ExcelUtil.getWriter(fileName); 表格合并操作 private static void merger(ExcelWriter writer) {//合并 选择范围至少要两个cell要不会报错//合并的开始列 &#xff0c;最后一列int star…