博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mycat分片规则之范围约定规则(auto-sharding-long)
阅读量:7071 次
发布时间:2019-06-28

本文共 2141 字,大约阅读时间需要 7 分钟。

分片规则学习

前面部署的时候,就有想到分片规则的问题。规则是什么样子?怎么来定义?

规则列表:

分片枚举
固定分片hash算法
范围约定
取模
按日期(天)分片
取模范围约束
截取数字做hash求模范围约束
应用指定
截取数字hash解析
一致性hash
按单月小时拆分
范围求模分片
日期范围hash分片
冷热数据分片
自然月分片

感觉这个是mycat的精髓部分了,有困难。慢慢攻克。

看看我们现在使用了哪个规则?

<table name="t1" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

用的是auto-sharding-long

这是最简单的范围约定规则

看看它的定义

</tableRule>

<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>

解释下 name是规则名字,columns段是分片的表字段,algorithm段是使用的函数

看看函数,在rule.xml下面有这个定义

<function name="rang-long"

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

解释下,name是函数名字,mapfile是要读取的配置文件

看看配置文件

[root@mysql1 conf]# cat autopartition-long.txt

range start-end ,data node index

# K=1000,M=10000.0-500M=0500M-1000M=11000M-1500M=2

这是默认的配置,也可以直接修改,我们修改下

[root@mysql1 conf]# cat autopartition-long.txt

range start-end ,data node index

# K=1000,M=10000.0-1K=01K-10K=110K-100K=2

现在的意思是:

id 0-1K 分配到datanode dn1
id 1K-10K 分配到datanode dn2
id 10K-100K 分配到datanode dn3

是不是这样呢?测试下:

mysql> explain insert into t1(id) values(1);

+-----------+------------------------------+
| DATA_NODE | SQL |
+-----------+------------------------------+
| dn1 | insert into t1(id) values(1) |
+-----------+------------------------------+
1 row in set (0.01 sec)

mysql> insert into t1(id) values(1001);

Query OK, 1 row affected (0.02 sec)

mysql> explain insert into t1(id) values(1001);

+-----------+---------------------------------+
| DATA_NODE | SQL |
+-----------+---------------------------------+
| dn2 | insert into t1(id) values(1001) |
+-----------+---------------------------------+
1 row in set (0.01 sec)

mysql> insert into t1(id) values(10001);

Query OK, 1 row affected (0.02 sec)

mysql> explain insert into t1(id) values(10001);

+-----------+----------------------------------+
| DATA_NODE | SQL |
+-----------+----------------------------------+
| dn3 | insert into t1(id) values(10001) |
+-----------+----------------------------------+
1 row in set (0.00 sec)

mysql>

实现了按范围分片的需求。本文转自 am2012 51CTO博客,原文链接:http://blog.51cto.com/goome/2050187

转载地址:http://fnell.baihongyu.com/

你可能感兴趣的文章
数据库智能管理助手-CloudDBA
查看>>
双星闪耀,开创先河!蚂蚁金服安全实验室首次同时亮相BlackHat Asia 以及CanSecWest国际安全舞台...
查看>>
Windows7 中配置IIS7的方法(HTTP 错误 404.3 - Not Found)
查看>>
如何高效的将excel导入sqlserver?(转)
查看>>
ASP.NET MVC实践系列8-对查询后分页处理的解决方案
查看>>
让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求
查看>>
Volley
查看>>
马斯克的另一番“威胁论”:人类将成为人工智能的“宠物”
查看>>
Hadoop多用户资源管理–Fair Scheduler介绍与配置(Yarn)
查看>>
批量创建用户及密码
查看>>
redis cluster (1) 原理与基本操作
查看>>
数据库的三大范式以及五大约束
查看>>
Nginx学习笔记(二)——搭建Web服务器
查看>>
BGP之间建立邻居
查看>>
在DOS下配计算机的ip
查看>>
网摘--2014年5月12日
查看>>
python作业
查看>>
浅析如何在Linux系统中如何安装软件
查看>>
windows常用命令(快捷命令篇)
查看>>
DNS配置,主从,子域,转发
查看>>