本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種海量數(shù)據(jù)的比對方法及系統(tǒng)。
背景技術(shù):
數(shù)據(jù)比對指的是將兩份或多份不同的數(shù)據(jù)進行比對,將不同的數(shù)據(jù)快速的尋找出來詳細(xì)差異并進行有效處理。
傳統(tǒng)的比對方法主要為將需要比對的數(shù)據(jù)按一定次序進行排列,每條數(shù)據(jù)記錄有兩個字段,第一個字段是索引字段,第二個字段是屬性字段,例如,以下為需要比對的兩組數(shù)據(jù):
其中,字母為索引字段,數(shù)字為屬性字段。
那么,比對的方法為:獲取第一行的數(shù)據(jù)進行比對,發(fā)現(xiàn)索引字段和屬性字段都相同,則繼續(xù)比對下一行,發(fā)現(xiàn)第二行的索引字段相同,但是屬性字段不同,則把索引字段的索引值b和屬性字段的數(shù)值2、0都記錄下來,再繼續(xù)比對下一行,以此類推。
傳統(tǒng)的比對方法都是通過將大文件進行導(dǎo)入到數(shù)據(jù)庫,然后在數(shù)據(jù)庫中進行排序,然后從數(shù)據(jù)庫中讀取出來數(shù)據(jù),在內(nèi)存中進行比對,這種方法對數(shù)據(jù)庫造成的壓力太大,并發(fā)數(shù)據(jù)量多時易造成數(shù)據(jù)庫假死,而且由于一臺主機i/o有限,比對效率始終無法達到要求。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)的不足,提供一種海量數(shù)據(jù)的比對方法及系統(tǒng)。
本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:
一種海量數(shù)據(jù)的比對方法,包括以下步驟:
步驟1,獲取待比對的海量數(shù)據(jù)文件;
步驟2,根據(jù)預(yù)存的快速排序算法對所述海量數(shù)據(jù)文件進行排序處理,得到多個子數(shù)據(jù)文件;
步驟3,對多個所述子數(shù)據(jù)文件進行數(shù)據(jù)的一致性比對。
本發(fā)明的有益效果是:本發(fā)明提供的一種海量數(shù)據(jù)的比對方法,通過將海量數(shù)據(jù)文件分成多個子數(shù)據(jù)文件,分別對多個子數(shù)據(jù)文件進行比對,有效的解決了目前單一機器i/o有限,無法進行多線程比對的現(xiàn)象,可以提高數(shù)據(jù)的比對效率。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進。
進一步地,步驟2中,具體包括:
步驟2.1,在所述海量數(shù)據(jù)文件中選取n個數(shù)值互不相同的數(shù)據(jù),將其數(shù)值作為第一參照數(shù)據(jù);
步驟2.2,將所述第一參照數(shù)據(jù)按從大到小或從小到大的次序依次排列;
步驟2.3,將所述海量數(shù)據(jù)文件中的數(shù)據(jù)依次與所述第一參照數(shù)據(jù)進行比較后分類,分別得到小于最小第一參照數(shù)據(jù)的數(shù)據(jù)集合、大于最大第一參照數(shù)據(jù)的數(shù)據(jù)集合和任意兩個相鄰第一參照數(shù)據(jù)之間的數(shù)據(jù)集合,并將所述海量數(shù)據(jù)文件中與所述第一參照數(shù)據(jù)數(shù)值相同的數(shù)據(jù)放入與所述第一參照數(shù)據(jù)相鄰的前一個數(shù)據(jù)集合,或放入與所述第一參照數(shù)據(jù)相鄰的后一個數(shù)據(jù)集合;
步驟2.4,將分類后得到的數(shù)據(jù)集合保存為文件形式,得到n+1個子數(shù)據(jù)文件。
進一步地,步驟3中,具體包括:
步驟3.1,提取所述子數(shù)據(jù)文件中數(shù)據(jù)的索引字段和屬性字段,并獲取所述數(shù)據(jù)的源文件信息;
步驟3.2,從所述子數(shù)據(jù)文件中選取索引字段互不相同的所有數(shù)據(jù)作為第二參照數(shù)據(jù);
步驟3.3,依次將與所述第二參照數(shù)據(jù)的索引字段相同但源文件信息不同的待比對數(shù)據(jù)的屬性字段與所述第二參照數(shù)據(jù)的屬性字段進行比對,得到比對結(jié)果;
步驟3.4,根據(jù)所述比對結(jié)果,輸出所述待比對數(shù)據(jù)并保存。
進一步地,步驟3中,通過多個比對單元分別對多個所述子數(shù)據(jù)文件進行數(shù)據(jù)的一致性比對。
進一步地,所述比對方法還包括:
步驟4,當(dāng)任一比對單元出現(xiàn)故障時,將當(dāng)前比對單元比對的數(shù)據(jù)發(fā)送給其他比對單元重新進行比對。
本發(fā)明解決上述技術(shù)問題的另一種技術(shù)方案如下:
一種海量數(shù)據(jù)的比對系統(tǒng),包括:
獲取模塊,用于獲取待比對的海量數(shù)據(jù)文件;
排序模塊,用于根據(jù)預(yù)存的快速排序算法對所述海量數(shù)據(jù)文件進行排序處理,得到多個子數(shù)據(jù)文件;
比對模塊,用于對多個所述子數(shù)據(jù)文件進行數(shù)據(jù)的一致性比對。
進一步地,所述排序模塊包括:
第一選取單元,用于在所述海量數(shù)據(jù)文件中選取n個數(shù)值互不相同的數(shù)據(jù),將其數(shù)值作為第一參照數(shù)據(jù);
排序單元,用于將所述第一參照數(shù)據(jù)按從大到小或從小到大的次序依次排列;
分類單元,用于將所述海量數(shù)據(jù)文件中的數(shù)據(jù)依次與所述第一參照數(shù)據(jù)進行比較后分類,分別得到小于最小第一參照數(shù)據(jù)的數(shù)據(jù)集合、大于最大第一參照數(shù)據(jù)的數(shù)據(jù)集合和任意兩個相鄰第一參照數(shù)據(jù)之間的數(shù)據(jù)集合,并將所述海量數(shù)據(jù)文件中與所述第一參照數(shù)據(jù)數(shù)值相同的數(shù)據(jù)放入與所述第一參照數(shù)據(jù)相鄰的前一個數(shù)據(jù)集合,或放入與所述第一參照數(shù)據(jù)相鄰的后一個數(shù)據(jù)集合;
存儲單元,用于將分類后得到的數(shù)據(jù)集合保存為文件形式,得到n+1個子數(shù)據(jù)文件。
進一步地,所述比對模塊包括:
提取單元,用于提取所述子數(shù)據(jù)文件中數(shù)據(jù)的索引字段和屬性字段,并獲取所述數(shù)據(jù)的源文件信息;
第二選取單元,用于從所述子數(shù)據(jù)文件中選取索引字段互不相同的所有數(shù)據(jù)作為第二參照數(shù)據(jù);
比對單元,用于依次將與所述第二參照數(shù)據(jù)的索引字段相同但源文件信息不同的待比對數(shù)據(jù)的屬性字段與所述第二參照數(shù)據(jù)的屬性字段進行比對,得到比對結(jié)果;
輸出單元,用于根據(jù)所述比對結(jié)果,輸出所述待比對數(shù)據(jù)并保存。
進一步地,所述比對模塊具體用于通過多個所述比對單元分別對多個所述子數(shù)據(jù)文件進行數(shù)據(jù)的一致性比對。
進一步地,所述比對系統(tǒng)還包括:
檢測模塊,用于當(dāng)任一比對單元出現(xiàn)故障時,將當(dāng)前比對單元比對的數(shù)據(jù)發(fā)送給其他比對單元重新進行比對。
本發(fā)明附加的方面的優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明實踐了解到。
附圖說明
圖1為本發(fā)明實施例提供的一種海量數(shù)據(jù)的比對方法的流程示意圖;
圖2為本發(fā)明另一實施例提供的一種海量數(shù)據(jù)的比對方法的流程圖;
圖3為本發(fā)明另一實施例提供的一種海量數(shù)據(jù)的比對系統(tǒng)的結(jié)構(gòu)圖;
圖4為本發(fā)明如圖3所示的實施例中提供的一種比對模塊結(jié)構(gòu)示意圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
如圖1所示,為本發(fā)明實施例提供的一種海量數(shù)據(jù)的比對方法的流程示意圖,該方法包括以下步驟:
s101,獲取待比對的海量數(shù)據(jù)文件;
s102,根據(jù)預(yù)存的快速排序算法對海量數(shù)據(jù)文件進行排序處理,得到多個子數(shù)據(jù)文件;
s103,對多個子數(shù)據(jù)文件進行數(shù)據(jù)的一致性比對。
上述實施例提供的一種海量數(shù)據(jù)的比對方法,通過將海量數(shù)據(jù)文件分成多個子數(shù)據(jù)文件,分別對多個子數(shù)據(jù)文件進行比對,有效的解決了目前單一機器i/o有限,無法進行多線程比對的現(xiàn)象,可以提高數(shù)據(jù)的比對效率。
在另一實施例中,如圖2所示,為本發(fā)明另一實施例提供的一種海量數(shù)據(jù)的比對方法的流程圖,該方法包括以下步驟:
s201,獲取待比對的數(shù)據(jù)文件a和b;
s202,從數(shù)據(jù)文件a和b中共選取100個數(shù)值互不相同的數(shù)據(jù),將這100個數(shù)值互不相同數(shù)據(jù)的數(shù)值作為參照數(shù)據(jù),需要說明的是,具體選取多少個參照數(shù)據(jù),可以根據(jù)實際需求確定,不是固定的數(shù)值,這里選取100個參照數(shù)據(jù),只是為了便于對本實施例進行說明,不是參照數(shù)據(jù)必須選擇的數(shù)量;
s203,將這100個數(shù)據(jù)按從小到大的次序依次排列;
s204,將數(shù)據(jù)文件a和b中的數(shù)據(jù)分別與這100個參照數(shù)據(jù)比較大小,將數(shù)據(jù)文件a和數(shù)據(jù)文件b中的全部數(shù)據(jù)分成101份,在這里以一個簡化的例子為例進行說明,例如,需要比對的數(shù)據(jù)文件a中有3個數(shù)據(jù),分別是1、1和3,數(shù)據(jù)文件b中有4個數(shù)據(jù),分別是2、3、4和5,那么,可以選取2和4作為參照數(shù)據(jù),其中,參照數(shù)據(jù)2來自數(shù)據(jù)文件a,參照數(shù)據(jù)4來自數(shù)據(jù)文件b,那么通過將數(shù)據(jù)文件a和b中的數(shù)據(jù)1、1、2、3、3、4和5分別與參照數(shù)據(jù)2和4比較,可以得到3個數(shù)據(jù)集合,分別是小于2的數(shù)據(jù)集合[1,1],大于2小于4的數(shù)據(jù)集合[3,3],以及大于4的數(shù)據(jù)集合[5],再將與參照數(shù)據(jù)2和4數(shù)值相同的數(shù)據(jù)2和4分別放入與其相鄰的前一個數(shù)據(jù)集合中,即將數(shù)據(jù)2放入小于2的數(shù)據(jù)集合中,將數(shù)據(jù)4放入大于2小于4的數(shù)據(jù)集合中,得到最終的數(shù)據(jù)集合[1,1,2]、[3,3,4]和[5],這樣就完成了數(shù)據(jù)文件a和b的拆分,在這個簡化的例子中,還可以選擇來自數(shù)據(jù)文件b的數(shù)據(jù)5作為參照數(shù)據(jù),那么大于參照數(shù)據(jù)5的數(shù)據(jù)集合就是空集;
s205,將分類后得到的這101個數(shù)據(jù)集合保存為文件形式,得到101個子數(shù)據(jù)文件;
s206,提取子數(shù)據(jù)文件中數(shù)據(jù)的索引字段和屬性字段,并獲取數(shù)據(jù)的源文件信息,其中,索引字段記錄了數(shù)據(jù)的索引信息,屬性字段記錄了數(shù)據(jù)本體,數(shù)據(jù)的源文件信息指的是數(shù)據(jù)的來源,在本實施例中,數(shù)據(jù)的來源就是數(shù)據(jù)文件a或數(shù)據(jù)文件b,例如,在數(shù)據(jù)文件a中的數(shù)據(jù)形式可以為<index2,2014070512435,a>,在數(shù)據(jù)文件b中的數(shù)據(jù)形式可以為<index2,2014070512435,b>,其中,這兩條數(shù)據(jù)的index2就是索引字段,2014070512435就是屬性字段,a表示其來源文件是數(shù)據(jù)文件a,b表示其來源文件是數(shù)據(jù)文件b;
s207,分別從這101個子數(shù)據(jù)文件中選取比對數(shù)據(jù),在每個子數(shù)據(jù)文件中,選擇的比對數(shù)據(jù)的索引字段互不相同,在這里以一個簡化的例子為例進行說明,例如,子數(shù)據(jù)文件1中有2個數(shù)據(jù),分別是<index2,5,a>和<index2,5,b>,子數(shù)據(jù)文件2中有4個數(shù)據(jù),分別是<index2,6,a>、<index2,6,b>、<index3,6,a>和<index3,6,b>,那么,在子數(shù)據(jù)文件1中,可以選擇<index2,5,a>或<index2,5,b>作為比對數(shù)據(jù),在子數(shù)據(jù)文件2中,可以選擇<index2,6,a>和<index3,6,a>作為比對數(shù)據(jù),或選擇<index2,6,a>和<index3,6,b>作為比對數(shù)據(jù),或選擇<index2,6,b>和<index3,6,a>作為比對數(shù)據(jù),或選擇<index2,6,b>和<index3,6,b>作為比對數(shù)據(jù),不能只選擇一個數(shù)據(jù)作為比對數(shù)據(jù),例如,只選擇<index2,6,a>作為比對數(shù)據(jù),會造成索引字段為index3的數(shù)據(jù)無法比對,同時,也不能選擇<index2,6,a>和<index2,6,b>作為比對數(shù)據(jù),因為其索引字段相同,都是index2,如果選擇了,同樣會造成索引字段為index3的數(shù)據(jù)無法比對,也就是說,在任一子數(shù)據(jù)文件中,比對數(shù)據(jù)的索引字段都是彼此不同的;
s208,依次將各子數(shù)據(jù)文件中,與選擇的比對數(shù)據(jù)索引字段相同,但是來源文件不同的數(shù)據(jù)進行比對,得到比對結(jié)果,比較的內(nèi)容是兩條數(shù)據(jù)的屬性字段是否相同,例如,可以將<index2,5,a>和<index2,5,b>進行比較,發(fā)現(xiàn)二者的屬性字段相同,數(shù)值都是5,則得到比對結(jié)果,這兩條數(shù)據(jù)記錄相同;
s209,將得到的比對結(jié)果進行輸出,比對結(jié)果為兩條數(shù)據(jù)相同的,輸出到一個單獨的文件夾內(nèi),比對結(jié)果為兩條數(shù)據(jù)屬性字段不同,則將這兩條數(shù)據(jù)記錄輸出到另一個單獨的文件夾內(nèi)。
在另一實施例中,給出當(dāng)需要比對的數(shù)據(jù)文件為多個時數(shù)據(jù)的比對方法。
以圖2所示的比對方法為例,當(dāng)需要比對的數(shù)據(jù)文件為多個時,在將各數(shù)據(jù)文件排序劃分為多個子數(shù)據(jù)文件后,將來自不同數(shù)據(jù)文件的數(shù)據(jù),依次與比對數(shù)據(jù)進行比對。
在另一實施例中,如圖3所示,為本發(fā)明另一實施例提供的一種海量數(shù)據(jù)的比對系統(tǒng)的結(jié)構(gòu)圖,該系統(tǒng)包括:
獲取模塊310,用于獲取待比對的海量數(shù)據(jù)文件;
排序模塊320,用于根據(jù)預(yù)存的快速排序算法對海量數(shù)據(jù)文件進行排序處理,得到多個子數(shù)據(jù)文件;
比對模塊330,用于對多個子數(shù)據(jù)文件進行數(shù)據(jù)的一致性比對。
優(yōu)選地,排序模塊320包括:
第一選取單元321,用于在海量數(shù)據(jù)文件中選取n個數(shù)值互不相同的數(shù)據(jù),將其數(shù)值作為第一參照數(shù)據(jù);
排序單元322,用于將第一參照數(shù)據(jù)按從大到小或從小到大的次序依次排列;
分類單元323,用于將海量數(shù)據(jù)文件中的數(shù)據(jù)依次與第一參照數(shù)據(jù)進行比較后分類,分別得到小于最小第一參照數(shù)據(jù)的數(shù)據(jù)集合、大于最大第一參照數(shù)據(jù)的數(shù)據(jù)集合和任意兩個相鄰第一參照數(shù)據(jù)之間的數(shù)據(jù)集合,并將海量數(shù)據(jù)文件中與第一參照數(shù)據(jù)數(shù)值相同的數(shù)據(jù)放入與第一參照數(shù)據(jù)相鄰的前一個數(shù)據(jù)集合,或放入與第一參照數(shù)據(jù)相鄰的后一個數(shù)據(jù)集合;
存儲單元324,用于將分類后得到的數(shù)據(jù)集合保存為文件形式,得到n+1個子數(shù)據(jù)文件。
優(yōu)選地,比對模塊330包括:
提取單元331,用于提取子數(shù)據(jù)文件中數(shù)據(jù)的索引字段和屬性字段,并獲取數(shù)據(jù)的源文件信息;
第二選取單元332,用于從子數(shù)據(jù)文件中選取至少一個數(shù)據(jù)作為第二參照數(shù)據(jù),當(dāng)?shù)诙⒄諗?shù)據(jù)為多個時,多個第二參照數(shù)據(jù)的索引字段互不相同;
比對單元333,用于依次將與第二參照數(shù)據(jù)的索引字段相同但源文件信息不同的待比對數(shù)據(jù)的屬性字段與第二參照數(shù)據(jù)的屬性字段進行比對,得到比對結(jié)果;
輸出單元334,用于根據(jù)比對結(jié)果,輸出待比對數(shù)據(jù)并保存。
優(yōu)選地,如圖4所示,比對模塊330具體用于通過多個比對單元333分別對多個子數(shù)據(jù)文件進行數(shù)據(jù)的一致性比對。
優(yōu)選地,比對系統(tǒng)還包括:
檢測模塊340,用于當(dāng)任一比對單元333出現(xiàn)故障時,將當(dāng)前比對單元333比對的數(shù)據(jù)發(fā)送給其他比對單元333重新進行比對。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為了描述的方便和簡潔,上述描述的裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的系統(tǒng)實施例僅僅是示意性的,例如,模塊的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個模塊或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另外,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口、裝置或單元的間接耦合或通信連接,也可以是電的,機械的或其它的形式連接。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。