專利名稱:一種數(shù)據(jù)標識方法及系統(tǒng)的制作方法
技術領域:
本申請涉及數(shù)據(jù)處理領域,特別涉及一種數(shù)據(jù)標識方法及系統(tǒng)。
背景技術:
在很多行業(yè)諸如銀行、電信和互聯(lián)網行業(yè)中需要進行海量數(shù)據(jù)的處理。在海量數(shù)據(jù)中,不可避免的出現(xiàn)數(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ù)據(jù),如果是,將待去重數(shù)據(jù)標識為重復數(shù)據(jù);然后,判斷是否還存在未查重的數(shù)據(jù),如果是,對還未去重的數(shù)據(jù)進行去重,如果否,結束去重過程。但是,上述數(shù)據(jù)標識過程需要獲取所有去重文件以及其內的已去重數(shù)據(jù),因此,在標識任一待去重數(shù)據(jù)時,需要獲取全部去重文件,然后將待去重數(shù)據(jù)與去重文件中的全部已去重數(shù)據(jù)進行判斷,從而降低了去重效率,更進一步地,如果后續(xù)還需要對該去重文件中的數(shù)據(jù)進行分析,也會因為去重效率低而延遲分析過程。
發(fā)明內容
本申請所要解決的技術問題是提供一種數(shù)據(jù)標識方法,用以解決現(xiàn)有技術對任一待去重數(shù)據(jù)標識時,都需要獲取全部去重文件和文件中的全部已去重數(shù)據(jù),從而在去重過程中需要將去重數(shù)據(jù)與去重文件中的全部已去重數(shù)據(jù)進行判斷,從而降低了去重效率,更進一步地,導致因去重效率低延遲分析過程的問題。本申請還提供了一種數(shù)據(jù)標識系統(tǒng),用以保證上述方法在實際中的實現(xiàn)及應用。為了解決上述問題,本申請?zhí)峁┝艘环N數(shù)據(jù)標識方法,包括從待去重數(shù)據(jù)中提取匹配字段,并對所述待去重數(shù)據(jù)包括的關鍵字段進行計算,獲得所述關鍵字段的散列值;獲取與所述匹配字段相對應的去重文件;依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù);判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同,如果是,將所述待去重數(shù)據(jù)標識為重復數(shù)據(jù)。優(yōu)選地,所述去重文件中的已去重數(shù)據(jù)映射到內存中,且每條已去重數(shù)據(jù)在所述內存中分段保存;所述依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù)包括獲取所述散列值對應的散列鏈表地址,以定位所述去重文件映射到內存中的第一條已去重數(shù)據(jù);對于散列鏈表中除第一條去重數(shù)據(jù)之外的任意一條已去重數(shù)據(jù),獲取自身在所述內存中的段序號和段內偏移量以定位自身在所述內存中的位置。
優(yōu)選地,獲取所述散列值對應的散列鏈表地址包括獲取所述散列值在索引表中的位置idx,位置idx = HASH_VALUE% BUCKE_NUM,其中,HASH_VALUE為所述散列值,BUCKE_NUM為索引表的最大記錄數(shù),所述索引表用于保存所有散列鏈表的第一條已去重數(shù)據(jù);獲取索引表的首地址ADDR,在內存ADDR+idx中存儲的即是散列鏈表中的第一條
已去重數(shù)據(jù)。優(yōu)選地,獲取下一條已去重數(shù)據(jù)在所述內存中的段序號和段內偏移量包括獲取當前已去重數(shù)據(jù)在內存中的完整記錄,所述當前已去重數(shù)據(jù)記錄包括下一條已去重數(shù)據(jù)在所述內存中的地址NEXT ;依據(jù)所述下一條已去重數(shù)據(jù)在所述內存中的地址NEXT和所述內存的大小MMDB_ SEGSIZE,獲取所述下一條已去重數(shù)據(jù)在所述內存中的段序號和段內偏移量,所述段序號為 NEXT/MMDB_SEGSIZE,所述段內偏移量為 NEXT% MMDB_SEGSIZE。優(yōu)選地,在所述定位所述去重文件中的已去重數(shù)據(jù)之后,判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同之前,還包括在所述內存中未獲取到定位的已去重數(shù)據(jù)的情況下,在所述去重文件中查找該已去重數(shù)據(jù),并將該已去重數(shù)據(jù)映射到內存中。優(yōu)選地,判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同包括判斷所述待去重數(shù)據(jù)對應的關鍵字段的反向字段的散列值和所述已去重數(shù)據(jù)在內存中記錄的散列值是否相同。優(yōu)選地,所述對所述待去重數(shù)據(jù)包括的關鍵字段進行計算包括采用循環(huán)冗余碼校驗CRC32碼或第五代信息摘要MD5碼,對所述關鍵字段進行計算。本申請還提供了一種數(shù)據(jù)標識系統(tǒng),該系統(tǒng)包括字段獲取模塊,用于從待去重數(shù)據(jù)中提取匹配字段,并對所述待去重數(shù)據(jù)包括的關鍵字段進行計算,獲得所述關鍵字段的散列值;文件獲取模塊,用于獲取與所述匹配字段相對應的去重文件;定位模塊,用于依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù);判斷模塊,用于判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同;標識模塊,用于在所述判斷模塊判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)相同時, 將所述待去重數(shù)據(jù)標識為重復數(shù)據(jù)。優(yōu)選地,所述去重文件中的已去重數(shù)據(jù)映射到內存中,且每條已去重數(shù)據(jù)在所述內存中分段保存;所述定位模塊包括第一定位單元,用于獲取所述散列值對應的散列鏈表地址,以定位所述去重文件映射到內存中的第一條已去重數(shù)據(jù);第二定位單元,用于對于所述散列鏈表中除第一條去重數(shù)據(jù)之外的任意一條已去重數(shù)據(jù),獲取自身在所述內存中的段序號和段內偏移量以定位自身在所述內存中的位置。優(yōu)選地,所述第一定位單元包括第一獲取子單元,用于獲取所述散列值在索引表中的位置idx,位置idx = HASH_ VALUE % BUCKE_NUM,其中,HASH_VALUE為所述散列值,BUCKE_NUM為索引表的最大記錄數(shù),所述索引表用于保存所有散列鏈表的第一個元素;第二獲取子單元,用于獲取索引表的首地址ADDR,在ADDR+idx處存儲的便是散列鏈表中的第一條已去重數(shù)據(jù)。優(yōu)選地,所述第二定位單元包括第三獲取子單元,用于獲取當前已去重數(shù)據(jù)在內存中的完整記錄,所述當前已去重數(shù)據(jù)記錄包括下一條已去重數(shù)據(jù)在所述內存中的地址NEXT ;第四獲取子單元,用于依據(jù)所述下一條已去重數(shù)據(jù)在所述內存中的地址NEXT和所述內存的大小MMDB_SEGSIZE,獲取所述下一條已去重數(shù)據(jù)在所述內存中的段序號和段內偏移量,所述段序號為NEXT/MMDB_SEGSIZE,所述段內偏移量為NEXT% MMDB_SEGSIZE。優(yōu)選地,還包括映射模塊,用于在所述內存中未獲取到需要定位的已去重數(shù)據(jù)的情況下,在所述去重文件中查找該已去重數(shù)據(jù),并將該已去重數(shù)據(jù)所在的數(shù)據(jù)段映射到內存中。優(yōu)選地,所述判斷模塊具體用于判斷所述待去重數(shù)據(jù)對應的關鍵字段的反向字段的散列值和所述已去重數(shù)據(jù)在內存中記錄的散列值是否相同。優(yōu)選地,所述字段獲取模塊具體用于采用CRC32碼或MD5碼,對所述關鍵字段進行計算。與現(xiàn)有技術相比,本申請包括以下優(yōu)點在本申請中,首先獲取與所述待去重數(shù)據(jù)中的匹配字段相對應的去重文件,再依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù),因此,在對每個待去重數(shù)據(jù)標識時,可以獲取與所述待去重數(shù)據(jù)相關的去重文件中的已去重數(shù)據(jù),從而減少了獲取的已去重數(shù)據(jù)的數(shù)量,即減少了判斷次數(shù),提高了去重效率。進一步地,如果后續(xù)系統(tǒng)需要對該去重文件中的數(shù)據(jù)進行分析,也會因為去重效率提高而加快分析過程。
為了更清楚地說明本申請實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I為本申請的一種數(shù)據(jù)標識方法的一種流程圖;圖2為本申請的一種數(shù)據(jù)標識方法的子流程圖;圖3為本申請的一種數(shù)據(jù)標識系統(tǒng)的一種結構框圖;圖4為本申請的一種數(shù)據(jù)標識系統(tǒng)中定位模塊的結構框圖。
具體實施例方式下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。本申請可用于眾多通用或專用的計算系統(tǒng)環(huán)境或配置中。例如個人計算機、服務器計算機、手持設備或便攜式設備、平板型設備、多處理器系統(tǒng)、包括以上任何系統(tǒng)或設備的分布式計算環(huán)境等等。本申請可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務或實現(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結構等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網絡而被連接的遠程處理設備來執(zhí)行任務。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設備在內的本地和遠程計算機存儲介質中。本申請的主要思想之一可以包括,首先,獲取與所述待去重數(shù)據(jù)中的匹配字段相對應的去重文件,其次,依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù),然后,再判斷待去重數(shù)據(jù)和已去重數(shù)據(jù)是否相同,如果存在某條已去重數(shù)據(jù)和待去重數(shù)據(jù)相同,則將待去重數(shù)據(jù)標識為重復數(shù)據(jù)。如果不存在,則將所述待去重數(shù)據(jù)的散列值保存到去重文件中。 因此,在對每個待去重數(shù)據(jù)進行重復標識時,可以根據(jù)實際需要僅獲取與所述待去重數(shù)據(jù)相關的去重文件中的已去重數(shù)據(jù),從而減少了獲取的已去重數(shù)據(jù)的數(shù)量,即減少了判斷次數(shù),提高了去重效率。進一步地,如果后續(xù)系統(tǒng)需要對該去重文件中的數(shù)據(jù)進行分析,也會因為去重效率提高而加快分析過程。參考圖1,其示出了本申請一種多維度數(shù)據(jù)標識方法實施例I的一種流程圖,可以包括以下步驟SlOl :從待去重數(shù)據(jù)中提取匹配字段,并對所述待去重數(shù)據(jù)包括的關鍵字段進行計算,獲得所述關鍵字段的散列值。其中,從不同的待去重數(shù)據(jù)所提取的匹配字段可以相同或不同。從同一個待去重數(shù)據(jù)所提取匹配字段在不同應用場景下也可以相同或不同。例如待去重數(shù)據(jù)為一通話記錄,該通話記錄包括主叫號碼13828443789,被叫號碼13926262408,通話時間 20110618121314,呼叫類型01,代表主叫,一次通話標志100000001,則其對應的匹配字段可以為通話時間2011061812,也可以為主叫號碼13828443789,還可以為通話時間范圍 0601 至 0630。在本實施例中,通話記錄中的主叫號碼13828443789,被叫號碼13926262408,通話時間20110618121314,呼叫類型01和一次通話標志100000001組成關鍵字段138284437 89139262624082011061812131401100000001,對所述關鍵字段計算獲得散列值可以通過采用 CRC(Cyclic redundancy check,循環(huán)冗余校驗)32 碼或MD5 (Message-Digest 5,第五代信息摘要)碼,對關鍵字段進行計算,獲得所述關鍵字段的散列值。S102 :獲取與所述匹配字段相對應的去重文件。在匹配字段為通話時間2011061812時,其對應的去重文件應該為通話時間為 2011061812的去重文件,其中去重文件需要按照通話時間保存數(shù)據(jù)。在匹配字段為主叫號碼13828443789時,其對應的去重文件應該為主叫號碼13828443789的去重文件,其中去重文件需要按照主叫號碼保存數(shù)據(jù)。在本實施例中,使用MMAP函數(shù)將去重文件中的已去重數(shù)據(jù)映射到內存中,且每條已去重數(shù)據(jù)在所述內存中分段保存。因為MMAP函數(shù)能夠實現(xiàn)帶緩存的讀寫,可以減少系統(tǒng) IOdnput/Output,輸入/輸出)的操作,提高系統(tǒng)處理效率。同時,使用分段方法保存數(shù)據(jù), 可以以段為單位管理內存,簡化內存的管理,并提高內存的使用率。
7
需要說明的是系統(tǒng)可以根據(jù)不同的需求,使用MMAP函數(shù)將所需要的已去重數(shù)據(jù)映射到內存中,從而提高文件映射的效率,減少內存的使用。上述去重文件的文件結構分三大部分,第一部分是文件頭,第二部分是索引區(qū),第三部分數(shù)據(jù)區(qū)。其中文件頭存儲控制信息,如標識操作文件的當前指針位置,文件操作過程中出現(xiàn)異常,需要利用文件頭的信息進行回滾。索引區(qū)用于存儲所有散列鏈表的第一個元素。數(shù)據(jù)區(qū)存儲數(shù)據(jù),每一條數(shù)據(jù)由16個字節(jié)表示,8個字節(jié)存儲指向下一條記錄位置的指針,8個字節(jié)存儲數(shù)據(jù)關鍵值。關鍵值可以是數(shù)據(jù)的關鍵字段的散列值,也可以是關鍵字段的反向字段的散列值。由于反向字段的散列值可以進一步提高查重的準確性,并有效節(jié)省存儲空間,所以,本實施例優(yōu)選反向字段的散列值。S103 :依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù)。上述步驟S103的流程圖請參閱圖2,其可以包括以下步驟S1031 :獲取所述散列值對應的散列鏈表地址,以定位所述去重文件映射到內存中的第一條已去重數(shù)據(jù)。本步驟具體為首先,獲取散列值在索引表中的位置idx,位置idx = HASH_ VALUE % BUCKE_NUM,其中,HASH_VALUE為所述散列值,BUCKE_NUM為索引表的最大記錄數(shù); 其次,獲取索引表的首地址ADDR,則所述散列鏈表地址為ADDR+idx。在內存中ADDR+idx處存儲的即是去重文件中的第一條已去重數(shù)據(jù)。例如關鍵字段13828443789139262624082011061812131401100000001 的散列值為290000,索引表的最大記錄數(shù)為40000,該散列值在索引表中的位置idx即為290000% 40000 = 10000,則定位到索引表中的第10000散列鏈表,其內存儲的即為去重文件中的第
一條已去重數(shù)據(jù)。S1032:對于散列鏈表中除第一條去重數(shù)據(jù)之外的任意一條已去重數(shù)據(jù),獲取自身在所述內存中的段序號和段內偏移量以定位自身在所述內存中的位置。具體可以包括S10321 :獲取當前已去重數(shù)據(jù)在內存中的完整記錄,所述當前已去重數(shù)據(jù)的記錄中包括下一條已去重數(shù)據(jù)在所述內存中的地址NEXT。S10322 :依據(jù)所述下一條已去重數(shù)據(jù)在所述內存中的地址NEXT和所述內存的大小MMDB_SEGSIZE,獲取所述下一條已去重數(shù)據(jù)在所述內存中的段序號和段內偏移量,所述段序號為NEXT/MMDB_SEGSIZE,所述段內偏移量為NEXT% MMDB_SEGSIZE。在實際執(zhí)行過程中,步驟S1031中通過獲取散列值對應的散列鏈表地址定位第一條已去重數(shù)據(jù),則在第一次過程執(zhí)行中,將第一條已去重數(shù)據(jù)作為當前已去重數(shù)據(jù),當前已去重數(shù)據(jù)的完整記錄中包括下一條已去重數(shù)據(jù),即第二條已去重數(shù)據(jù)在內存中的地址 NEXT,則第二條已去重數(shù)據(jù)的段序號和段內偏移量可以通過自身在內存中的地址NEXT和內存的大小MMDB_SEGSIZE得出。同樣,在第i次過程執(zhí)行中,將第i條已去重數(shù)據(jù)作為當前已去重數(shù)據(jù),當前已去重數(shù)據(jù)的完整記錄中包括下一條已去重數(shù)據(jù),即第i+Ι條已去重數(shù)據(jù)在內存中的地址 NEXT,則第i+Ι條已去重數(shù)據(jù)的段序號和段內偏移量可以通過自身在內存中的地址NEXT和內存的大小MMDB_SEGSIZE得出,其中,i為整數(shù),且i彡I。S104:讀取散列鏈表中的每個元素判斷所述待去重數(shù)據(jù)和所述散列鏈表中的已去重數(shù)據(jù)是否相同,如果是,執(zhí)行步驟S105,如果否,則繼續(xù)讀取下一個元素,直到遍歷完所有的元素為止。如果最終沒有任何一條已去重的數(shù)據(jù)和待去重的數(shù)據(jù)相同,則執(zhí)行步驟S106。在本實施例中,散列鏈表中還包括與自身對應的已去重數(shù)據(jù)的關鍵值,該關鍵值可以為已去重數(shù)據(jù)的關鍵字段的散列值,也可以為已去重數(shù)據(jù)的關鍵字段的反向字段的散列值。由于反向字段的散列值可以進一步提高查重的準確性,并有效節(jié)省存儲空間,所以, 本實施例優(yōu)選反向字段的散列值。判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同可以包括判斷所述待去重數(shù)據(jù)關鍵字段的反向字段的散列值和散列鏈表中的關鍵值是否相同,其中散列鏈表中的關鍵值為已去重數(shù)據(jù)的關鍵字段的反向字段的散列值。例如關鍵字段13828443789139262624082011061812131401100000001 的反向字符的散列值為345123,從第10000散列鏈表中獲取其內存儲的關鍵值。判斷關鍵值是否等于散列值345123,如果是,則表明待去重數(shù)據(jù)和已去重數(shù)據(jù)相同;如果否,則表明待去重數(shù)據(jù)和已去重數(shù)據(jù)不同,則獲取散列鏈表中的下一個元素進行判斷,直至遍歷完散列鏈表中的所有元素為止。S105 :將所述待去重數(shù)據(jù)標識為重復數(shù)據(jù)。S106:在待去重數(shù)據(jù)和散列鏈表中的所有已去重數(shù)據(jù)都不相同時,則保留待去重數(shù)據(jù)。其中,保留待去重數(shù)據(jù)優(yōu)選保留待去重數(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ù)為系統(tǒng)去重開始之前內存所存儲的數(shù)據(jù)。應用上述技術方案,首先獲取與所述待去重數(shù)據(jù)中的匹配字段相對應的去重文件,再依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù),因此,在對每個待去重數(shù)據(jù)標識時,可以根據(jù)實際需要獲取與所述待去重數(shù)據(jù)相關的去重文件中的已去重數(shù)據(jù),從而減少了獲取的已去重數(shù)據(jù)的數(shù)量,即減少了判斷次數(shù),提高了去重效率。進一步地,如果后續(xù)系統(tǒng)需要對該去重文件中的數(shù)據(jù)進行分析,也會因為去重效率提高而加快分析過程。更進一步地,系統(tǒng)可以根據(jù)不同的需求,使用MMAP函數(shù)將所需要的已去重數(shù)據(jù)映射到內存中,從而提高文件映射的效率,減少內存的使用。去重文件的數(shù)據(jù)區(qū)存儲反向字段的散列值,減少了內存占用。此外,因為反向字段的散列值為一個長整型數(shù)值,所以可以避免關鍵字段的長度不一致而導致的內存長度不同的問題,大大簡化內存管理。而通過反向字段的散列值判斷待去重數(shù)據(jù)和已去重數(shù)據(jù)是否相同,可以提高去重準確率。與上述方法實施例相對應,參見圖3,本申請還提供了一種數(shù)據(jù)標識系統(tǒng)實施例, 在本實施例中,該系統(tǒng)可以包括字段獲取模塊31、文件獲取模塊32、定位模塊33、判斷模塊34和標識模塊35。在本實施例中,字段獲取模塊31,用于從待去重數(shù)據(jù)中提取匹配字段,并對待去重數(shù)據(jù)包括的關鍵字段進行計算,獲得關鍵字段的散列值。其中,匹配字段和關鍵字段的描述請參閱方法實施例中說明,對此不再加以介紹。
上述字段獲取模塊31具體用于采用CRC32碼或MD5碼,對關鍵字段進行計算,獲得所述關鍵字段的散列值。文件獲取模塊32,用于獲取與所述匹配字段相對應的去重文件。在本實施例中,使用MMAP函數(shù)將去重文件中的已去重數(shù)據(jù)映射到內存中,且每條已去重數(shù)據(jù)在所述內存中分段保存。因為MMAP函數(shù)能夠實現(xiàn)帶緩存的讀寫,可以減少系統(tǒng) IOdnput/Output,輸入/輸出)的操作,提高系統(tǒng)處理效率。同時,使用分段方法保存數(shù)據(jù), 可以以段為單位管理內存,簡化內存的管理,并提高內存的使用率。需要說明的是系統(tǒng)可以根據(jù)不同的需求,使用MMAP函數(shù)將所需要的已去重數(shù)據(jù)映射到內存中,從而提高文件映射的效率,減少內存的使用。上述去重文件的文件結構分三大部分,第一部分是文件頭,第二部分是索引區(qū),第三部分數(shù)據(jù)區(qū)。其中文件頭存儲控制信息,如標識操作文件的當前指針位置,文件操作過程中出現(xiàn)異常,需要利用文件頭的信息進行回滾。索引區(qū)用于存儲所有散列鏈表的第一個元素。數(shù)據(jù)區(qū)存儲數(shù)據(jù),每一條數(shù)據(jù)由16個字節(jié)表示,8個字節(jié)存儲指向下一條記錄位置的指針,8個字節(jié)存儲數(shù)據(jù)關鍵值。關鍵值可以是數(shù)據(jù)的關鍵字段的散列值,也可以是關鍵字段的反向字段的散列值。由于反向字段的散列值可以進一步提高數(shù)據(jù)重標識的準確性,并有效節(jié)省存儲空間,所以,本實施例優(yōu)選反向字段的散列值。定位模塊33,用于依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù)。定位模塊 33的結構框圖請參閱圖4,包括第一定位單元331和第二定位單元332。其中,第一定位單元331,用于獲取所述散列值對應的散列鏈表地址,以定位所述散列鏈表中的第一條已去重數(shù)據(jù)。在本實施例中,第一定位單元331可以包括第一獲取子單元3311和第二獲取子單元3312,如圖4所示。其中,第一獲取子單元3311用于獲取所述散列值在索引表中的位置 idx,位置 idx = HASH_VALUE% BUCKE_NUM,其中,HASH_VALUE 為所述散列值,BUCKE_NUM 為索引表的最大記錄數(shù)。第二獲取子單元3312,用于獲取索引表的首地址ADDR,則所述散列鏈表地址為ADDR+idx。在內存中ADDR+idx處存儲的即是去重文件中的第一條已去重數(shù)據(jù)。第二定位單元332,用于對于所述散列鏈表中除第一條去重數(shù)據(jù)之外的任意一條已去重數(shù)據(jù),獲取自身在所述內存中的段序號和段內偏移量以定位自身在所述內存中的位置。第二定位單元332包括第三獲取子單元3321和第四獲取子單元3322。第三獲取子單元3321,用于獲取所述當前已去重數(shù)據(jù),所述當前已去重數(shù)據(jù)的完整記錄中包括下一條已去重數(shù)據(jù)在所述內存中的地址NEXT。第四獲取子單元3322,用于依據(jù)所述下一條已去重數(shù)據(jù)在所述內存中的地址 NEXT和所述內存的大小MMDB_SEGSIZE,獲取所述下一條已去重數(shù)據(jù)在所述內存中的段序號和段內偏移量,所述段序號為NEXT/MMDB_SEGSIZE,所述段內偏移量為NEXT% MMDB_ SEGSIZEο判斷模塊34,用于判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同。其具體用于判斷所述待去重數(shù)據(jù)對應的關鍵字段的反向字段的散列值和所述已去重數(shù)據(jù)在內存中記錄的散列值是否相同。標識模塊35,用于在所述判斷模塊判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)相同時,將所述待去重數(shù)據(jù)標識為重復數(shù)據(jù)。需要注意的是圖3所示的數(shù)據(jù)標識系統(tǒng)還可以包括映射模塊,用于在所述內存中未獲取到定位的已去重數(shù)據(jù)的情況下,在所述去重文件中查找該已去重數(shù)據(jù),并將該已去重數(shù)據(jù)映射到內存中。需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。 對于系統(tǒng)類實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。最后,還需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或
者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個......”限定的要素,
并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。為了描述的方便,描述以上系統(tǒng)時以功能分為各種單元分別描述。當然,在實施本申請時可以把各單元的功能在同一個或多個軟件和/或硬件中實現(xiàn)。通過以上的實施方式的描述可知,本領域的技術人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)。基于這樣的理解,本申請的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產品的形式體現(xiàn)出來,該計算機軟件產品可以存儲在存儲介質中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備 (可以是個人計算機,服務器,或者網絡設備等)執(zhí)行本申請各個實施例或者實施例的某些部分所述的方法。以上對本申請所提供的一種數(shù)據(jù)標識方法及系統(tǒng)進行了詳細介紹,本文中應用具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領域的一般技術人員,依據(jù)本申請的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本申請的限制。
權利要求
1.一種數(shù)據(jù)標識方法,其特征在于,包括從待去重數(shù)據(jù)中提取匹配字段,并對所述待去重數(shù)據(jù)包括的關鍵字段進行計算,獲得所述關鍵字段的散列值;獲取與所述匹配字段相對應的去重文件;依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù);判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同,如果是,將所述待去重數(shù)據(jù)標識為重復數(shù)據(jù)。
2.根據(jù)權利要求I所述的數(shù)據(jù)標識方法,其特征在于,所述去重文件中的已去重數(shù)據(jù)映射到內存中,且每條已去重數(shù)據(jù)在所述內存中分段保存;所述依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù)包括獲取所述散列值對應的散列鏈表地址,以定位所述去重文件映射到內存中的第一條已去重數(shù)據(jù);對于散列鏈表中除第一條去重數(shù)據(jù)之外的任意一條已去重數(shù)據(jù),獲取自身在所述內存中的段序號和段內偏移量以定位自身在所述內存中的位置。
3.根據(jù)權利要求2所述的數(shù)據(jù)標識方法,其特征在于,獲取所述散列值對應的散列鏈表地址包括獲取所述散列值在索引表中的位置idx,位置idx = HASH_VALUE% BUCKE_NUM,其中, HASH_VALUE為所述散列值,BUCKE_NUM為索引表的最大記錄數(shù),所述索引表用于保存所有散列鏈表的第一條已去重數(shù)據(jù);獲取索引表的首地址ADDR,在內存ADDR+idx中存儲的即是散列鏈表中的第一條已去重數(shù)據(jù)。
4.根據(jù)權利要求3所述的數(shù)據(jù)標識方法,其特征在于,獲取下一條已去重數(shù)據(jù)在所述內存中的段序號和段內偏移量包括獲取當前已去重數(shù)據(jù)在內存中的完整記錄,所述當前已去重數(shù)據(jù)記錄包括下一條已去重數(shù)據(jù)在所述內存中的地址NEXT ;依據(jù)所述下一條已去重數(shù)據(jù)在所述內存中的地址NEXT和所述內存的大小MMDB_ SEGSIZE,獲取所述下一條已去重數(shù)據(jù)在所述內存中的段序號和段內偏移量,所述段序號為 NEXT/MMDB_SEGSIZE,所述段內偏移量為 NEXT% MMDB_SEGSIZE。
5.根據(jù)權利要求I所述的數(shù)據(jù)標識方法,其特征在于,在所述定位所述去重文件中的已去重數(shù)據(jù)之后,判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同之前,還包括在所述內存中未獲取到定位的已去重數(shù)據(jù)的情況下,在所述去重文件中查找該已去重數(shù)據(jù),并將該已去重數(shù)據(jù)映射到內存中。
6.根據(jù)權利要求I所述的數(shù)據(jù)標識方法,其特征在于,判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同包括判斷所述待去重數(shù)據(jù)對應的關鍵字段的反向字段的散列值和所述已去重數(shù)據(jù)在內存中記錄的散列值是否相同。
7.根據(jù)權利要求I至6所述的數(shù)據(jù)標識方法,其特征在于,所述對所述待去重數(shù)據(jù)包括的關鍵字段進行計算包括采用循環(huán)冗余碼校驗CRC32碼或第五代信息摘要MD5碼,對所述關鍵字段進行計算。
8.一種數(shù)據(jù)標識系統(tǒng),其特征在于,包括字段獲取模塊,用于從待去重數(shù)據(jù)中提取匹配字段,并對所述待去重數(shù)據(jù)包括的關鍵字段進行計算,獲得所述關鍵字段的散列值;文件獲取模塊,用于獲取與所述匹配字段相對應的去重文件;定位模塊,用于依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù);判斷模塊,用于判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同;標識模塊,用于在所述判斷模塊判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)相同時,將所述待去重數(shù)據(jù)標識為重復數(shù)據(jù)。
9.根據(jù)權利要求8所述的數(shù)據(jù)標識系統(tǒng),其特征在于,所述去重文件中的已去重數(shù)據(jù)映射到內存中,且每條已去重數(shù)據(jù)在所述內存中分段保存;所述定位模塊包括第一定位單元,用于獲取所述散列值對應的散列鏈表地址,以定位所述去重文件映射到內存中的第一條已去重數(shù)據(jù);第二定位單元,用于對于所述散列鏈表中除第一條去重數(shù)據(jù)之外的任意一條已去重數(shù)據(jù),獲取自身在所述內存中的段序號和段內偏移量以定位自身在所述內存中的位置。
10.根據(jù)權利要求9所述的數(shù)據(jù)標識系統(tǒng),其特征在于,所述第一定位單元包括第一獲取子單元,用于獲取所述散列值在索引表中的位置idx,位置idx = HASH_ VALUED BUCKE_NUM,其中,HASH_VALUE為所述散列值,BUCKE_NUM為索引表的最大記錄數(shù), 所述索引表用于保存所有散列鏈表的第一個元素;第二獲取子單元,用于獲取索引表的首地址ADDR,在ADDR+idx處存儲的便是散列鏈表中的第一條已去重數(shù)據(jù)。
11.根據(jù)權利要求10所述的數(shù)據(jù)標識系統(tǒng),其特征在于,所述第二定位單元包括第三獲取子單元,用于獲取當前已去重數(shù)據(jù)在內存中的完整記錄,所述當前已去重數(shù)據(jù)記錄包括下一條已去重數(shù)據(jù)在所述內存中的地址NEXT ;第四獲取子單元,用于依據(jù)所述下一條已去重數(shù)據(jù)在所述內存中的地址NEXT和所述內存的大小MMDB_SEGSIZE,獲取所述下一條已去重數(shù)據(jù)在所述內存中的段序號和段內偏移量,所述段序號為NEXT/MMDB_SEGSIZE,所述段內偏移量為NEXT% MMDB_SEGSIZE。
12.根據(jù)權利要求8所述的數(shù)據(jù)標識系統(tǒng),其特征在于,還包括映射模塊,用于在所述內存中未獲取到需要定位的已去重數(shù)據(jù)的情況下,在所述去重文件中查找該已去重數(shù)據(jù), 并將該已去重數(shù)據(jù)所在的數(shù)據(jù)段映射到內存中。
13.根據(jù)權利要求8所述的數(shù)據(jù)標識系統(tǒng),其特征在于,所述判斷模塊具體用于判斷所述待去重數(shù)據(jù)對應的關鍵字段的反向字段的散列值和所述已去重數(shù)據(jù)在內存中記錄的散列值是否相同。
14.根據(jù)權利要求8至13所述的數(shù)據(jù)標識系統(tǒng),其特征在于,所述字段獲取模塊具體用于采用CRC32碼或MD5碼,對所述關鍵字段進行計算。
全文摘要
本申請?zhí)峁┝艘环N數(shù)據(jù)標識方法和系統(tǒng)。一種數(shù)據(jù)標識方法,包括從待去重數(shù)據(jù)中提取匹配字段,并對所述待去重數(shù)據(jù)包括的關鍵字段進行計算,獲得所述關鍵字段的散列值;獲取與所述匹配字段相對應的去重文件;依據(jù)所述散列值,定位所述去重文件中的已去重數(shù)據(jù);判斷所述待去重數(shù)據(jù)和所述已去重數(shù)據(jù)是否相同,如果是,將所述待去重數(shù)據(jù)標識為重復數(shù)據(jù)。因此,在對每個待去重數(shù)據(jù)標識時,可以獲取與所述待去重數(shù)據(jù)相關的去重文件中的已去重數(shù)據(jù),從而減少了獲取的已去重數(shù)據(jù)的數(shù)量,即減少了判斷次數(shù),提高了去重效率。進一步地,如果后續(xù)系統(tǒng)需要對該去重文件中的數(shù)據(jù)進行分析,也會因為去重效率提高而加快分析過程。
文檔編號G06F17/30GK102591855SQ20121001142
公開日2012年7月18日 申請日期2012年1月13日 優(yōu)先權日2012年1月13日
發(fā)明者黃子維 申請人:廣州從興電子開發(fā)有限公司