數據遷移類測試策略
前言
前段時間做了一次數據遷移,針對數據遷移類型的測試方法進行了一些了解和總結,以下工具愚公移山和精衛為淘寶開發的工具,已使用于多個產品、項目中,質量有保障。
一、工具介紹
1、愚公移山
概述:
數據的動態遷移,可完成數據全量、增量遷移,進行數據比對,保證數據的正確;目前較多運用在數據遷移中,已經被很多團隊使用,是很成熟可靠的數據遷移工具
適用范圍:
可支持:支持oracle和mysql,分庫分表,實時同步,數據比對
不支持:涉及到外部依賴,遷移規則非常復雜的數據
性能情況:
沒有對愚公進行壓測,性能情況參考以下的例子
例子:遷移一個1000萬的表。 16個線程,開啟批量寫入,半個小時以內完成。
影響點:機器的負載,并行的任務數,配置的線程數
愚公百科:(不知道可以可以貼!有需要可聯系作者)
2、精衛工具
概述:
精衛是一個基于MySQL數據庫的數據復制組件,較多運用在數據雙寫的場景中,是比較成熟的一個數據復制組件
解析數據庫的binlog文件,A庫的所有的數據變更傳到B庫。binlog:描述數據變更的文件
適用范圍:
同庫不同表數據復制、多庫多表數據冗余、標準化去O支持、數據變化通知
性能情況:
性能壓測,性能結果滿足交易主庫同步備庫需求
例子:主庫1000tps,延遲在50sms以內
【精衛+metaq性能測試結論.msg】
精衛百科:(不知道可以可以貼!)
二、遷移類測試策略
1、概述
隨著業務需求或數據量增長到一定程度,往往需要進行數據庫切換,這里就伴隨這數據遷移。
關鍵字: 全量數據遷移,增量數據遷移,分庫分表,數據雙寫,oracle、mysql、hbase…,新老數據兼容,數據訂正
2、發布方案(遷移方案)
兩大類:正常發布、停機發布
正常發布:可以實現線上業務無縫切換,不影響用戶使用,需要保證新老數據兼容,發布過程中的數據寫入等。
停機發布 : 優點在于可以避免發布過程中的新數據寫入,缺點是發布過程中,不能正常提供服務。
發布方案的制定是根據具體業務情況制定發布方案,對業務無影響的情況下較常采用停機發布,方便簡單。
介紹一種無縫對接的正常發布方案
A庫歷史庫 mysql分庫分表 到 B庫新庫hbase
步驟1、全量dump1:A庫數據全量遷移至B庫
步驟2、打開雙寫:同時寫入到A庫歷史庫和B庫新庫
步驟3、全量dump2:開啟雙寫前的所有差集,將差集灌回B數據庫,這里是補充全量dump1期間和開啟雙寫前只寫入到A的數據。保證了A、B數據庫數據的完全一致,同時已經開啟了雙寫。
步驟3’、測試介入,可對A、B庫取某一時間段前所有數據進行數據驗證。
步驟4、停止對A庫的寫入,發布前端應用,切換至B庫新庫
注意點:
1、雙寫時,B庫不存在被寫源數據或B庫數據狀態異常等情況,需要從業務上考慮,是否直接從A庫中獲取數據并覆蓋至B庫
2、以上步驟中的多次dump和雙寫有多個寫入B庫的場景,需要以保證B庫和A庫一致為原則,如B庫的重復寫入等情況的處理。
3、測試策略
在進行數據遷移測試前,需確認的CheckList
CheckList
1、 哪些表需要遷、哪些表不需要遷;需要遷移的表老庫和新庫的對應關系是怎樣的
2、 明確表的關聯關系,關聯表是否需要遷移,不遷移怎么處理
3、 遷移的表中,哪些字段要遷移,哪些不遷移,對應關系是怎樣的
4、 新表中的字段,老表是不是一定有,如果不一定,怎么處理可能為空的情況,尤其是必填字段的處理
5、 遷移前,新表是否為空,不為空是否可能存在數據重復的情況,怎么處理
6、 新老表中的字段類型、長度的定義是否一致,可否正確轉換
7、 需遷移的表數據量為多少
8、 開發做了哪些數據遷移正確性的保障
針對不同的業務場景需要測試人員設計不同的測試方案,主要都是兩個層面的驗證,數據層面的數據驗證和功能層面的功能驗證
1、數據驗證:使用工具或設計對賬程序全量驗證
a、全量數據驗證
b、增量數據驗證
c、抽樣數據驗證
根據業務情況判斷需要進行哪一項或幾項數據驗證
工具使用:可以選用目前較成熟的遷移工具:愚公移山, 兼全量數據驗證和增量數據驗證功能
驗證方式:若遷移場景不在愚公的適用范圍內,全量驗證和增量數據驗證需要另外設計適用于該場景下的數據驗證方案
可采用的一些驗證方式:考慮根據不同數據的存儲方式,數據量的大小
a、關系數據庫,直接新老數據庫中jdbc方式獲取數據,一條條進行對比,新老數據存在規則轉換的情況需要在對賬程序中同時進行規則判斷。
b、全量或抽樣dump歷史庫和新庫兩份文件進行對比,數據庫非常大的時候推薦使用hadoop
2、功能驗證:主要是抽樣數據的功能測試
a、功能測試:對歷史數據常見的操作方式為,在歷史庫準備一批歷史數據,準備什么樣的歷史數據依賴于具體業務的數據情況,通過遷移程序將歷史數據遷移至新庫后,驗證這批數據的存儲和功能展現。新數據的驗證則以新增功能的方式進行測試。
b、自動化測試:API自動化+頁面自動化:只有數據遷移沒有上層業務變更的情況下,如果已經存在自動化腳本,采用自動化腳本可以快速回歸,重點在DAO層的方法。
以下情況需要特別設計用例進行功能驗證
1、 老表字段進行類型或長度等轉換遷移至新表
2、 老表中可能為空的字段,新表中直接為空或默認一個初始值
3、 老表數據通過特殊處理轉換為新表中的值
4、 需要進行數據訂正的字段
數據雙寫
數據雙寫往往伴隨著數據遷移進行,精衛工具能很好的支持數據復制,并進行數據比對。
在精衛工具的試用范圍外的數據雙寫,一般是應用中加入雙寫代碼,這里也需要涉及數據比對程序,類似于數據遷移的比對程序;
可采用的驗證方式:
1、根據數據雙寫的實時性的特性, 在不影響應用功能、性能的情況下,可以考慮在雙寫代碼中加入驗證程序,即每完成一次雙寫,即對插入的新老數據進行數據比對。
2、枚舉所有涉及雙寫的場景,逐個場景進行功能驗證
3、以全量的方式進行數據比對,數據雙寫進行到一定程度,能確保所有需要雙寫的場景都已經進行過,那么,對雙寫的兩張表的數據截取gmt_modify時間為某一時間段以前的所有數據進行比對,約等于遷移的全量數據驗證。
其他關注點:
1、 考慮id預留空間:+**,需要足夠大,保證沒有主鍵沖突
2、 關注sql性能:分庫分表,尤其是跨庫查詢時需要關注性能情況,數據量比較大的情況下,可以考慮走搜索