郭文龍
(福建江夏學(xué)院電子信息科學(xué)學(xué)院,福建 福州 350108)
在各類(lèi)企事業(yè)單位中,由于開(kāi)發(fā)時(shí)間不同,往往存在許多異構(gòu)的運(yùn)行于不同軟硬件平臺(tái)上的信息管理系統(tǒng),由于采用不同的數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù),造成這些系統(tǒng)的數(shù)據(jù)庫(kù)彼此獨(dú)立,各個(gè)數(shù)據(jù)庫(kù)系統(tǒng)之間無(wú)法融合與共享。隨著互聯(lián)網(wǎng)的不斷發(fā)展與普及,企事業(yè)單位間信息交流的需求日益迫切,這就需要把不同數(shù)據(jù)源的異構(gòu)數(shù)據(jù)庫(kù)融合集成起來(lái)。[1]異構(gòu)數(shù)據(jù)庫(kù)集成技術(shù)是指把分布于不同數(shù)據(jù)庫(kù)的數(shù)據(jù)在物理上或者邏輯上進(jìn)行有機(jī)集中,從而為企事業(yè)單位提供數(shù)據(jù)共享的一種技術(shù)。異構(gòu)數(shù)據(jù)庫(kù)是獨(dú)立存在的,每個(gè)獨(dú)立的數(shù)據(jù)庫(kù)都有專(zhuān)屬于自己的數(shù)據(jù)庫(kù)管理系統(tǒng),各個(gè)組成部分完全自治,如果直接把不同數(shù)據(jù)庫(kù)合并形成一個(gè)大型的共用庫(kù)顯然是行不通的,目前可以采用的方式有基于聯(lián)邦式、基于中間件或數(shù)據(jù)倉(cāng)庫(kù)等,其中基于數(shù)據(jù)倉(cāng)庫(kù)的方式是應(yīng)用比較多的一種方法。數(shù)據(jù)倉(cāng)庫(kù)從不同數(shù)據(jù)源抽取所需的數(shù)據(jù)避免重新建設(shè)共用庫(kù)而投入大量的人力、物力和財(cái)力成本,然而集成后的數(shù)據(jù)倉(cāng)庫(kù)產(chǎn)生了大量的臟數(shù)據(jù)和相似重復(fù)數(shù)據(jù),如何消除臟數(shù)據(jù)和清洗相似重復(fù)數(shù)據(jù)就成了一個(gè)亟需解決的問(wèn)題。[2-4]
相似重復(fù)記錄指同一個(gè)現(xiàn)實(shí)世界中的實(shí)體在數(shù)據(jù)庫(kù)中擁有了多條記錄,這些記錄互為相似重復(fù)記錄,相似重復(fù)記錄清洗是指刪除構(gòu)成相似重復(fù)的記錄,只保留一條記錄的過(guò)程。相似重復(fù)記錄最常見(jiàn)的情況有同音字構(gòu)成、格式不一致構(gòu)成、地址采用簡(jiǎn)寫(xiě)構(gòu)成等。如表1所示,記錄1的姓名字段和記錄2的姓名字段構(gòu)成同音字相似,地址字段由于簡(jiǎn)寫(xiě)構(gòu)成相似,而出生日期則因格式不一樣構(gòu)成相似。對(duì)同音字構(gòu)成相似重復(fù)記錄的情況,李星毅等提出組成一個(gè)相似漢字表,供漢字比較時(shí)使用[5];文獻(xiàn) [6]研究了縮寫(xiě)造成的相似重復(fù)情況,也提出建立“相似漢字表”解決部分輸入錯(cuò)誤的問(wèn)題;文獻(xiàn)[7]通過(guò)制定中文地址編碼規(guī)則,利用編碼規(guī)則對(duì)中文地址進(jìn)行編碼,最后再對(duì)其譯碼達(dá)到對(duì)中文地址清洗的目的。而對(duì)格式不一致構(gòu)成的相似重復(fù)記錄則可以通過(guò)設(shè)置統(tǒng)一的格式,在數(shù)據(jù)進(jìn)入數(shù)據(jù)倉(cāng)庫(kù)之前統(tǒng)一轉(zhuǎn)化為規(guī)定的格式,再進(jìn)行清洗記錄。
表1 相似重復(fù)記錄示例表
綜上,構(gòu)成相似重復(fù)記錄的原因各異,在清洗前必須綜合考慮各種情況,提出一種異構(gòu)數(shù)據(jù)庫(kù)集成中相似重復(fù)記錄清洗方法,在異構(gòu)數(shù)據(jù)庫(kù)中首先對(duì)數(shù)據(jù)記錄進(jìn)行初次清洗;之后根據(jù)共享庫(kù)的要求,將符合條件的記錄抽取到臨時(shí)數(shù)據(jù)庫(kù)中,在臨時(shí)數(shù)據(jù)庫(kù)中按照設(shè)置的統(tǒng)一規(guī)范對(duì)數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換;最后把臨時(shí)數(shù)據(jù)庫(kù)的數(shù)據(jù)導(dǎo)入數(shù)據(jù)倉(cāng)庫(kù),在數(shù)據(jù)倉(cāng)庫(kù)中再次對(duì)數(shù)據(jù)記錄進(jìn)行清洗。
異構(gòu)數(shù)據(jù)庫(kù)由于開(kāi)發(fā)時(shí)間不同,各個(gè)數(shù)據(jù)庫(kù)本身存在許多“臟數(shù)據(jù)”,故在集成前有必要先對(duì)自身數(shù)據(jù)庫(kù)進(jìn)行相似重復(fù)記錄初次清洗,初次清洗不僅可以使源數(shù)據(jù)庫(kù)減少冗余度,提高源數(shù)據(jù)庫(kù)的數(shù)據(jù)質(zhì)量,進(jìn)而提高空間利用率、加快查詢(xún)速度及提高決策支持能力等好處,還可以從源頭上消除“臟數(shù)據(jù)”,為數(shù)據(jù)倉(cāng)庫(kù)中相似重復(fù)記錄清洗減輕“負(fù)擔(dān)”。集成時(shí)需將用于共享的數(shù)據(jù)從不同的系統(tǒng)遷移到新的共享數(shù)據(jù)倉(cāng)庫(kù),遷移時(shí)不是原封不動(dòng)的遷移,而是抽取有用的部分?jǐn)?shù)據(jù),由于數(shù)據(jù)來(lái)源于異構(gòu)數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)的創(chuàng)建時(shí)間和所用技術(shù)不一,如果直接把遷移后的數(shù)據(jù)存放于集成的數(shù)據(jù)倉(cāng)庫(kù),會(huì)造成數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)混亂,甚至崩潰。所以數(shù)據(jù)抽取前必須根據(jù)數(shù)據(jù)倉(cāng)庫(kù)存放的軟硬件情況和數(shù)據(jù)庫(kù)技術(shù)協(xié)商制定數(shù)據(jù)格式等規(guī)則,在源數(shù)據(jù)庫(kù)上抽取數(shù)據(jù)后,將抽取出來(lái)的數(shù)據(jù)放在一個(gè)臨時(shí)數(shù)據(jù)庫(kù)中,臨時(shí)數(shù)據(jù)庫(kù)的數(shù)據(jù)再按照設(shè)定的規(guī)則轉(zhuǎn)化為統(tǒng)一的規(guī)范化的數(shù)據(jù)格式,最后遷移到數(shù)據(jù)倉(cāng)庫(kù)中。臨時(shí)數(shù)據(jù)庫(kù)可以設(shè)置在源數(shù)據(jù)庫(kù)服務(wù)器上,也可以采用中間件技術(shù)進(jìn)行搬遷轉(zhuǎn)換。數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)來(lái)源于不同數(shù)據(jù)庫(kù),而不同數(shù)據(jù)庫(kù)中可能存在同樣的記錄,所以最后再在共享的數(shù)據(jù)倉(cāng)庫(kù)中對(duì)相似重復(fù)記錄進(jìn)行二次清洗。異構(gòu)數(shù)據(jù)庫(kù)集成中相似重復(fù)記錄清洗流程如圖1所示。
圖1 異構(gòu)數(shù)據(jù)庫(kù)相似重復(fù)記錄清洗流程
各企業(yè)數(shù)據(jù)庫(kù)先在自身數(shù)據(jù)庫(kù)中進(jìn)行相似重復(fù)記錄清洗,然后將數(shù)據(jù)抽取到企業(yè)前置的臨時(shí)數(shù)據(jù)庫(kù)中,如果企業(yè)自身的服務(wù)器滿足硬件要求,臨時(shí)數(shù)據(jù)庫(kù)可以直接架設(shè)在同一機(jī)子上,如果企業(yè)服務(wù)器無(wú)法滿足硬件的要求,則可以在在企業(yè)服務(wù)器前端連接一臺(tái)臨時(shí)計(jì)算機(jī)用來(lái)存放臨時(shí)數(shù)據(jù)庫(kù),再在前置的臨時(shí)數(shù)據(jù)庫(kù)中將數(shù)據(jù)按照數(shù)據(jù)倉(cāng)庫(kù)的格式要求進(jìn)行統(tǒng)一轉(zhuǎn)換,轉(zhuǎn)換好符合要求的數(shù)據(jù)直接加載到數(shù)據(jù)倉(cāng)庫(kù)中,最后在數(shù)據(jù)倉(cāng)庫(kù)中對(duì)數(shù)據(jù)進(jìn)行二次相似重復(fù)記錄清洗。
如上所述,異構(gòu)數(shù)據(jù)庫(kù)集成過(guò)程中的相似重復(fù)記錄清洗分兩次進(jìn)行,即企業(yè)內(nèi)部數(shù)據(jù)庫(kù)的清洗和集成后數(shù)據(jù)倉(cāng)庫(kù)中的清洗。企業(yè)內(nèi)部數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)必須綜合考慮數(shù)據(jù)量的多少、建庫(kù)的方法等,然后選擇一種或多種清洗方法。如果數(shù)據(jù)量龐大,可以采用機(jī)器自動(dòng)清洗。如果數(shù)據(jù)量較小,也可以采用人工清洗。此外,還可以采用機(jī)器清洗和人工清洗相結(jié)合的方式進(jìn)行。機(jī)器清洗和人工清洗相結(jié)合的清洗模型如圖2所示。
圖2 相似重復(fù)記錄清洗模型
源數(shù)據(jù)庫(kù)中的數(shù)據(jù)通過(guò)制定的清洗規(guī)則利用機(jī)器自動(dòng)清洗,清洗規(guī)則包含相似重復(fù)記錄識(shí)別、相似重復(fù)記錄清洗、缺失數(shù)據(jù)補(bǔ)充[8]及異常數(shù)據(jù)處理等,異常數(shù)據(jù)的處理方式為將異常數(shù)據(jù)導(dǎo)出,利用人工方式清洗或通過(guò)制定的異常規(guī)則分別進(jìn)行清洗。人工清洗方式主要應(yīng)用在企業(yè)數(shù)據(jù)庫(kù)中,在數(shù)據(jù)提交到臨時(shí)數(shù)據(jù)庫(kù)前,必須根據(jù)數(shù)據(jù)倉(cāng)庫(kù)的要求,將要抽取出來(lái)的記錄中部分缺失的信息補(bǔ)全,所以企業(yè)數(shù)據(jù)庫(kù)清洗時(shí)必須把這些記錄過(guò)濾出來(lái)補(bǔ)充完整。此外企業(yè)數(shù)據(jù)庫(kù)中的某些記錄如果比較重要,也需要過(guò)濾出來(lái),涉及到重復(fù)記錄,必須導(dǎo)出人工進(jìn)行清洗。
相似重復(fù)記錄清洗方法最常用的是基于“排序-合并”算法,其基本思想是利用設(shè)定的關(guān)鍵屬性進(jìn)行排序,排序后的記錄兩兩進(jìn)行比對(duì)匹配,如果構(gòu)成相似重復(fù)記錄,則將該記錄對(duì)合并。然而對(duì)大數(shù)據(jù)量的數(shù)據(jù)庫(kù)而言排序和兩兩比對(duì)的時(shí)間代價(jià)是極大的,為了提高效率,Hernandez等于1995提出 SNM(Sorted-Neighborhood Method,簡(jiǎn)稱(chēng)SNM)算法[9],該算法設(shè)置固定大小的滑動(dòng)窗口,記錄匹配操作只限定于窗口內(nèi),大大提高了匹配的效率?;赟NM算法,各種改進(jìn)的算法紛紛被許多學(xué)者提出,張建中等[10]對(duì)記錄的“臟數(shù)據(jù)”按照DC標(biāo)準(zhǔn)和相關(guān)規(guī)范進(jìn)行清洗與去重,陳爽等[11]利用伸縮窗口和動(dòng)態(tài)調(diào)整等級(jí)對(duì)SNM算法進(jìn)行改進(jìn),這些方法均取得了較好的效果。在具體應(yīng)用中,可以綜合考慮數(shù)據(jù)庫(kù)的實(shí)際情況分別采用不同的清洗算法。
根據(jù)異構(gòu)數(shù)據(jù)庫(kù)的特點(diǎn),異構(gòu)數(shù)據(jù)庫(kù)集成中相似重復(fù)記錄清洗的一般步驟如下:
第一步:根據(jù)實(shí)際情況進(jìn)行需求分析,選擇數(shù)據(jù)倉(cāng)庫(kù)技術(shù),建立數(shù)據(jù)庫(kù)模型,物理設(shè)計(jì)數(shù)據(jù)倉(cāng)庫(kù);
第二步:制定清洗規(guī)則,采用機(jī)器清洗和人工清洗相結(jié)合的方式對(duì)源數(shù)據(jù)庫(kù)進(jìn)行清洗;
第三步:根據(jù)數(shù)據(jù)倉(cāng)庫(kù)的共享數(shù)據(jù)要求,提取所需數(shù)據(jù),并將其存儲(chǔ)于臨時(shí)數(shù)據(jù)庫(kù)中;
第四步:根據(jù)數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)庫(kù)規(guī)范及數(shù)據(jù)格式要求,對(duì)臨時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄進(jìn)行轉(zhuǎn)換,使之符合數(shù)據(jù)倉(cāng)庫(kù)的標(biāo)準(zhǔn);
第五步:企業(yè)臨時(shí)數(shù)據(jù)庫(kù)的數(shù)據(jù)采用直接鏈接的方式,寫(xiě)入數(shù)據(jù)倉(cāng)庫(kù);
第六步:制定清洗規(guī)則,采用機(jī)器清洗方式清洗數(shù)據(jù)倉(cāng)庫(kù)中的相似重復(fù)記錄。
異構(gòu)數(shù)據(jù)庫(kù)集成是解決企事業(yè)單位間數(shù)據(jù)互聯(lián)互通的有效方式,由于企事業(yè)單位自身數(shù)據(jù)庫(kù)采用的技術(shù)及平臺(tái)不一樣,所以集成時(shí)不能直接鏈接,必須對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,然后抽取有用的用于共享的數(shù)據(jù),再對(duì)抽取出來(lái)的數(shù)據(jù)按照指定的規(guī)范進(jìn)行轉(zhuǎn)換。然而抽取出來(lái)的數(shù)據(jù)進(jìn)入數(shù)據(jù)倉(cāng)庫(kù)時(shí)帶來(lái)了許多相似重復(fù)數(shù)據(jù),所以必須對(duì)其清洗,論文討論了相似重復(fù)記錄的類(lèi)型,提出采用兩次清洗的方式解決相似重復(fù)記錄問(wèn)題,即在源數(shù)據(jù)庫(kù)上進(jìn)行初次清洗和在數(shù)據(jù)倉(cāng)庫(kù)中進(jìn)行二次清洗,為異構(gòu)數(shù)據(jù)庫(kù)集成中的相似重復(fù)記錄清洗提供了一定的借鑒方案。
[1]徐啟,孫全紅.基于分布式數(shù)據(jù)倉(cāng)庫(kù)的電信信息共享平臺(tái)的研究[J].計(jì)算機(jī)測(cè)量與控制,2012,20(4):1036-1038,1050
[2]姜傳菊.企業(yè)數(shù)據(jù)倉(cāng)庫(kù)技術(shù)應(yīng)用探討[J].商業(yè)時(shí)代,2012,(23):106 -107
[3]Dimitri Theodoratos,Timos Sellis.Data Warehouse Configuration[C].Proceedings of the 23rd VLDB Conference,1997
[4]王世水,王元元,高應(yīng)波,等.基于ETL的數(shù)據(jù)集成優(yōu)化研究與實(shí)現(xiàn)[J].天津工業(yè)大學(xué)學(xué)報(bào),2013,32(3):78-81
[5]李星毅,包從劍,施化吉,等.數(shù)據(jù)倉(cāng)庫(kù)中的相似重復(fù)記錄檢測(cè)方法[J].電子科技大學(xué)學(xué)報(bào),2007,36(6):1273-1277
[6]程國(guó)達(dá),蘇杭麗.一種檢測(cè)漢語(yǔ)相似重復(fù)記錄的有效方法[J].計(jì)算機(jī)應(yīng)用,2005,25(6):1362-1365
[7]郭文龍,卓琳.一種基于編碼規(guī)則的中文地址清洗方法[J].閩江學(xué)院學(xué)報(bào),2013,34(5):66-69
[8]邱愛(ài)保,呂愛(ài)清.數(shù)據(jù)分析預(yù)處理的MATLAB實(shí)現(xiàn)[J].宜春學(xué)院學(xué)報(bào),2011,33(4):33 -34
[9]Hernandez M,Stolfo S.The Merge/Purge Problem for Large Databases.Proceedings of the ACM SIGMOD International Conference on Management of Data[C].San Jose,California,1995:127 -138
[10]張建中,方正,熊擁軍,等.對(duì)基于SNM數(shù)據(jù)清洗算法的優(yōu)化[J].中南大學(xué)學(xué)報(bào)(自然科學(xué)版),2010,41(6):2240-2245
[11]陳爽,刁興春,宋金玉,等.基于伸縮窗口和等級(jí)調(diào)整的SNM改進(jìn)方法[J].計(jì)算機(jī)應(yīng)用研究,2013,30(9):2736-2739