io.mycat.route.function.AutoPartitionByLong 自動範圍分片html
Function名稱:rang-long(配置文件默認)java
io.mycat.route.function.PartitionByFileMap 枚舉分片mysql
Funtion名稱:hash-int(配置文件默認)git
默認分片defaultNodegithub
<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;
io.mycat.route.function.PartitionByLong 固定分片Hash算法sql
<property name="partitionCount">1,1,2,3,1</property> <property name="partitionLength">128,128,128,128,128</property>
partitionCount.length必須等於partitionLength.lengthspa
partitionCount*partitionLength=1024.net
io.mycat.route.function.PartitionByModcode
存儲分片規則:分片字段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