qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          數(shù)據(jù)遷移類測試策略

          前言

            前段時間做了一次數(shù)據(jù)遷移,針對數(shù)據(jù)遷移類型的測試方法進行了一些了解和總結(jié),以下工具愚公移山和精衛(wèi)為淘寶開發(fā)的工具,已使用于多個產(chǎn)品、項目中,質(zhì)量有保障。

            一、工具介紹

            1、愚公移山

            概述:

            數(shù)據(jù)的動態(tài)遷移,可完成數(shù)據(jù)全量、增量遷移,進行數(shù)據(jù)比對,保證數(shù)據(jù)的正確;目前較多運用在數(shù)據(jù)遷移中,已經(jīng)被很多團隊使用,是很成熟可靠的數(shù)據(jù)遷移工具

            適用范圍:

            可支持:支持oracle和mysql,分庫分表,實時同步,數(shù)據(jù)比對

            不支持:涉及到外部依賴,遷移規(guī)則非常復(fù)雜的數(shù)據(jù)

            性能情況:

            沒有對愚公進行壓測,性能情況參考以下的例子

            例子:遷移一個1000萬的表。 16個線程,開啟批量寫入,半個小時以內(nèi)完成。

            影響點:機器的負載,并行的任務(wù)數(shù),配置的線程數(shù)

            愚公百科:(不知道可以可以貼!有需要可聯(lián)系作者)

            2、精衛(wèi)工具

            概述:

            精衛(wèi)是一個基于MySQL數(shù)據(jù)庫的數(shù)據(jù)復(fù)制組件,較多運用在數(shù)據(jù)雙寫的場景中,是比較成熟的一個數(shù)據(jù)復(fù)制組件

            解析數(shù)據(jù)庫的binlog文件,A庫的所有的數(shù)據(jù)變更傳到B庫。binlog:描述數(shù)據(jù)變更的文件

            適用范圍:

            同庫不同表數(shù)據(jù)復(fù)制、多庫多表數(shù)據(jù)冗余、標準化去O支持、數(shù)據(jù)變化通知

            性能情況:

            性能壓測,性能結(jié)果滿足交易主庫同步備庫需求

            例子:主庫1000tps,延遲在50sms以內(nèi)

            【精衛(wèi)+metaq性能測試結(jié)論.msg】

            精衛(wèi)百科:(不知道可以可以貼!)

           二、遷移類測試策略

            1、概述

            隨著業(yè)務(wù)需求或數(shù)據(jù)量增長到一定程度,往往需要進行數(shù)據(jù)庫切換,這里就伴隨這數(shù)據(jù)遷移。

            關(guān)鍵字: 全量數(shù)據(jù)遷移,增量數(shù)據(jù)遷移,分庫分表,數(shù)據(jù)雙寫,oracle、mysql、hbase…,新老數(shù)據(jù)兼容,數(shù)據(jù)訂正

            2、發(fā)布方案(遷移方案)

            兩大類:正常發(fā)布、停機發(fā)布

            正常發(fā)布:可以實現(xiàn)線上業(yè)務(wù)無縫切換,不影響用戶使用,需要保證新老數(shù)據(jù)兼容,發(fā)布過程中的數(shù)據(jù)寫入等。

            停機發(fā)布 : 優(yōu)點在于可以避免發(fā)布過程中的新數(shù)據(jù)寫入,缺點是發(fā)布過程中,不能正常提供服務(wù)。

            發(fā)布方案的制定是根據(jù)具體業(yè)務(wù)情況制定發(fā)布方案,對業(yè)務(wù)無影響的情況下較常采用停機發(fā)布,方便簡單。

            介紹一種無縫對接的正常發(fā)布方案

            A庫歷史庫 mysql分庫分表 到 B庫新庫hbase

            步驟1、全量dump1:A庫數(shù)據(jù)全量遷移至B庫

            步驟2、打開雙寫:同時寫入到A庫歷史庫和B庫新庫

            步驟3、全量dump2:開啟雙寫前的所有差集,將差集灌回B數(shù)據(jù)庫,這里是補充全量dump1期間和開啟雙寫前只寫入到A的數(shù)據(jù)。保證了A、B數(shù)據(jù)庫數(shù)據(jù)的完全一致,同時已經(jīng)開啟了雙寫。

            步驟3’、測試介入,可對A、B庫取某一時間段前所有數(shù)據(jù)進行數(shù)據(jù)驗證。

            步驟4、停止對A庫的寫入,發(fā)布前端應(yīng)用,切換至B庫新庫

            注意點:

            1、雙寫時,B庫不存在被寫源數(shù)據(jù)或B庫數(shù)據(jù)狀態(tài)異常等情況,需要從業(yè)務(wù)上考慮,是否直接從A庫中獲取數(shù)據(jù)并覆蓋至B庫

            2、以上步驟中的多次dump和雙寫有多個寫入B庫的場景,需要以保證B庫和A庫一致為原則,如B庫的重復(fù)寫入等情況的處理。

            3、測試策略

            在進行數(shù)據(jù)遷移測試前,需確認的CheckList

            CheckList

            1、 哪些表需要遷、哪些表不需要遷;需要遷移的表老庫和新庫的對應(yīng)關(guān)系是怎樣的

            2、 明確表的關(guān)聯(lián)關(guān)系,關(guān)聯(lián)表是否需要遷移,不遷移怎么處理

            3、 遷移的表中,哪些字段要遷移,哪些不遷移,對應(yīng)關(guān)系是怎樣的

            4、 新表中的字段,老表是不是一定有,如果不一定,怎么處理可能為空的情況,尤其是必填字段的處理

            5、 遷移前,新表是否為空,不為空是否可能存在數(shù)據(jù)重復(fù)的情況,怎么處理

            6、 新老表中的字段類型、長度的定義是否一致,可否正確轉(zhuǎn)換

            7、 需遷移的表數(shù)據(jù)量為多少

            8、 開發(fā)做了哪些數(shù)據(jù)遷移正確性的保障

            針對不同的業(yè)務(wù)場景需要測試人員設(shè)計不同的測試方案,主要都是兩個層面的驗證,數(shù)據(jù)層面的數(shù)據(jù)驗證和功能層面的功能驗證

            1、數(shù)據(jù)驗證:使用工具或設(shè)計對賬程序全量驗證

            a、全量數(shù)據(jù)驗證

            b、增量數(shù)據(jù)驗證

            c、抽樣數(shù)據(jù)驗證

            根據(jù)業(yè)務(wù)情況判斷需要進行哪一項或幾項數(shù)據(jù)驗證

            工具使用:可以選用目前較成熟的遷移工具:愚公移山, 兼全量數(shù)據(jù)驗證和增量數(shù)據(jù)驗證功能

            驗證方式:若遷移場景不在愚公的適用范圍內(nèi),全量驗證和增量數(shù)據(jù)驗證需要另外設(shè)計適用于該場景下的數(shù)據(jù)驗證方案

            可采用的一些驗證方式:考慮根據(jù)不同數(shù)據(jù)的存儲方式,數(shù)據(jù)量的大小

            a、關(guān)系數(shù)據(jù)庫,直接新老數(shù)據(jù)庫中jdbc方式獲取數(shù)據(jù),一條條進行對比,新老數(shù)據(jù)存在規(guī)則轉(zhuǎn)換的情況需要在對賬程序中同時進行規(guī)則判斷。

            b、全量或抽樣dump歷史庫和新庫兩份文件進行對比,數(shù)據(jù)庫非常大的時候推薦使用hadoop

          2、功能驗證:主要是抽樣數(shù)據(jù)的功能測試

            a、功能測試:對歷史數(shù)據(jù)常見的操作方式為,在歷史庫準備一批歷史數(shù)據(jù),準備什么樣的歷史數(shù)據(jù)依賴于具體業(yè)務(wù)的數(shù)據(jù)情況,通過遷移程序?qū)v史數(shù)據(jù)遷移至新庫后,驗證這批數(shù)據(jù)的存儲和功能展現(xiàn)。新數(shù)據(jù)的驗證則以新增功能的方式進行測試。

            b、自動化測試:API自動化+頁面自動化:只有數(shù)據(jù)遷移沒有上層業(yè)務(wù)變更的情況下,如果已經(jīng)存在自動化腳本,采用自動化腳本可以快速回歸,重點在DAO層的方法。

            以下情況需要特別設(shè)計用例進行功能驗證

            1、 老表字段進行類型或長度等轉(zhuǎn)換遷移至新表

            2、 老表中可能為空的字段,新表中直接為空或默認一個初始值

            3、 老表數(shù)據(jù)通過特殊處理轉(zhuǎn)換為新表中的值

            4、 需要進行數(shù)據(jù)訂正的字段

            數(shù)據(jù)雙寫

            數(shù)據(jù)雙寫往往伴隨著數(shù)據(jù)遷移進行,精衛(wèi)工具能很好的支持數(shù)據(jù)復(fù)制,并進行數(shù)據(jù)比對。

            在精衛(wèi)工具的試用范圍外的數(shù)據(jù)雙寫,一般是應(yīng)用中加入雙寫代碼,這里也需要涉及數(shù)據(jù)比對程序,類似于數(shù)據(jù)遷移的比對程序;

            可采用的驗證方式:

            1、根據(jù)數(shù)據(jù)雙寫的實時性的特性, 在不影響應(yīng)用功能、性能的情況下,可以考慮在雙寫代碼中加入驗證程序,即每完成一次雙寫,即對插入的新老數(shù)據(jù)進行數(shù)據(jù)比對。

            2、枚舉所有涉及雙寫的場景,逐個場景進行功能驗證

            3、以全量的方式進行數(shù)據(jù)比對,數(shù)據(jù)雙寫進行到一定程度,能確保所有需要雙寫的場景都已經(jīng)進行過,那么,對雙寫的兩張表的數(shù)據(jù)截取gmt_modify時間為某一時間段以前的所有數(shù)據(jù)進行比對,約等于遷移的全量數(shù)據(jù)驗證。

            其他關(guān)注點:

            1、 考慮id預(yù)留空間:+**,需要足夠大,保證沒有主鍵沖突

            2、 關(guān)注sql性能:分庫分表,尤其是跨庫查詢時需要關(guān)注性能情況,數(shù)據(jù)量比較大的情況下,可以考慮走搜索


          posted on 2013-09-06 10:57 順其自然EVO 閱讀(566) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 望城县| 峨山| 西乌珠穆沁旗| 古田县| 柘荣县| 玛曲县| 农安县| 北宁市| 阿克陶县| 鄢陵县| 龙南县| 吴忠市| 大竹县| 卓资县| 浠水县| 观塘区| 泰和县| 井研县| 庆城县| 抚远县| 株洲市| 渭源县| 察雅县| 东莞市| 河池市| 株洲县| 慈溪市| 德清县| 元氏县| 长岭县| 昂仁县| 双流县| 宝丰县| 广饶县| 长兴县| 雷山县| 姜堰市| 高雄市| 资兴市| 麟游县| 龙江县|