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

news2024/12/28 23:13:41

 

目录

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.coloradmin.cn/o/733899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Element-案例-脚本页面布局

案例需求&#xff1a; 根据页面原型完成员工管理页面开发&#xff0c;并通过Axios完成数据异步加载 步骤 创建页面&#xff0c;完成页面的总体布局规划布局中各个组件的实现列表数据的异步加载&#xff0c;并渲染展示 1.创建页面&#xff0c;完成页面的总体布局规划 分析案…

代码随想录算法训练营第十三天 | 二叉树系列4

二叉树系列4 617 合并二叉树重点代码随想录的代码我的代码(晚上理解后自己编写) 700 二叉搜索树中的搜索未看解答自己编写看了解答后&#xff0c;精简了两个判断的写法重点代码随想录的代码我的代码(晚上理解后自己编写) 98 验证二叉搜索树重点看到二叉搜索树&#xff0c;就要想…

rust 自动化测试、迭代器与闭包、智能指针、无畏并发

编写测试可以让我们的代码在后续迭代过程中不出现功能性缺陷问题&#xff1b;理解迭代器、闭包的函数式编程特性&#xff1b;Box<T>智能指针在堆上存储数据&#xff0c;Rc<T>智能指针开启多所有权模式等&#xff1b;理解并发&#xff0c;如何安全的使用线程&#x…

静态路由实验

目录 第一步&#xff1a; 第二步&#xff1a; 端口IP配置方法 环回接口IP配置方法 第三步&#xff1a; 第四步&#xff1a; 第一步&#xff1a; 先进行子网划分 192.168.1.0 24 子网划分 需要13个广播域 5个网段——子网划分 192.168.1.0 24 192.168.1.000 00000 27 192.…

数据结构一:绪论

一、绪论 数据结构是计算机科学中的一门基础课程&#xff0c;研究数据的存储、组织和管理方法&#xff0c;以及在这些数据上进行各种操作的算法和技术。掌握数据结构和算法是编程中非常重要的基础&#xff0c;对于实现高效、可靠的程序至关重要。常见的数据结构包括数组、链表、…

雅思口语考试时长多少分钟?

雅思口语考试是单独考的&#xff0c;对于第一次考雅思的同学来说&#xff0c;了解雅思考试的时长才能更好的备考雅思&#xff0c;那么雅思口语考试时长多久呢&#xff1f; 一、雅思口语考试时长 雅思口语考试时长一般为11-14分钟 第一段约4-5分钟&#xff0c;会面问候一番&am…

java项目之高校信息资源共享平台(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的高校信息资源共享平台。技术交流和部署相关看文末&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&…

DynaSLAM 2018论文翻译

Dynaslam:动态场景下的跟踪、建图和图像修复 摘要-场景刚性假设是SLAM算法的典型特征。这种强假设限制了大多数视觉SLAM系统在人口稠密的现实环境中的使用&#xff0c;而这些环境是服务机器人或自动驾驶汽车等几个相关应用的目标。 在本文中&#xff0c;我们提出了一个基于ORB…

学习react,复制了一个C站Civitai

苦肝两个多月&#xff0c;终于复制了一个C站&#xff0c;也就是现在最热门的AI绘画社区Civitai。 来看看效果图吧&#xff01; 技术栈介绍 我还是一个菜鸡&#xff0c;所以不像c站那样用了各种技术。 目前只是为了展示数据&#xff0c;我的Civitai简单技术栈如下 前端&…

Java17:IO流

一&#xff1a;File类&#xff1a; 1.File类的理解&#xff1a; 1.File类的一个对象&#xff0c;代表一个文件或一个文件目录&#xff08;俗称&#xff1a;文件夹&#xff09; 2.File类声明在java.io包下 3.File类中涉及到关于文件或文件目录的创建,删除&#xff0c;重命名…

仙境传说RO:添加自定义道具

仙境传说RO&#xff1a;添加自定义道具 大家好&#xff0c;我是艾西今天和大家聊一下仙境传说RO怎么添加自定义道具。在我们开服时加入一些道具模组等往往会让我们的服务器更有特色以及消费点&#xff0c;那么让我们直接进入正题开始操作&#xff1a;&#xff08;此处我们讲的…

k8s集群安装Istio过程记录及问题总结

目录 一、介绍二、部署Helm三、部署Istio部署官方示例 Bookinfo 四、部署KaliBug 记录部署Bookinfo demo失败 一、介绍 这篇文章记录一下k8s集群安装Helm、Istio 和 Kiali&#xff0c;方便学习相关概念。 前提需要k8s集群&#xff1a; 可参考&#xff1a;Arm64架构(MacBookPr…

cmake流程控制--循环

目录 for循环 普通方式 demo cmake3.17中添加了一种特殊的形式,可以在一次循环多个列表,其形式如下: demo 类似python语言的for循环 demo while循环 demo cmake跳出循环(break)和继续下次循环(continue) demo block()和endblock()命令定义的块内也是允许break()和c…

Windows下 Hexdump查看hex文件

链接 &#xff1a; https://www.di-mgt.com.au/hexdump-for-windows.html C:\hexdump-2.0.2 下载解压&#xff0c;以管理员权限拷贝至C:\Windows 便可使用查看命令

蓝牙定位系统|蓝牙网关定位和蓝牙Beacon定位的区别有哪些?

作为室外定位向室内环境的延伸&#xff0c;为了解决室外定位导航“最后一公里”的问题&#xff0c;室内定位领域的科技公司和研究机构也做出了很多的努力。目前市场主流的是基于蓝牙网关、蓝牙Beacon的室内定位方案&#xff0c;经常会有客户问到&#xff0c;这两种方案有什么区…

STL好难(7):优先级队列(priority_queue)与仿函数

目录 1.优先级队列的介绍&#xff1a; 2.priority_queue的函数接口 3.仿函数&#xff08;函数对象&#xff09;的简单理解 4.priority_queue的模拟实现&#xff1a; 1.优先级队列的介绍&#xff1a; 点击查看priority_queue的文档介绍 1. 优先队列是一种容器适配器&#x…

默认成员函数

前文提要 本文全文以日期类为例 先简单写一个日期类 class Data{ public:private:int _year;int _month;int _day; };且补充一个小知识 数据类型的划分 内置类型&#xff1a;是编程语言提供的基本数据类型&#xff0c;例如整数、浮点数、字符、布尔值 自定义类型&#xff1…

FreeRTOS实时操作系统(十二)事件标志组

系列文章目录 文章目录 系列文章目录事件标志组事件标志组API函数实验测试 事件标志组 事件标志位&#xff1a;用一个位来表示事件是否可以发生。 事件标志组是一组事件标志位的集合 特点&#xff1a; 1.每一个位表示一个事件&#xff08;高8位不是&#xff09; 2.每一位事件…

Java的异常Exception

异常 1、异常概述与异常体系结构 1.1、异常概述 异常&#xff1a;在Java语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; Java程序在执行过程中所发生的异常事件可分为两类&#xff1a; Erro…

装饰器模式:通过剖析Java IO类库源码学习装饰器模式

我们通过剖析Java IO类的设计思想&#xff0c;再学习一种新的结构型模式&#xff0c;装饰器模式。它的代码结构跟桥接模式非常相似&#xff0c;不过&#xff0c;要解决的问题却大不相同。 Java IO类库非常庞大和复杂&#xff0c;有几十个类&#xff0c;负责IO数据的读取…