專利名稱:一種數(shù)據(jù)庫海量數(shù)據(jù)比對的方法
一種數(shù)據(jù)庫海量數(shù)據(jù)比對的方法技術領域麥發(fā)明涉及數(shù)據(jù)庫應用領域,尤其涉及一種數(shù)據(jù)庫海量數(shù)據(jù)比對的方法。
背景技術:
牟基于主數(shù)據(jù)庫、備份數(shù)據(jù)庫設計方案中,比如,現(xiàn)在廣泛使用的異 地容災備份策略,我們期望異地容災備份數(shù)據(jù)庫中的數(shù)據(jù)跟本地數(shù)據(jù)庫的數(shù)據(jù)應該保持一致,但實踐中由于種種原因,諸如通信、IO、應用邏輯等造成了主、備份數(shù)據(jù)庫的不一致,因此如何快速找出主、備份數(shù)據(jù)庫數(shù)據(jù) 的不一致成為方案中一個不可缺少的環(huán)節(jié)。為了解決上述問題,現(xiàn)有的數(shù)據(jù)庫比對技術中有以下幾種方法一種方法是采用直接數(shù)據(jù)庫比對方法,先將主、備份數(shù)據(jù)庫的數(shù)據(jù) 分別導入第三方介質上的數(shù)據(jù)庫,然后執(zhí)行SQL腳本,進行表與表之間的 差操作,得出兩表之間的差異數(shù)據(jù),寫入數(shù)據(jù)庫中,再將這部分數(shù)據(jù)倒出 進行分析,這種方法的優(yōu)點是比較邏輯由數(shù)據(jù)庫完成,正確性不用擔心, 程序實現(xiàn)簡單,缺點是操作步驟麻煩,還需要第三方設備上安裝有數(shù)據(jù)庫, 價格昂貴,并且需要進行全庫導出導入操作,如果數(shù)據(jù)庫數(shù)據(jù)量很大的話, 比對需要花費很大的時間而且主備數(shù)據(jù)之間的差異不容易觀察;另一種方法是將主、備份數(shù)據(jù)庫的數(shù)據(jù)導出為可讀的表數(shù)據(jù)文件, 然后用merge工具進行文件比對,這種方法優(yōu)點是比對差異明顯,容易觀 察,其缺點也是無法對海量數(shù)據(jù)文件進行比對。目前現(xiàn)有幾種商用Merge軟件都無法有效針對海量數(shù)據(jù)進行比對,而在NGN ( Next Generation Network,下 一代網(wǎng)絡)核心網(wǎng)開發(fā)商用的實踐中, 用戶表數(shù)據(jù)常常達到上千萬條記錄,顯然上述兩種比對方法都不容樂觀。 因此,現(xiàn)有技術有待于完善和發(fā)展。發(fā)明內容本發(fā)明的所要解決的問題在于提供一種數(shù)據(jù)庫海量數(shù)據(jù)比對的方法, 該方法克服了直接數(shù)據(jù)庫比對和現(xiàn)有merge工具比對的性能瓶頸,解決了 海量數(shù)據(jù)的快速比對問題。為了解決上述技術問題,本發(fā)明方法的技術方案包括一種數(shù)據(jù)庫海量數(shù)據(jù)比對的方法,其包括如下步驟A、 從數(shù)據(jù)庫中導出表數(shù)據(jù)文件;B、 對所述表數(shù)據(jù)文件進行分片排序,生成海量數(shù)據(jù)排序文件;C 、 將所述海量數(shù)據(jù)排序文件中的主表海量數(shù)據(jù)排序文件與備表 海量數(shù)據(jù)排序文件進行比對,生成表異常記錄文件。所述方法,其中,所述步驟A中,所述表數(shù)據(jù)文件包括文件頭及文件 體;所述文件頭為數(shù)據(jù)表描述信息,該數(shù)據(jù)表描述信息包括數(shù)據(jù)庫表名、 表字段、表數(shù)據(jù)記錄總數(shù)及表主鍵;所述文件體為數(shù)據(jù)內容。所述方法,其中,所述表數(shù)據(jù)文件采用文本格式。所述方法,其中,所述步驟B中,所述海量數(shù)據(jù)排序文件的生成過程 包括如下步驟B1 、從導出的表數(shù)據(jù)文件中獲取數(shù)據(jù)表描述信息;B2、根據(jù)所述數(shù)據(jù)表描述信息的記錄總數(shù),判斷是否要對所述表數(shù)據(jù) 文件進行分片處理;B3、如果是,則對所述表數(shù)據(jù)文件進行分片排序。所述方法,其中,所述步驟B3中,對所述分片排序的處理過程包括如 下步驟B31、在讀入所述表數(shù)據(jù)文件的源文件時,將所述源文件拆分為數(shù)據(jù)塊文件;B32、按照所述表主鍵的排列方式,將拆分后的數(shù)據(jù)塊文件直接進行排 序,并且輸出成排列文件;B33、按照多路平衡歸并方式,對所述排列文件進行歸并排序,生成所 述海量數(shù)據(jù)排序文件。所述方法,其中,所述步驟B31中,所述拆分過程采用順序拆分方式 進行。所述方法,其中,所述步驟C中,所述主表海量數(shù)據(jù)排序文件與備表 海量數(shù)據(jù)排序文件的比對過程包括如下步驟Cl、打開所述主表海量數(shù)據(jù)排列文件及備表海量數(shù)據(jù)排序文件;C2、按順序依次比對所述主表海量數(shù)據(jù)排序文件及備表海量數(shù)據(jù)排序 文件,獲得比對結果;C3、根據(jù)所述比對結果,生成所述表異常記錄文件。所述方法,其中,所述步驟C2中,所述比對方式采用比對所述主表海 量數(shù)據(jù)排序文件及備表海量數(shù)據(jù)排序文件的關^t字或文件尾。所述方法,其中,所述步驟C3中,所述表異常記錄文件包括主表異常 記錄文件或備表異常記錄文件。本發(fā)明方法只需遍歷一次主、備表海量數(shù)據(jù)排列文件就能得到比對結 果,并且能夠高效地完成海量數(shù)據(jù)的主、備數(shù)據(jù)庫之間的數(shù)據(jù)檢查,從而 大大提高了數(shù)據(jù)庫間海量數(shù)據(jù)的比對效率。
圖1為本發(fā)明方法的實現(xiàn)流程圖;圖2是本發(fā)明方法的分片多路歸并排序的實現(xiàn)流程圖; 圖3是本發(fā)明方法的海量數(shù)據(jù)排列文件比對的實現(xiàn)流程圖。
具體實施方式
下面結合附圖,對本發(fā)明的較佳實施例作進一步詳細說明。 如圖1所示,本發(fā)明提供了一種數(shù)據(jù)庫海量數(shù)據(jù)比對的方法,其實現(xiàn) 流程包括如下步驟110、從主數(shù)據(jù)庫及備數(shù)據(jù)庫中分別導出各自的表數(shù)據(jù)文件;'其中,所 述表數(shù)據(jù)文件采用文本格式,且所述表數(shù)據(jù)文件包括文件頭及文件體;所 述文件頭為數(shù)據(jù)表描述信息,該數(shù)據(jù)表描述信息包括數(shù)據(jù)庫表名、表字段、 表數(shù)據(jù)記錄總數(shù)及表主鍵,所述文件體為數(shù)據(jù)內容120、從導出的主、備表數(shù)據(jù)文件中獲取數(shù)據(jù)表描述信息,根據(jù)各個表 數(shù)據(jù)文件記錄的大小(即各個表l史據(jù)文件的記錄大于IOO萬),判斷是否要 對所述表數(shù)據(jù)文件進行分片處理,如果是,則轉至步驟140,如果各個表數(shù) 據(jù)文件記錄非常大(>100萬),否則轉至步驟130;130、采用直接快速排序的方式,對主、備表數(shù)據(jù)文件進行排序,分別 生成主、備表海量數(shù)據(jù)排序文件,并轉至步驟160;140、在讀入主、備表數(shù)據(jù)文件的源文件時,分別將各自對應的源文件 拆分為數(shù)據(jù)塊文件,并按照所述表主鍵的排列方式,將拆分后的數(shù)據(jù)塊文件 直接進行排序,并且輸出成排列文件;同時"^照多^ 各平tf歸并方式,對所述 排列文件進行歸并排序,生成所述海量數(shù)據(jù)排序文件;150、將所述表海量數(shù)據(jù)排序文件中的主海量數(shù)據(jù)排序文件與備海量數(shù) 據(jù)排序文件進行比對,生成表異常記錄文件,并輸出表異常記錄文件;其 中,所述表異常記錄文件為主表異常記錄(TargetDiff)文件及備表異常記 錄(SourceDiff)文件中的一個或兩個,且在整個比對過程中,平均時間復 雜度為0 (nlogn)。其中,步驟140中,請參閱附圖2,分片排序及多路平衡歸并排序的整 個實現(xiàn)流禾呈如下141、 將主、備表數(shù)據(jù)文件進行分片排序輸出,獲得多個(即N個)有 序分片數(shù)據(jù)文件,并對1至N進行編號;142、 根據(jù)分片數(shù)據(jù)文件總數(shù)N,生成一棵葉子節(jié)點為N的平衡二叉樹, 初始狀態(tài)時,將每個非葉子節(jié)點置為關鍵字可能達到的最小值(MinKey), 且每一個葉子節(jié)點對應一個有序分片數(shù)據(jù)文件的編號;143、 從葉子節(jié)點讀取對應編號的有序分片數(shù)據(jù)文件的第 一行數(shù)據(jù);144、 從底向上對所有非葉子節(jié)點進行如下調整從非葉子節(jié)點移動到 根節(jié)點,其所經(jīng)過的非葉子(包括根節(jié)點)節(jié)點指向其左右孩子關鍵字所 對應的大編號,當在根節(jié)點進行左右孩子比較時,變量S記錄關鍵字所對應 的小編號;145、 調整完畢,輸出變量S中記錄編號中所對應的數(shù)據(jù)到外排序文件;146、 從對應S記錄編號的葉子節(jié)點上讀取對應有序分片數(shù)據(jù)文件的下 一行數(shù)據(jù),當讀取到文件尾時,置讀取數(shù)據(jù)為關鍵字可能達到的最大值(Max Key);147、 從該葉子節(jié)點移動到根節(jié)點,其所經(jīng)過的非葉子(包括根節(jié)點) 節(jié)點指向其左右孩子關鍵字所對應的大的編號,在根節(jié)點左右孩子比較時,變量S記錄關鍵字所對應的小的編號;148、 判斷變量S是否等于MaxKey,是則轉至步驟149,否則轉至步驟145;149、 分別生成主表、備表海量數(shù)據(jù)排序文件。其中,步驟150中,請參閱附圖3,所述主、備海量數(shù)據(jù)排序文件比對 過程包括如下處理步驟151、 分別打開數(shù)據(jù)庫中所述主表海量數(shù)據(jù)排列文件及備表海量數(shù)據(jù)排 序文件;152、 將第一游標(Cl)指向主表海量數(shù)據(jù)排列文件的當前讀入記錄, 第二游標(C2)指向備表海量數(shù)據(jù)排列文件的當前讀入記錄;153、從主、備表海量數(shù)排列文件的外排序文件起始處開始,對Cl、 C2指向當前記錄所對應海量數(shù)據(jù)排列文件內的關鍵字進行比較,并根據(jù)所 述比對結果,生成所述表異常記錄文件;其中,比較結果分為以下四種情 形.第一種情形,如果C1指向主表海量數(shù)據(jù)排列文件內的關鍵字(Key) 大于C2指向備表海量數(shù)據(jù)排列文件內的關鍵字(Key),或者Cl指向所對 應主表海量數(shù)據(jù)排列文件的文件尾(NULL ),則表示C2所對應的備表海量 數(shù)據(jù)排列文件是異常記錄,此時,備表海量數(shù)據(jù)排列文件所對應的備表異 常計數(shù)器加1,并且輸出C2所指的內容到TargetDiff文件中,SourceDiff 文件中則插入一條空白記錄,C2向下移動一條記錄;第二種情形,如果Cl指向主表海量數(shù)據(jù)排列文件內的關鍵字(Key) 等于C2指向備表海量數(shù)據(jù)排列文件內的關鍵字(Key),且除關鍵字(Key) 以外的其他數(shù)據(jù)項也都匹配時,則匹配計數(shù)器加1;第三種情形,如果C1指向主表海量數(shù)據(jù)排列文件內的關鍵字(Key) 等于C2指向備表海量數(shù)據(jù)排列文件內的關鍵字(Key ),且除關鍵字(Key) 以外的其他數(shù)據(jù)項不匹配時,則將Cl和C2所指的主備表海量數(shù)據(jù)排列文 件內容作為異常對記錄,并分別輸出異常對記錄到SourceDiff和TargetDiff 文件中,此時異常對計數(shù)器加l, Cl, C2分別向下移動一條記錄;第四種情形,如果C1指向主表海量數(shù)據(jù)排列文件內的關鍵字(Key) 小于C2指向備表海量數(shù)據(jù)排列文件內的關鍵字(Key),或者C2指向所對 應的備表海量數(shù)據(jù)排列文件的文件尾(NULL),則表示C1是異常記錄,此 時,主表海量數(shù)據(jù)排列文件所對應的主表異常計數(shù)器加1,并且輸出Cl所 指的內容到SourceDiff文件中,TargetDiff文件中則插入一條空白記錄,C1 向下移動一條記錄;在上述四種情形中,若C1指向主表海量數(shù)據(jù)排列文件的文件尾,則把 C2所指的內容以及剩下的備表海量數(shù)據(jù)排列文件內容輸出到TargetDiff文件中,同時SourceDiff文件中則插入同行數(shù)的空白記錄,,直至C1和C2都指向各自所對應的表海量數(shù)據(jù)排列文件的文件尾;154、比對結束后,分別輸出主、備表異常記錄文件及各個計數(shù)器值。 綜上所述,本發(fā)明通過查找主庫、備份數(shù)據(jù)庫間各表的各個字段數(shù)據(jù) 的差異,只需要遍歷一次文件就能得到比對結果,并且就能夠高效地完成 海量教據(jù)的主、備數(shù)據(jù)庫之間的數(shù)據(jù)檢查,解決了數(shù)據(jù)庫間直接比對的低 效率和高成本問題以及一般Merge比對工具無法對海量數(shù)據(jù)比對的問題, 從而大大提高了數(shù)據(jù)庫間海量數(shù)據(jù)的比對效率,。應當理解的是,對本領域普通技術人員來說,可以根據(jù)上述說明加以 改進或變換,而所有這些改進和變換都應屬于本發(fā)明所附權利要求的保護 范圍。
權利要求
1、一種數(shù)據(jù)庫海量數(shù)據(jù)比對的方法,其包括如下步驟A、從數(shù)據(jù)庫中導出表數(shù)據(jù)文件;B、對所述表數(shù)據(jù)文件進行分片排序,生成海量數(shù)據(jù)排序文件;C、將所述海量數(shù)據(jù)排序文件中的主表海量數(shù)據(jù)排序文件與備表海量數(shù)據(jù)排序文件進行比對,生成表異常記錄文件。
2、 根據(jù)權利要求1所述的方法,其特征在于,所述步驟A中,所述 表數(shù)據(jù)文件包括文件頭及文件體;所述文件頭為數(shù)據(jù)表描述信息,該數(shù)據(jù) 表描述信息包括數(shù)據(jù)庫表名、表字段、表數(shù)據(jù)記錄總數(shù)及表主鍵;所述文 件體為數(shù)據(jù)內容。
3、 根據(jù)權利要求2所述的方法,其特征在于,所述表數(shù)據(jù)文件采用 文本格式。
4、 根據(jù)權利要求2所述的方法,其特征在于,所述步驟B中,所述 海量數(shù)據(jù)排序文件的生成過程包括如下步驟B1 、從導出的表數(shù)據(jù)文件中獲取所述數(shù)據(jù)表描述信息;B2、根據(jù)所述數(shù)據(jù)表描述信息的記錄總數(shù),判斷是否要對所述表數(shù)據(jù)文件進行分片處理; B3、如果是則對所述表數(shù)據(jù)文件進行分片排序。
5、 根據(jù)權利要求4所述的方法,其特征在于,所述步驟B3中,對 所述分片排序的處理過程包括如下步驟B31、在讀入所述表數(shù)據(jù)文件的源文件時,將所述源文件拆分為數(shù)據(jù) 塊文件;B32、按照所述表主鍵的排列方式,將拆分后的數(shù)據(jù)塊文件直接進行排序,并且輸出成排列文件;B33、按照多路平衡歸并方式,對所述排列文件進行歸并排序,生成所述海量數(shù)據(jù)排序文件。
6、 根據(jù)權利要求5所述的方法,其特征在于,所述步驟B31中,所 述拆分過程采用順序拆分方式進行。
7、 根據(jù)權利要求1所述的方法,其特征在于,所述步驟C中,所述 主表海量數(shù)據(jù)排序文件與備表海量數(shù)據(jù)排序文件的比對過程包括如下步 驟Cl、打開所述主表海量數(shù)據(jù)排列文件及備表海量數(shù)據(jù)排序文件; C2、按順序依次比對所述主表海量數(shù)據(jù)排序文件及備表海量數(shù)據(jù)排序文件,獲得比對結果; C3、根據(jù)所述比對結果,生成所述表異常記錄文件。
8、 根據(jù)權利要求7所述的方法,其特征在于,所述步驟C2中,所 述比對方式采用比對所述主表海量數(shù)據(jù)排序文件及備表海量數(shù)據(jù)排序文件 的關鍵字或文件尾。
9、 根據(jù)權利要求7所述的方法,其特征在于,所述步驟C3中,所 述表異常記錄文件包括主表異常記錄文件或備表異常記錄文件。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)庫海量數(shù)據(jù)比對的方法,應用于數(shù)據(jù)庫領域,其包括步驟從數(shù)據(jù)庫中導出表數(shù)據(jù)文件;對所述表數(shù)據(jù)文件進行分片排序,生成海量數(shù)據(jù)排序文件;將所述海量數(shù)據(jù)排序文件中的主表海量數(shù)據(jù)排序文件與備表海量數(shù)據(jù)排序文件進行比對,生成表異常記錄文件。本發(fā)明方法只需遍歷一次主、備表海量數(shù)據(jù)排列文件就能得到比對結果,并且能夠高效地完成海量數(shù)據(jù)的主、備數(shù)據(jù)庫之間的數(shù)據(jù)檢查,從而大大提高了數(shù)據(jù)庫間海量數(shù)據(jù)的比對效率。
文檔編號G06F17/30GK101236554SQ20071007755
公開日2008年8月6日 申請日期2007年11月29日 優(yōu)先權日2007年11月29日
發(fā)明者朱文琦, 杰 鄭 申請人:中興通訊股份有限公司