更新時(shí)間:2021-07-07 16:40:33 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1916次
本篇文章主要介紹Mycat以月進(jìn)行分片的方法,包括配置方法、注意事項(xiàng)等。
mycat版本:1.4
數(shù)據(jù)節(jié)點(diǎn):dn1,dn2,dn3
架構(gòu):主從
配置
創(chuàng)建測(cè)試表
CREATE TABLE `tdate` (
`id` int(11) NOT NULL,
`createdate` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
在三個(gè)節(jié)點(diǎn)上面分別執(zhí)行創(chuàng)建表語(yǔ)句。
分片配置
<table>參數(shù)
在table參數(shù)配置中使用了rule="sharding-by-month"分片函數(shù),同時(shí)配置了13個(gè)數(shù)據(jù)節(jié)點(diǎn)分別是dn1-dn13,當(dāng)然數(shù)據(jù)節(jié)點(diǎn)的數(shù)目沒有限制,在生產(chǎn)環(huán)境避免重復(fù)重啟mycat這個(gè)節(jié)點(diǎn)的范圍大小最好配置超過1年。
<datanode>參數(shù)
因?yàn)槲疫@里只有三個(gè)節(jié)點(diǎn),所以采取三個(gè)節(jié)點(diǎn)循環(huán)作為數(shù)據(jù)的保存節(jié)點(diǎn),默認(rèn)1,4,7,10,第二年1月,這些月份的數(shù)據(jù)保存在節(jié)點(diǎn)1。在生產(chǎn)婚假一般會(huì)配置12個(gè)節(jié)點(diǎn),這樣每年的1月可以存在節(jié)點(diǎn)1,
不支持這樣寫,datanode中的節(jié)點(diǎn)定義一定要和table一樣
<dataNode name="dn1,dn4,dn7,dn10,dn13" dataHost="localhost1" database="db1" />
<datahost>參數(shù)
datahost配置的是主從讀寫分離,如果第一個(gè)writehost宕機(jī)了自動(dòng)切換到第二個(gè)writehost
分片函數(shù)
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>
權(quán)威指南默認(rèn)的自然月分片使用的dateFormat格式是yyyy-MM-dd,在這里我是故意這樣測(cè)試的。
注意:如果dateFormat格式是yyyy-MM-dd那么sBeginDate格式就必須是2015-01-01,否則就是上面我配置的這種對(duì)應(yīng)關(guān)系。當(dāng)我使用dateFormat格式是yyyy-MM-dd的時(shí)候我在插入語(yǔ)句的createdate字段使用“2015-01-01 00:00:00”格式的時(shí)間也可以識(shí)別,反之,我配置dateFormat格式是yyyy-MM-dd HH:mm:ss,當(dāng)我的插入語(yǔ)句的createdate字段使用“2015-01-01”格式的時(shí)間會(huì)報(bào)錯(cuò),建議函數(shù)這里配置的是什么格式在執(zhí)行插入語(yǔ)句的時(shí)候時(shí)間也使用什么格式。
在dateFormat格式是yyyy-MM-dd時(shí)分片字段的數(shù)據(jù)類型可以是date、datetime,在dateFormat格式是yyyy-MM-dd HH:mm:ss是分片字段的數(shù)據(jù)類型必須是datetime。
sBeginDate是開始時(shí)間
測(cè)試數(shù)據(jù)
在mycat中執(zhí)行插入語(yǔ)句。
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中查看數(shù)據(jù):
select * from db1.tdate;
select * from db2.tdate;
select * from db3.tdate;
插入的結(jié)果也正常的分布到了各個(gè)分片中,測(cè)試結(jié)果正確。
注意事項(xiàng)
1.在進(jìn)行insert插入時(shí)分片字段必須明確在table后面列出,其它的默認(rèn)字段可以不列出在1.4中不受影響。
2.values中不能使用函數(shù),例如:now()
總結(jié)
mycat對(duì)月進(jìn)行分片總體概念比較清晰,但是因?yàn)閙ycat本身對(duì)于容錯(cuò)的處理比較弱,所以在sql語(yǔ)句方面使用盡量簡(jiǎn)單的標(biāo)準(zhǔn)語(yǔ)法。
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"Mycat月分片方法",希望對(duì)大家有幫助,想了解更多可查看Mycat教程,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為您服務(wù)。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743