怎么理解MyCAT中的DDL-創(chuàng)新互聯(lián)

這篇文章主要講解了“怎么理解MyCAT中的DDL”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么理解MyCAT中的DDL”吧!

創(chuàng)新互聯(lián)建站"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營銷需求!創(chuàng)新互聯(lián)建站具備承接各種類型的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)項(xiàng)目的能力。經(jīng)過10余年的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評。

今天開發(fā)同學(xué)提了一個(gè)需求,是希望對某一個(gè)時(shí)間范圍的表做DDL操作,看起來好像復(fù)雜度也不高。

但是我一看開發(fā)同學(xué)提供的信息時(shí)就有點(diǎn)猶豫了,因?yàn)槎丝谑?066,也就意味著使用了中間件。這是一套MyCAT的環(huán)境,一共有4個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)拆分成了4個(gè)邏輯節(jié)點(diǎn),所以有16個(gè)sharding分片,正是應(yīng)了那句話:百庫十表。雖然目前看起來節(jié)點(diǎn)數(shù)也不多,但是看看這個(gè)表hisrecord的分片邏輯就會(huì)發(fā)現(xiàn),遠(yuǎn)遠(yuǎn)比我們想的要更豐富一些。

這個(gè)表是按照日期來存儲數(shù)據(jù)的,即數(shù)據(jù)的存儲單位是日。表名類似于rec20180301,rec20180302這種。所以按照這種增長的趨勢,可以根據(jù)時(shí)間維度不斷擴(kuò)展,同時(shí)又對每天的表做了細(xì)粒度的拆分,每個(gè)日表會(huì)有16個(gè)分片做hashl路由。

開發(fā)同學(xué)的需求是對某一天之后的日表添加字段,變更第一天的數(shù)據(jù)需要對該字段添加默認(rèn)值,之后的就不需要默認(rèn)值了,這個(gè)從業(yè)務(wù)的角度來說,是因?yàn)閼?yīng)用層升級,需要這個(gè)屬性,如果有些業(yè)務(wù)暫時(shí)還沒有遷移過來,有一天的時(shí)間來緩沖調(diào)整修復(fù)。所以目前的需求的福利就是我們要修改的表目前沒有寫入,做變更不用考慮在線業(yè)務(wù)的寫入影響。

我簡單算了下,按照目前的修改幅度,影響的日表有177個(gè)。

mysql> select datediff('2018-11-01','2018-05-08');

+-------------------------------------+

| datediff('2018-11-01','2018-05-08') |

+-------------------------------------+

| 177 |

+-------------------------------------+

1 row in set (0.00 sec)

按照16個(gè)分片來算,這個(gè)數(shù)量就相當(dāng)大了,有2800多張表。

mysql> select 177*16;

+--------+

| 177*16 |

+--------+

| 2832 |

+--------+

1 row in set (0.00 sec)

涉及的DDL表有2個(gè),即2個(gè)DDL語句,所以算下來就是5600多張表了。所以你看一張表就能拆分成2000多張表,一年有差不多5800張相關(guān)的表。

如果在這個(gè)基礎(chǔ)上考慮當(dāng)天的表結(jié)構(gòu)變更,那就更復(fù)雜了。

我們來簡單看下MyCAT里面的schema.xml配置。

里面配置了16個(gè)分片,即dn50-dn65,database是histrecord01-histrecord16

<dataNode name="dn50" dataHost="localhost1" database="hisrecord01" />

<dataNode name="dn51" dataHost="localhost1" database="hisrecord02" />

。。。

<dataNode name="dn65" dataHost="localhost4" database="hisrecord16" />

對表的分片規(guī)則是按照hash取模來計(jì)算的。

<table name="rec20180301" dataNode="dn$50-65" rule="mod-long-16-pid" />

<table name="rec20180302" dataNode="dn$50-65" rule="mod-long-16-pid" />。。。

<table name="rec20180307" dataNode="dn$50-65" rule="mod-long-16-pid" />

要做這個(gè)工作,手工完成的可能性太低,所以準(zhǔn)備了如下的腳本,借鑒了之前同事的一些思路。

我們輸入兩個(gè)時(shí)間,即起始時(shí)間,終止時(shí)間。app_sql/create_sql.sql是表結(jié)構(gòu)的定義文件。這個(gè)腳本的意義在于不斷的處理表結(jié)構(gòu)信息,打上時(shí)間戳,寫入另外一個(gè)腳本文件,按照日期循環(huán)100天,就寫入100次。

startdate=`date -d "20180508" +%Y%m%d`

enddate=`date -d "20181101" +%Y%m%d`

#定義循環(huán)主函數(shù)

function main(){

while [[ ${startdate} < ${enddate} ]]

do

echo ${startdate}

cat /home/mysql/app_sql/create_sql.sql >> /home/mysql/app_sql/alter_his_record.sql

sed -i "s/20180508/${startdate}/g" /home/mysql/app_sql/alter_his_record.sql

echo "" >> /home/mysql/app_sql/alter_his_record.sql

echo

startdate=`date -d "+1 day ${startdate}" +%Y%m%d`

done

}

#執(zhí)行主函數(shù)

main

所以很快就完成了上述的基本操作。當(dāng)然MyCAT端是不支持DDL語句的。所以我們需要在每個(gè)節(jié)點(diǎn)上單獨(dú)去執(zhí)行相應(yīng)的變更DDL。

根據(jù)得到的腳本略作改動(dòng),就可以分發(fā)到不同的sharding節(jié)點(diǎn)側(cè)了。整個(gè)過程持續(xù)了不到半個(gè)小時(shí),很多時(shí)間都是在不斷的確認(rèn)中,因?yàn)檫@個(gè)變更的影響范圍確實(shí)有點(diǎn)大。

當(dāng)然這個(gè)問題的前提是我們已經(jīng)創(chuàng)建好了日表,如果沒有日表的話,我們還是需要重新配置一下,然后在MyCAT端reload一些配置。

把這個(gè)任務(wù)擴(kuò)展一下,就會(huì)發(fā)現(xiàn),中間件層面的數(shù)據(jù)處理更側(cè)重于TP業(yè)務(wù),而且是插入密集型的業(yè)務(wù),如果是節(jié)點(diǎn)間的交互分布式,那這個(gè)方案就不大適合了。同時(shí)不斷的拆分從業(yè)務(wù)的角度來說,歷史數(shù)據(jù)的歸檔保留和數(shù)據(jù)的聚合需求還是有的??赡茉谶@個(gè)時(shí)候中間件層面的支持就很有限了,我們在一定程度上可能需要其他的解決方案。

感謝各位的閱讀,以上就是“怎么理解MyCAT中的DDL”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么理解MyCAT中的DDL這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

分享題目:怎么理解MyCAT中的DDL-創(chuàng)新互聯(lián)
本文來源:http://muchs.cn/article16/djhegg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站設(shè)計(jì)公司App設(shè)計(jì)、移動(dòng)網(wǎng)站建設(shè)、ChatGPT、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作