更新時間:2021-07-07 16:40:33 來源:動力節點 瀏覽1940次
本篇文章主要介紹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語句方面使用盡量簡單的標準語法。
以上就是動力節點小編介紹的"Mycat月分片方法",希望對大家有幫助,想了解更多可查看Mycat教程,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習