邵桐 朱明東
摘要:數(shù)據(jù)交換系統(tǒng)是服務(wù)數(shù)據(jù)交換需求的重要工具。在分析數(shù)據(jù)交換過(guò)程的基礎(chǔ)上,提煉了異構(gòu)數(shù)據(jù)交換的元數(shù)據(jù)模型,并以這些元數(shù)據(jù)模型為基礎(chǔ),設(shè)計(jì)實(shí)現(xiàn)了基于元數(shù)據(jù)的數(shù)據(jù)交換系統(tǒng),大大提高了系統(tǒng)的適應(yīng)性、靈活性、通用性和可擴(kuò)展性,為大規(guī)模數(shù)據(jù)遷移和數(shù)據(jù)集成提供了基礎(chǔ)支撐。
關(guān)鍵詞關(guān)鍵詞:元數(shù)據(jù);數(shù)據(jù)交換;異構(gòu)數(shù)據(jù)
DOIDOI:10.11907/rjdk.161328
中圖分類號(hào):TP392文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2016)007015803
0引言
隨著信息技術(shù)的發(fā)展,業(yè)務(wù)領(lǐng)域的變化頻率越來(lái)越高,業(yè)務(wù)流程再造的速度越來(lái)越快,數(shù)據(jù)模型不斷升級(jí),導(dǎo)致數(shù)據(jù)遷移需求不斷增加,跨部門業(yè)務(wù)融合也導(dǎo)致數(shù)據(jù)交換的需求持續(xù)增加。因此,建設(shè)一個(gè)數(shù)據(jù)交換平臺(tái)迫在眉睫。該平臺(tái)不僅可以提供點(diǎn)到點(diǎn)的系統(tǒng)間數(shù)據(jù)交換,還能實(shí)現(xiàn)點(diǎn)到面的跨部門、跨業(yè)務(wù)的數(shù)據(jù)集成,對(duì)整體數(shù)據(jù)資產(chǎn)提供有力支撐。
目前,主流的數(shù)據(jù)庫(kù)產(chǎn)品大多提供了數(shù)據(jù)遷移工具,但這些工具一般只適用于數(shù)據(jù)的導(dǎo)入、導(dǎo)出,并且只能支持一個(gè)或幾個(gè)特定類型的數(shù)據(jù)庫(kù)?,F(xiàn)在的問(wèn)題是用戶使用的數(shù)據(jù)庫(kù)產(chǎn)品種類眾多,比如格式化的數(shù)據(jù)庫(kù)有Oracle、SQL Server、DB2、MySQL、Access、Sqlite、達(dá)夢(mèng)、金倉(cāng)等;半結(jié)構(gòu)化的數(shù)據(jù)格式有xls、csv、json、xml等;NoSQL類型的數(shù)據(jù)庫(kù)有MongoDB、Redis、 HBase等。無(wú)論是數(shù)據(jù)遷移還是數(shù)據(jù)集成,均需要在它們之間交換共享數(shù)據(jù)。如果工具只支持一對(duì)一的數(shù)據(jù)轉(zhuǎn)換,就可能需要開(kāi)發(fā)、維護(hù)、學(xué)習(xí)使用一批這樣的工具。因此一個(gè)通用的數(shù)據(jù)交換系統(tǒng)是實(shí)現(xiàn)數(shù)據(jù)遷移和數(shù)據(jù)集成重要的基礎(chǔ)工具。
1數(shù)據(jù)交換過(guò)程
一個(gè)典型的數(shù)據(jù)交換過(guò)程包括以下幾個(gè)步驟:數(shù)據(jù)抽取、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)加載,為了順利實(shí)現(xiàn)數(shù)據(jù)交換,還需要對(duì)以上幾個(gè)過(guò)程加以控制,這就是人們常說(shuō)的ETL(Extract Transform Load),這里加上了控制(Control),簡(jiǎn)稱為ETLC,如圖1所示。
數(shù)據(jù)抽取,就是從數(shù)據(jù)源中獲取數(shù)據(jù)。進(jìn)行數(shù)據(jù)抽取是進(jìn)行數(shù)據(jù)交換的首要步驟,它是指從異構(gòu)的數(shù)據(jù)源中獲取需要的數(shù)據(jù)。這里的異構(gòu)數(shù)據(jù)源既包括傳統(tǒng)的結(jié)構(gòu)化數(shù)據(jù)庫(kù)(支持SQL標(biāo)準(zhǔn))、半結(jié)構(gòu)化數(shù)據(jù)文件(如XML文件、JSON文件、XLS文件等),還包括不斷涌現(xiàn)的NoSQL數(shù)據(jù)庫(kù)(如:MongoDB、Memcached、HBase等)。建立一個(gè)通用的數(shù)據(jù)訪問(wèn)接口是獲取不同數(shù)據(jù)源數(shù)據(jù)的關(guān)鍵。
數(shù)據(jù)轉(zhuǎn)換,就是根據(jù)目標(biāo)數(shù)據(jù)源的要求轉(zhuǎn)換數(shù)據(jù),實(shí)現(xiàn)異構(gòu)數(shù)據(jù)源之間的數(shù)據(jù)轉(zhuǎn)換是進(jìn)行數(shù)據(jù)交換的重點(diǎn)。完成從異構(gòu)數(shù)據(jù)庫(kù)中提取數(shù)據(jù)之后,為了滿足目標(biāo)數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)的要求,需要對(duì)其進(jìn)行相應(yīng)的轉(zhuǎn)換。建立一系列數(shù)據(jù)轉(zhuǎn)換規(guī)則是滿足不同數(shù)據(jù)轉(zhuǎn)換要求的關(guān)鍵。
數(shù)據(jù)加載,就是將數(shù)據(jù)加載到目標(biāo)數(shù)據(jù)源。進(jìn)行數(shù)據(jù)加載是達(dá)成數(shù)據(jù)交換目標(biāo)的最后一環(huán),它需要按照事先制定的加載策略,將經(jīng)過(guò)轉(zhuǎn)換的、符合要求的數(shù)據(jù)有針對(duì)性地加載到目標(biāo)數(shù)據(jù)庫(kù)中。
過(guò)程控制,就是啟動(dòng)、記錄數(shù)據(jù)抽取過(guò)程。對(duì)數(shù)據(jù)交換過(guò)程進(jìn)行控制是數(shù)據(jù)交換的有效保障。針對(duì)不同的數(shù)據(jù)交換需求,應(yīng)能夠自動(dòng)地啟動(dòng)交換任務(wù),收集、記錄交換過(guò)程中的日志和異常信息,為掌握交換事務(wù),及時(shí)發(fā)現(xiàn)和處理各種異常提供支撐。
2數(shù)據(jù)交換元數(shù)據(jù)
通過(guò)對(duì)數(shù)據(jù)交換過(guò)程的分析可以看出,進(jìn)行數(shù)據(jù)交換的基礎(chǔ)是對(duì)數(shù)據(jù)源及其映射關(guān)系進(jìn)行描述,數(shù)據(jù)交換過(guò)程需要對(duì)數(shù)據(jù)抽取、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)加載、過(guò)程控制進(jìn)行描述。元數(shù)據(jù)是對(duì)數(shù)據(jù)資源的規(guī)范化描述,對(duì)于數(shù)據(jù)交換過(guò)程中涉及到的數(shù)據(jù)源以及交換行為,可以抽象為以下幾類元數(shù)據(jù)。
2.1數(shù)據(jù)源描述元數(shù)據(jù)
數(shù)據(jù)交換實(shí)質(zhì)就是數(shù)據(jù)從一個(gè)數(shù)據(jù)源通過(guò)抽取、轉(zhuǎn)換、加載到另一個(gè)數(shù)據(jù)源,因此,數(shù)據(jù)交換的基礎(chǔ)就是要對(duì)數(shù)據(jù)源進(jìn)行詳盡描述。
數(shù)據(jù)源按其類型不同,可概括為結(jié)構(gòu)化數(shù)據(jù)庫(kù)、半結(jié)構(gòu)化數(shù)據(jù)文件、NoSQL數(shù)據(jù)庫(kù)。無(wú)論何種類型的數(shù)據(jù)源,在進(jìn)行數(shù)據(jù)交換時(shí),首先都要知道如何訪問(wèn),這就需要描述數(shù)據(jù)源所屬的數(shù)據(jù)庫(kù)類型、數(shù)據(jù)庫(kù)版本、數(shù)據(jù)庫(kù)名稱、數(shù)據(jù)庫(kù)的URL、訪問(wèn)數(shù)據(jù)庫(kù)的用戶名與密碼等信息。
數(shù)據(jù)庫(kù)邏輯上是由數(shù)據(jù)表組成,在進(jìn)行數(shù)據(jù)交換時(shí),要知道需要交換的數(shù)據(jù)在哪張表里,因此需要描述數(shù)據(jù)表信息,包括表的名稱、表的語(yǔ)義描述、表所屬的數(shù)據(jù)庫(kù)等。
數(shù)據(jù)表是由一系列字段構(gòu)成的,在進(jìn)行數(shù)據(jù)交換時(shí),最小的粒度是數(shù)據(jù)從源端的某張表的一個(gè)字段至目標(biāo)端一張表的某個(gè)字段,因此對(duì)表字段的描述至關(guān)重要。字段的描述信息包括:字段的名稱、字段的語(yǔ)義描述、字段所屬的數(shù)據(jù)表、字段類型、字段的約束信息等。
通過(guò)以上分析,對(duì)數(shù)據(jù)源的描述可以歸納為三元組,記為D(Db,Dt,Df),其中Db為數(shù)據(jù)庫(kù)描述信息,Dt為數(shù)據(jù)表的描述,Df為數(shù)據(jù)字段的描述,其邏輯關(guān)系如圖2所示。
2.2數(shù)據(jù)映射元數(shù)據(jù)
數(shù)據(jù)交換是不同數(shù)據(jù)源之間的數(shù)據(jù)轉(zhuǎn)換,最終反映的是數(shù)據(jù)字段之間的映射關(guān)系。對(duì)于異構(gòu)數(shù)據(jù)的交換,這種映射關(guān)系不僅包括不同數(shù)據(jù)要素之間的對(duì)應(yīng)關(guān)系,還包括字段之間的轉(zhuǎn)換規(guī)則。因此對(duì)于數(shù)據(jù)映射的描述,可以用四元組表示,記為R(Rd,Rt,Rf,Rc),其中Rd為源端數(shù)據(jù)源與目標(biāo)端數(shù)據(jù)源的對(duì)應(yīng)關(guān)系,Rt為源端數(shù)據(jù)表與目標(biāo)端數(shù)據(jù)表的對(duì)應(yīng)關(guān)系,Rf為源端數(shù)據(jù)字段與目標(biāo)端數(shù)據(jù)字段的對(duì)應(yīng)關(guān)系,Rc為源端數(shù)據(jù)字段與目標(biāo)端數(shù)據(jù)字段的轉(zhuǎn)換規(guī)則,其邏輯關(guān)系如圖3所示。
2.3交換操作元數(shù)據(jù)
實(shí)現(xiàn)異構(gòu)數(shù)據(jù)交換的核心功能是進(jìn)行ETL,即抽取、轉(zhuǎn)換和加載,為了提高整個(gè)ETL過(guò)程的可控性、靈活性、通用性,需要對(duì)每個(gè)操作過(guò)程加以控制,因此交換操作元數(shù)據(jù)由數(shù)據(jù)抽取元數(shù)據(jù)、數(shù)據(jù)轉(zhuǎn)換元數(shù)據(jù)、數(shù)據(jù)加載元數(shù)據(jù)和操作控制元數(shù)據(jù)組成。2.3.1數(shù)據(jù)抽取元數(shù)據(jù)
數(shù)據(jù)抽取就是按照事先制定的抽取策略將需要的數(shù)據(jù)從源端數(shù)據(jù)源抽取出來(lái),對(duì)于數(shù)據(jù)抽取元數(shù)據(jù)的描述可用三元組表示,記為E(Ed,Es,Ep)。其中Ed為源端數(shù)據(jù)源,包括數(shù)據(jù)源連接信息和結(jié)構(gòu)信息,Es為數(shù)據(jù)抽取范圍,包括需要抽取的表及字段信息的集合和每張表內(nèi)需要抽取的內(nèi)容范圍,Ep為抽取策略,分為手動(dòng)抽取、定時(shí)抽取、準(zhǔn)實(shí)時(shí)抽取等。2.3.2數(shù)據(jù)轉(zhuǎn)換元數(shù)據(jù)
數(shù)據(jù)轉(zhuǎn)換就是根據(jù)目標(biāo)數(shù)據(jù)結(jié)構(gòu)與源數(shù)據(jù)結(jié)構(gòu)的映射關(guān)系,按照轉(zhuǎn)換規(guī)則,將從源端數(shù)據(jù)庫(kù)抽取出來(lái)的數(shù)據(jù)轉(zhuǎn)換為與目標(biāo)數(shù)據(jù)庫(kù)相適應(yīng)的數(shù)據(jù),描述數(shù)據(jù)轉(zhuǎn)換元數(shù)據(jù)可用四元組表示,記為T(Ts,Td,Te,Tr)。其中Ts為源端數(shù)據(jù)庫(kù),包括數(shù)據(jù)結(jié)構(gòu)信息,Td為目標(biāo)數(shù)據(jù)庫(kù),包括目標(biāo)數(shù)據(jù)庫(kù)結(jié)構(gòu)信息,Te為需要轉(zhuǎn)換的數(shù)據(jù),是數(shù)據(jù)抽取結(jié)果的實(shí)例,Tr為源端數(shù)據(jù)結(jié)構(gòu)與目標(biāo)端數(shù)據(jù)結(jié)構(gòu)的映射關(guān)系,是數(shù)據(jù)映射的實(shí)例。2.3.3數(shù)據(jù)加載元數(shù)據(jù)
數(shù)據(jù)加載就是將特定的、經(jīng)過(guò)轉(zhuǎn)換的數(shù)據(jù)加載到目標(biāo)數(shù)據(jù)庫(kù)中,描述數(shù)據(jù)加載元數(shù)據(jù)可用三元組表示,記為L(zhǎng)(Ld,Lt,Lp)。其中Ld為目標(biāo)數(shù)據(jù)庫(kù),包括數(shù)據(jù)庫(kù)連接信息和結(jié)構(gòu)信息,Lt為需要加載的數(shù)據(jù),是數(shù)據(jù)轉(zhuǎn)換結(jié)果的實(shí)例,Lp為數(shù)據(jù)加載策略,分為先清空后加載、增量加載、直接追加轉(zhuǎn)載等。2.3.4操作控制元數(shù)據(jù)
數(shù)據(jù)交換需求,可以抽象為一個(gè)交換任務(wù),一個(gè)交換任務(wù)是由若干個(gè)數(shù)據(jù)交換操作過(guò)程來(lái)實(shí)現(xiàn)的,為了使數(shù)據(jù)交換的各部分有機(jī)協(xié)調(diào)工作,需要操作元數(shù)據(jù)控制整個(gè)數(shù)據(jù)交換過(guò)程,描述操作元數(shù)據(jù)可用五元組表示,記為C(Ct,Cd,Cs,Cr,Cl)。Ct為與一次交換任務(wù)相關(guān)的信息,Cd為當(dāng)前交換操作的目標(biāo)數(shù)據(jù)庫(kù),Cs為當(dāng)前交換操作的源數(shù)據(jù)庫(kù),Cr為當(dāng)前交換操作關(guān)聯(lián)的數(shù)據(jù)映射集合,Cl為當(dāng)前交換操作過(guò)程產(chǎn)生的日志信息結(jié)合。3設(shè)計(jì)實(shí)現(xiàn)
3.1系統(tǒng)邏輯
基于以上數(shù)據(jù)交換元數(shù)據(jù),一個(gè)通用的數(shù)據(jù)交換系統(tǒng)框架由5層結(jié)構(gòu)組成,分別是數(shù)據(jù)源層、數(shù)據(jù)訪問(wèn)層、元數(shù)據(jù)層、交換功能層和應(yīng)用層,如圖4所示。
數(shù)據(jù)源層:需要進(jìn)行數(shù)據(jù)交換的所有數(shù)據(jù)源,能夠支持?jǐn)?shù)據(jù)源動(dòng)態(tài)地加入或退出。
數(shù)據(jù)訪問(wèn)層:功能模塊訪問(wèn)數(shù)據(jù)源的統(tǒng)一接口,它為上層的功能應(yīng)用屏蔽了異構(gòu)數(shù)據(jù)源訪問(wèn)差異,其核心是為不同類型的數(shù)據(jù)源建立相應(yīng)的適配器。
元數(shù)據(jù)層:存儲(chǔ)數(shù)據(jù)交換功能的元數(shù)據(jù),它是數(shù)據(jù)交換功能的驅(qū)動(dòng)源。
交換功能層:由實(shí)現(xiàn)數(shù)據(jù)抽取轉(zhuǎn)換的各功能模塊組成,包括數(shù)據(jù)抽取功能、數(shù)據(jù)轉(zhuǎn)換功能、數(shù)據(jù)、數(shù)據(jù)加載功能和過(guò)程控制功能等。
應(yīng)用層:提供數(shù)據(jù)源注冊(cè)管理、數(shù)據(jù)映射編輯、數(shù)據(jù)交換策略管理、交換任務(wù)管理、交換任務(wù)執(zhí)行、交換日志管理等用戶交互操作界面。
3.2系統(tǒng)應(yīng)用流程
數(shù)據(jù)交換系統(tǒng)應(yīng)用流程包括:
(1)注冊(cè)數(shù)據(jù)源。按照數(shù)據(jù)源描述元數(shù)據(jù)的要求,將需要進(jìn)行數(shù)據(jù)交換的數(shù)據(jù)源加入到交換系統(tǒng)中,詳細(xì)描述數(shù)據(jù)源相關(guān)信息,包括連接信息和數(shù)據(jù)結(jié)構(gòu)信息。
(2)編輯數(shù)據(jù)映射。根據(jù)數(shù)據(jù)交換需求,針對(duì)參與交換的源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)的結(jié)構(gòu)差異,建立字段級(jí)數(shù)據(jù)映射關(guān)系,選擇相應(yīng)的數(shù)據(jù)轉(zhuǎn)換函數(shù)。
(3)數(shù)據(jù)交換任務(wù)管理。創(chuàng)建數(shù)據(jù)交換任務(wù),設(shè)置交換策略。選擇源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù),確定任務(wù)啟動(dòng)方式(手動(dòng)或自動(dòng))、啟動(dòng)時(shí)間、間隔周期等參數(shù);根據(jù)數(shù)據(jù)抽取、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)加載元數(shù)據(jù)要求,描述數(shù)據(jù)抽取范圍、數(shù)據(jù)抽取策略、數(shù)據(jù)加載策略等。
(4)數(shù)據(jù)交換任務(wù)執(zhí)行。根據(jù)交換任務(wù)啟動(dòng)策略,啟動(dòng)一個(gè)交換任務(wù)。系統(tǒng)完成數(shù)據(jù)抽取、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)加載等動(dòng)作,并記錄任務(wù)執(zhí)行過(guò)程中的相關(guān)日志信息。
(5)數(shù)據(jù)交換日志管理。查看相關(guān)任務(wù)執(zhí)行過(guò)程中的日志信息。
4結(jié)語(yǔ)
本文通過(guò)分析數(shù)據(jù)交換過(guò)程,提煉出數(shù)據(jù)交換的元數(shù)據(jù)模型,基于這些元數(shù)據(jù)模型構(gòu)建了通用的數(shù)據(jù)交換系統(tǒng)。實(shí)踐表明,基于元數(shù)據(jù)驅(qū)動(dòng)的數(shù)據(jù)交換系統(tǒng),屏蔽了異構(gòu)數(shù)據(jù)源的差異,適應(yīng)了數(shù)據(jù)映射規(guī)則的多樣可擴(kuò)展特性,滿足了交換策略的靈活可定制要求。通過(guò)該系統(tǒng),可以集中管理異構(gòu)數(shù)據(jù)源,進(jìn)行異構(gòu)數(shù)據(jù)之間的轉(zhuǎn)換,具有良好的適應(yīng)性、靈活性、通用性和可擴(kuò)展性,為進(jìn)行大規(guī)模的數(shù)據(jù)遷移和數(shù)據(jù)集成提供了基礎(chǔ)支撐。
參考文獻(xiàn):
張朝暉,徐立臻,董逸生.一種基于SOA的企業(yè)集成平臺(tái)[J].計(jì)算機(jī)工程,2011,37(5):115119.
鄧新莉,張四平,劉 珊,等.基于中間件平臺(tái)的異構(gòu)數(shù)據(jù)交換與集成[J].四川兵工學(xué)報(bào) ,2011,32(3):2628.
鄒衛(wèi)國(guó),郭建勝,王毅.基于XML的異構(gòu)數(shù)據(jù)交換研究 [J]. 中國(guó)管理信息化,2009,12(24):184189.
王盼卿,劉增良,陶源.基于元數(shù)據(jù)的ETL工具集成研究 [J]. 2009,25(12):5861.
李慶陽(yáng),彭宏.面向數(shù)據(jù)質(zhì)量的ETL框架的設(shè)計(jì)與實(shí)現(xiàn)[J]. 2010,31(9):6670.
責(zé)任編輯(責(zé)任編輯:杜能鋼)