本篇文章主要介紹Mycat以月進行分片的方法,包括配置方法、注意事項等。
mycat版本:1.4
數據節點:dn1,dn2,dn3
架構:主從
創建測試表
CREATE TABLE `tdate` ( `id` int(11) NOT NULL, `createdate` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
在三個節點上面分別執行創建表語句。
分片配置
<table>參數
在table參數配置中使用了rule="sharding-by-month"分片函數,同時配置了13個數據節點分別是dn1-dn13,當然數據節點的數目沒有限制,在生產環境避免重復重啟mycat這個節點的范圍大小最好配置超過1年。
<datanode>參數
因為我這裡只有三個節點,所以采取三個節點循環作為數據的保存節點,默認1,4,7,10,第二年1月,這些月份的數據保存在節點1。在生產婚假一般會配置12個節點,這樣每年的1月可以存在節點1,
不支持這樣寫,datanode中的節點定義一定要和table一樣 <dataNode name="dn1,dn4,dn7,dn10,dn13" dataHost="localhost1" database="db1" />
<datahost>參數
datahost配置的是主從讀寫分離,如果第一個writehost宕機了自動切換到第二個writehost
分片函數
vim rule.xml
<tableRule name="sharding-by-month"> <rule> <columns>createdate</columns> <algorithm>sharding-by-month</algorithm> </rule> </tableRule> <function name="sharding-by-month" class="org.opencloudb.route.function.PartitionByMonth"> <property name="dateFormat">yyyy-MM-dd HH:mm:ss</property> <property name="sBeginDate">2015-01-01 00:00:00</property> </function>
權威指南默認的自然月分片使用的dateFormat格式是yyyy-MM-dd,在這裡我是故意這樣測試的。
注意:如果dateFormat格式是yyyy-MM-dd那麼sBeginDate格式就必須是2015-01-01,否則就是上面我配置的這種對應關系。當我使用dateFormat格式是yyyy-MM-dd的時候我在插入語句的createdate字段使用“2015-01-01 00:00:00”格式的時間也可以識別,反之,我配置dateFormat格式是yyyy-MM-dd HH:mm:ss,當我的插入語句的createdate字段使用“2015-01-01”格式的時間會報錯,建議函數這裡配置的是什麼格式在執行插入語句的時候時間也使用什麼格式。
在dateFormat格式是yyyy-MM-dd時分片字段的數據類型可以是date、datetime,在dateFormat格式是yyyy-MM-dd HH:mm:ss是分片字段的數據類型必須是datetime。
sBeginDate是開始時間
測試數據
在mycat中執行插入語句。
insert into tdate(id,createdate) values(1,'2015-01-01 00:00:00'); insert into tdate(id,createdate) values(2,'2015-02-01 00:00:00'); insert into tdate(id,createdate) values(3,'2015-03-01 00:00:00'); insert into tdate(id,createdate) values(4,'2015-10-01 00:00:00'); insert into tdate(id,createdate) values(5,'2016-01-01 00:00:00');
到master中查看數據:
select * from db1.tdate; select * from db2.tdate; select * from db3.tdate;
插入的結果也正常的分布到了各個分片中,測試結果正確。
注意事項
1.在進行insert插入時分片字段必須明確在table後面列出,其它的默認字段可以不列出在1.4中不受影響。
2.values中不能使用函數,例如:now()
mycat對月進行分片總體概念比較清晰,但是因為mycat本身對於容錯的處理比較弱,所以在sql語句方面使用盡量簡單的標准語法。
備注:
作者:pursuer.chen
博客:http://www.cnblogs.com/chenmh
本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接。
《歡迎交流討論》