這篇文章主要講解了“基于賬戶系統(tǒng)做數(shù)據(jù)庫(kù)數(shù)據(jù)遷移的方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“基于賬戶系統(tǒng)做數(shù)據(jù)庫(kù)數(shù)據(jù)遷移的方法是什么”吧!
10年積累的成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有延吉免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
新舊系統(tǒng)都是基于Mycat分片,舊系統(tǒng)有12個(gè)分片,新系統(tǒng)有8個(gè)分片;由于新系統(tǒng)是重構(gòu),目前只對(duì)其中一種會(huì)員的賬戶類(lèi)型(會(huì)員主錢(qián)包,相當(dāng)于余額寶)進(jìn)行重構(gòu),剩余的果幣、積分、優(yōu)惠券就在后續(xù)的迭代中慢慢重構(gòu)。
單算主錢(qián)包的話,用戶信息大約5千萬(wàn),主錢(qián)包賬戶信息大約在5千萬(wàn),流水大約在8千萬(wàn)左右。涉及的表有三張,就稱(chēng)為user_info和account_info表和account_record表,對(duì)應(yīng)到新系統(tǒng)也是這兩三表,差別是里面的數(shù)據(jù)需要做轉(zhuǎn)換。如圖,老系統(tǒng)是基于old_user_id分片,新系統(tǒng)是基于new_user_id分片
兩邊系統(tǒng)都是基于Mycat進(jìn)行分片,遷移程序如果是通過(guò)mycat連接數(shù)據(jù)庫(kù)的話,速度會(huì)稍慢;就打算通過(guò)直連各個(gè)分片進(jìn)行遷移,但是由于兩邊的分片數(shù)不同和分片的字段不一樣,通過(guò)直連的方式遷移到新系統(tǒng)時(shí)需要自己寫(xiě)分片規(guī)則。
如圖直連的方式,從舊系統(tǒng)讀取一批數(shù)據(jù)時(shí)需要計(jì)算出具體落到新系統(tǒng)的哪個(gè)分片,為了減少實(shí)現(xiàn)復(fù)雜度和正式遷移時(shí)出現(xiàn)問(wèn)題能快速定位,所以采用了另一種方式。舊系統(tǒng)采用直連12個(gè)分片,寫(xiě)入到新系統(tǒng)時(shí)通過(guò)mycat,規(guī)則的計(jì)算由Mycat處理。
為了提高速度,毫不猶豫的選擇了多線程的方案,一開(kāi)始想到的就是基于隊(duì)列的方式,一邊讀一邊寫(xiě)兩不誤;舊系統(tǒng)總共12個(gè)分片,每次開(kāi)啟多個(gè)線程讀取一個(gè)分片的數(shù)據(jù)放進(jìn)阻塞隊(duì)列,同時(shí)多個(gè)線程從隊(duì)列取數(shù)據(jù)并組裝再通過(guò)Mycat寫(xiě)入新系統(tǒng)。直到一個(gè)分片的數(shù)據(jù)讀取完再讀取下一個(gè)分片。
優(yōu)點(diǎn):讀取速度快
缺點(diǎn):寫(xiě)入慢,造成消息堆積,內(nèi)存不足,導(dǎo)致GC頻繁,速度變慢。
由于遷移的服務(wù)器是8核32G,所以只開(kāi)啟8個(gè)線程分別去讀取12個(gè)分片的數(shù)據(jù),同個(gè)線程里同步讀寫(xiě)數(shù)據(jù)。如圖,步驟如下,基于該方案,用戶和賬戶數(shù)據(jù)的遷移時(shí)間大約為26分鐘左右。
將舊系統(tǒng)12個(gè)分片放進(jìn)阻塞隊(duì)列。
每個(gè)線程開(kāi)始時(shí)從隊(duì)列拿一個(gè)分片數(shù)據(jù)源,通過(guò)直連的方式
分頁(yè)讀取,每批次大約5000條,組裝數(shù)據(jù)后通過(guò)新系統(tǒng)的mycat插入數(shù)據(jù)
直到最后一批數(shù)據(jù)小于5000條時(shí),認(rèn)為該分片的數(shù)據(jù)已經(jīng)讀取完畢
讀取完畢后該線程進(jìn)行分片切換,即重新到隊(duì)列拿取新的分片,如果隊(duì)列的分片為空,則線程退出,否則重復(fù)1-4
感謝各位的閱讀,以上就是“基于賬戶系統(tǒng)做數(shù)據(jù)庫(kù)數(shù)據(jù)遷移的方法是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)基于賬戶系統(tǒng)做數(shù)據(jù)庫(kù)數(shù)據(jù)遷移的方法是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!