本文共 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
# K=1000,M=10000.0-500M=0500M-1000M=11000M-1500M=2
这是默认的配置,也可以直接修改,我们修改下
[root@mysql1 conf]# cat autopartition-long.txt# 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/