您好,登錄后才能下訂單哦!
這篇文章主要講解了“基于賬戶系統做數據庫數據遷移的方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“基于賬戶系統做數據庫數據遷移的方法是什么”吧!
新舊系統都是基于Mycat分片,舊系統有12個分片,新系統有8個分片;由于新系統是重構,目前只對其中一種會員的賬戶類型(會員主錢包,相當于余額寶)進行重構,剩余的果幣、積分、優惠券就在后續的迭代中慢慢重構。
單算主錢包的話,用戶信息大約5千萬,主錢包賬戶信息大約在5千萬,流水大約在8千萬左右。涉及的表有三張,就稱為user_info和account_info表和account_record表,對應到新系統也是這兩三表,差別是里面的數據需要做轉換。如圖,老系統是基于old_user_id分片,新系統是基于new_user_id分片
兩邊系統都是基于Mycat進行分片,遷移程序如果是通過mycat連接數據庫的話,速度會稍慢;就打算通過直連各個分片進行遷移,但是由于兩邊的分片數不同和分片的字段不一樣,通過直連的方式遷移到新系統時需要自己寫分片規則。
如圖直連的方式,從舊系統讀取一批數據時需要計算出具體落到新系統的哪個分片,為了減少實現復雜度和正式遷移時出現問題能快速定位,所以采用了另一種方式。舊系統采用直連12個分片,寫入到新系統時通過mycat,規則的計算由Mycat處理。
為了提高速度,毫不猶豫的選擇了多線程的方案,一開始想到的就是基于隊列的方式,一邊讀一邊寫兩不誤;舊系統總共12個分片,每次開啟多個線程讀取一個分片的數據放進阻塞隊列,同時多個線程從隊列取數據并組裝再通過Mycat寫入新系統。直到一個分片的數據讀取完再讀取下一個分片。
優點:讀取速度快
缺點:寫入慢,造成消息堆積,內存不足,導致GC頻繁,速度變慢。
由于遷移的服務器是8核32G,所以只開啟8個線程分別去讀取12個分片的數據,同個線程里同步讀寫數據。如圖,步驟如下,基于該方案,用戶和賬戶數據的遷移時間大約為26分鐘左右。
將舊系統12個分片放進阻塞隊列。
每個線程開始時從隊列拿一個分片數據源,通過直連的方式
分頁讀取,每批次大約5000條,組裝數據后通過新系統的mycat插入數據
直到最后一批數據小于5000條時,認為該分片的數據已經讀取完畢
讀取完畢后該線程進行分片切換,即重新到隊列拿取新的分片,如果隊列的分片為空,則線程退出,否則重復1-4
感謝各位的閱讀,以上就是“基于賬戶系統做數據庫數據遷移的方法是什么”的內容了,經過本文的學習后,相信大家對基于賬戶系統做數據庫數據遷移的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。