MyCat - 分片 - 分片规则 - 范围分片 | 学习笔记

简介: 快速学习 MyCat - 分片 - 分片规则 - 范围分片

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

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


MyCat - 分片 - 分片规则 - 范围分片

内容介绍:

一、概念

二、演示

 

一、概念

第二种分片规则叫做范围分片。范围分片可以根据指定的字段及其配置的范围与数据节点的对应情况,来决定数据属于哪一个分片。

<tableRule name=“auto-sharding-long”>

<rule>

<columns>id</columns>

<algorithm>mod-long</ algorithm>

</rule>

</tableRule>

这个分片规则的名称叫 auto-sharding-long, 也可以自己定义,指定的字段是根据 id 字段来范围分片。使用的算法是 rang-long,指定分片处理所涉及到的类。mapFile 描述配置的范围与数据节点的对应情况

<function name=”rang-long”class=”io.mycat.route.function.AutoPartitionByLong”>

<property name =”mapFile‘’>autopartition-long.txt</property>

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

</function>

autopartition-long.txt 配置如下:

#range start-end,data node index

#k=1000,m=10000.

0-500M=0

500M-1000M=1

1000M-1500M=2

autopartition-long.txt 中,M=10000,0-500M=0 代表的是 0 到 500 万条记录,是在第一个节点,第 500 万条记录到 1000 万条记录之间是在第二个节点。第 1000 万个记录到 1500 万的条记录在第三个节点上。

 

二、演示

打开配置文件来配置 tb_log 表,关联的是 rule.xml 中的分片规则,而要使用的是auto-sharding-long 规则,粘贴 auto-sharding-long 规则。

下面的 rang-long 函数,关联 autopartition-long.txt,里面配置的内容就是刚才看到的内容。代表的是只能存储 1500 万条记录。如果超过 1500 万条,在入门程序当中的测试,插入了 15000001 的 id 会发生报错的现象,原因是因已经超出1500 万的范围。这种分片规则还有 defaultNode 属性可以配置。defaultNode 是默认的节点。即如果插入了一个id不在范围内,走默认节点零,代表走第一个节点。

下面进行测试。在进行操作时,逻辑库逻辑表都已经配置完成。接着重启一下mycat。退出并执行 bin 目录下的 mycat restart 。重启 mycat 之后,接下来重新连接一下 mycat 。输入 123456,连接上 mycat 后,通过 show databases 来检测PARTITION_DB 逻辑库是否存在。再关注一下逻辑库当中有没有 PARTITION_DB 逻辑表。现在 PARTITION_DB 逻辑表存在,但是需要去定义一下表结构。所以接下来要在 mycat 中来执行下图 mysql 语句。

image.png

mysql 语句已经执行成功。再来关注底层的 MySQL 数据库当中是否存在这张表。分别输入 use partition_db 和 show tables。底层数据库这张表存在。

接下来插入数据: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);

数据已经插入 tb _log 表结构中,同样可以查询出来。输入 select*from tb_log 发现这几条数据全部落在第一个节点。输入 use partition_db 和 select*from tb_log  查询到 158 上并没有数据。同样 159 上没有数据。那么再插入 inselect into tb_log (id,operateuser,operation)values(5000001,‘Tomcat’4);插入进来之后,依然可以查询出来第一个节点当中没有这条记录,第二个节点有这条记录。当插入的组件在 500 万到 1000 万之间是落在第二个节点当中的。

当再插入一条数据, id 在 10000001,再来查询数据发现落到第三个节点。

之前在插入了一个 15000001,是报错的情况,没有找到对应的节点。现在再插入一个 15000001,会发现插入成功。之后查询也是可以查询出来的。关键在于现在的 15000001 没有在最低端查询出来,而是在上面 12345 查询出来的。因为15000001 是存储在第一个分片上。刚才在配置分片规则的时候,配置defaultNode,它叫做默认节点。当插入的值没有找到对应的分片的时候,此时就会使用默认节点。

总之,范围分片会根据在分片规则当中定义的范围,来决定插入的数据归属哪一个分片。

相关文章
|
SQL 关系型数据库 MySQL
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
2173 0
|
设计模式 缓存 前端开发
通过Debug探索SpringMVC执行过程
对SpringMVC的理解 MVC:MVC是一种设计模式 MVC的原理图: M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity) V-View 视图(做界面的展示 jsp,html……) C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面) SpringMVC工作原理 springMVC是一个MVC的开源框架,springMVC=struts2+spring,springMVC就相当于是Struts2加上sring的整合,但是这里有一个疑惑就是,springMVC和spring是什么样的关系呢?这个在百度百科上有一个很好
185 0
采用zookeeper的EPHEMERAL节点机制实现服务集群的陷阱
在集群管理中使用Zookeeper的EPHEMERAL节点机制存在很多的陷阱,毛估估,第一次使用zk来实现集群管理的人应该有80%以上会掉坑,有些坑比较隐蔽,在网络问题或者异常的场景时才会出现,可能很长一段时间才会暴露出来。
14917 1
|
应用服务中间件 测试技术 nginx
Nginx-性能优化-ab压力测试工具
章节目录 nginx 性能优化的点 当前系统性能的评估 ab 压力测试工具使用 1.nginx 性能优化的点 当前系统结构瓶颈 可用方案:观察指标-top、压力测试-substatus、线上系统可以支撑的并发。
2599 0
|
Prometheus 监控 Cloud Native
如何优化Java应用的内存使用
如何优化Java应用的内存使用
|
SQL cobar 算法
SpringBoot 2 种方式快速实现分库分表,轻松拿捏!
SpringBoot 2 种方式快速实现分库分表,轻松拿捏!
6317 6
SpringBoot 2 种方式快速实现分库分表,轻松拿捏!
|
Web App开发 JavaScript 前端开发
高性能的纯Js滚动条美化插件smooth-scrollbar
smooth-scrollbar是一款高性能的纯JavaScript滚动条美化插件。该滚动条为现代浏览器而制作,它具有高性能,自由配置,平滑滚动等特点,支持各种现代桌面浏览器和手机设备。
|
消息中间件 运维 Kubernetes
工作中用Go: Go中异步任务怎么写
工作中用Go: Go中异步任务怎么写
3723 0
工作中用Go: Go中异步任务怎么写
|
SQL 负载均衡 Oracle
MyCat - 配置文件详解 - schema.xml 之 dataNode 与 dataHost 配置详解 | 学习笔记
快速学习 MyCat - 配置文件详解 - schema.xml 之 dataNode 与 dataHost 配置详解
MyCat - 配置文件详解 - schema.xml 之 dataNode 与 dataHost 配置详解 | 学习笔记
|
消息中间件 Java API
Nacos配置中心之动态感知
Nacos配置中心之动态感知
1053 0