范围分片
io.mycat.route.function.AutoPartitionByLong 自动范围分片
Function名称:rang-long(配置文件默认)
枚举分片
io.mycat.route.function.PartitionByFileMap 枚举分片
Funtion名称:hash-int(配置文件默认)
默认分片defaultNode
<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
<property name="defaultNode">0</property>
</function>
Mycat热加载
mysql -uroot -p123456 -h172.17.0.1 -P9066
mysql> reload @@config;
Hash固定分片(固定分片Hash算法)***
io.mycat.route.function.PartitionByLong 固定分片Hash算法
<property name="partitionCount">1,1,2,3,1</property>
<property name="partitionLength">128,128,128,128,128</property>
partitionCount.length必须等于partitionLength.length
partitionCount*partitionLength=1024
求模分片
io.mycat.route.function.PartitionByMod
存储分片规则:分片字段id%分片数=分片下标;
自然月分片
io.mycat.route.function.PartitionByMonth
按照自然月的方式进行分片。
<function name="partbymonth" class="io.mycat.route.function.PartitionByMonth">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2015-01-01</property>
property name="sEndDate">2015-03-31</property>
</function>
sEndDate - sBeginDate 长度为3时
db1: 1 4 7 10
db2: 2 5 8 11
db3: 3 6 9 12
匹配求模分片
io.mycat.route.function.PartitionByPrefixPattern
根据编号截取n个字符,然后和分区长度进行求模,得出的值就是分区编号。
<property name="patternValue">3</property> //分区长度/分区数量
<property name="prefixLength">6</property> //截取多少字符串
<function name="partbypattern" class="io.mycat.route.function.PartitionByPrefixPattern">
<property name="patternValue">3</property>
<property name="prefixLength">6</property>
</function>
冷热数据分片
public static void main(String[] args) {
PartitionByHotDate hd = new PartitionByHotDate();
hd.dateFormat = "yyyy-MM-dd";
hd.sLastDay = "30"; //热库存储多少天数据
hd.sPartionDay = "30";//超过热库期限的数据按照多少天来分片
hd.init();
System.out.println(hd.calculate("2017-08-01"));
}
一致性哈希分片
特点:解决数据均匀分布
http://www.blogjava.net/hello-yun/archive/2012/10/10/389289.html
分片原理
https://github.com/MyCATApache/Mycat-Server
下载源码Git clone https://github.com/MyCATApache/Mycat-Server.git
分片规则路径:io.mycat.route.function