彭 東
(92941部隊 葫蘆島 125001)
由于工作的需要,企業中各個系統之間要實現協同工作,構建統一的訪問接口,實現不同系統的集成。要達到這一目標,首先要把不同平臺,不同結構的數據統一到標準的數據格式,然后才能實現數據的互操作和共享,因此,異構數據庫集成技術的研究是目前構建一體化信息綜合集成平臺的熱點,也是難點。由于牽涉到不同系統的數據信息交換,需要考慮的問題包括異構數據庫之間的數據轉換問題、增量數據添加問題、數據更新同步問題,以及多個不同數據源的共享問題等。
為了實現在異構數據庫之間數據的交換,本文提出以XML技術開發中間件,在由多個異構數據源組成的系統中,實現數據格式的轉換和傳輸,為客戶端提供透明的數據訪問操作。
在異構數據庫集成領域研究中,劉敏超等指出在數據集成的過程中,最主要的是要解決集成模式映射問題[1],數據搜索變換問題、搜索優化的問題,其最為核心的關鍵點是如何建立映射關系。Alon Y.Halevy指出[2],異構數據的映射問題是一個十分復雜的問題。孟小峰在其論文中指出[3],在信息集成的過程中,最主要的是要解決異構數據源之間的數據模式準確匹配的問題。E.Ra hm和P.A.Be mstein對異構數據集成中的模式映射技術進行了總結,并建立了不同的分類標準,對現有的模式映射技術進行綜合分類[4]。A.Chatterjee等利用基于實體連接匹配模型來解決數據庫異構的問題[5]。D.Dey,S.Sarkar等提出了針對數據庫實體異構問題的概率決策模型方案,指出由于客觀上存在著多種不確定因素,對于實現異構數據庫之間的精確數據匹配是不現實的[6]。P.De等提出了基于距離的異構數據實體匹配決策模型,用以判斷與衡量不同實體之間的匹配狀態[7]。K.Lerman,S.Minton等對異構數據庫中模式映射在系統運行時的維護問題進行了討論[8]。
異構數據庫集成設計主要包括三個方面的內容,分別是數據轉換功能的設計,數據庫表與XML之間的映射功能設計,異構數據同步功能設計。
數據轉換功能的主要目標包括數據轉換和數據操作的透明化。其中的數據轉換功能包括兩個步驟,先是利用XML技術實現不同數據庫結構之間的映射和轉換,然后再根據具體的映射處理數據的轉換問題。而透明訪問則是為了滿足用戶的操作需求,在異構數據庫集成系統中實現數據處理的透明操作后,用戶可以根據需求對數據進行輸入、查詢、更新等操作,系統將根據用戶的使用需求自動對其進行處理,而對于用戶而言,感覺上就是在操作本地數據庫。
異構數據轉換包括兩種轉換內容,一是數據庫的結構,二是具體的數據。因此,數據轉換首先要把數據的內容和數據的格式進行分離。XML技術既可以實現具體數據內容的描述,又可以實現數據格式的描述,因此,利用該技術可以實現內容與格式的分離,完成轉換的第一步工作。此時數據庫結構和XML文檔結構之間已經完成了映射的操作,在接下來的數據轉換過程中,對數據進行集成,對結構文檔進行匹配,最后實現從源數據庫到目標數據庫的數據轉換操作。數據轉換的體系結構如圖1所示。

圖1 數據轉換的體系結構圖
首先要根據具體的異構數據源結構,生成結構文檔,這一文檔中的內容包括了對數據庫總體結構的描述,具體包括數據表的名稱、數據表中每一個數據列字段的名稱、類型、是否為主鍵、是否為外鍵、是否可以為空值等。結構文檔的作用主要是對其所描述的源數據庫進行還原。對應于每一個源數據庫,還要建立一個Schema模式文件,用以對XML數據文檔進行規范性和有效性的驗證。系統需要在結構文檔和模式文檔之間建立映射關系。當系統根據用戶的輸入對源數據庫進行查詢操作后,數據被提取到XML文檔中,并與結構文檔一起被傳輸到共享平臺。在實際的操作和運行過程中,由于管理員的操作時間以及操作對象數量的不一致,在轉換過程中會存在多種小體積但數量較多,結構相似的XML數據文檔,為了優化數據轉換的性能,在進行轉換操作之前,對這些小文件進行優化整合,再將整合后的大數據文檔轉換到異構的目標數據庫中。
數據庫分為多種類型,而關系數據庫是使用最為廣泛的一種。記錄于關系數據庫中的數據具有嚴格的結構定義和類型定義,使不同實體之間以及實體與其屬性之間的關系十分清晰。而XML格式文檔是一種半結構化的數據表現方式,其相對自由的標簽定義,使其可以較好地表現層次型的數據結構,具有較強的靈活性。對于數據庫中數據表到XML文檔之間的轉換操作,主要包括兩個部分,一是轉換數據表的結構及其相互之間的關系,二是具體數據的轉換。針對于以上兩種轉換的方式,具體生成的文件為XML結構轉換文檔和XML數據轉換文檔。
對數據庫中數據表的結構與XML文檔的模式建立映射關系是轉換的第一步。XML文檔中需要包括數據表中的結構和數據兩個方面的信息,因此,針對關系數據庫中數據表的通用信息,制定對應的XML數據文檔模板。這一模板定義的規則如下:
1)對于等轉換的數據庫中的每一個數據表,都要對應一個不同的XML結構的文檔,用于描述數據表的結構信息。轉換后的XML文檔的命名格式為“數據表名.xsd”。
2)在具體描述數據表結構的XML文檔中,其根元素應被定義為具有屬性值name的形式,如〈Table name=””/〉,而將被轉換的數據表名作為其name的屬性值。
3)定義了根元素后,再定義根元素的子元素,采用〈Element name=””flag=””/〉的形式。該元素中的name屬性,對應的是數據庫表中的每一個數據列,也就是關系數據庫中二維表示方式下的縱向維。在關系數據表中,每一數據列可能會帶有一定的附加信息,用以標識該列是否為主鍵,或者是關聯到其他數據表的外鍵,而元素中的flag屬性就是用于對這些附加的屬性進行表示。flag屬性具有三種取值,分別是空值,表示主鍵的PK值,表示外鍵的FK值。
4)利用〈Element name=””reference=””/〉元素來表示數據庫中不同數據表之間的關系。上一點中,flag屬性標識了某一數據列的附加屬性,可以通過該屬性獲得本數據表的數據項信息,如果該值被賦為FK,則表示該列數據是某一外部數據表的外鍵,當這種情況出現時,說明在數據庫中出現了兩個及其以上的關聯數據庫,而〈Element name=””reference=””/〉元素定義的目的就是對于這一類情況進行描述。該元素中的reference屬性中記錄的是與該表的外鍵相對應的外部數據表的名字,用于描述不同數據表之間的關系信息。
遵循以上四條原則,就可以對數據庫中數據表到XML文檔Schema模式進行轉換操作。對于單個數據庫而言,這一轉換的操作步驟較為簡單,而如果在數據庫中存在著多個表之間相互關聯的情況,則XML文檔需要較為詳細地記錄和描述這一關聯關系。在結構化的關系數據庫中,不同數據表之間的關聯關系可以較為嚴格地定義,可以展現出不同數據之間的關系,但數據與數據之間是相對獨立的,沒有順序關系,而半結構化的XML文檔中描述的數據則是層次性的,具有一定的順序關系。而XML文檔中主要是對數據的存儲,對于數據庫的結構信息描述能力較為有限。為了很好地描述不同數據表之間的關系,增加了〈Element name=””reference=””/〉元素。
如下所示為從某數據庫中的Project數據表中提取的有關于工程建設的數據信息,并通過XML轉換的規則,將數據內容提取到了XML文檔中。該XML文檔中的數據定義與提取原則遵循上述制定的相關規范


以上XML數據文檔的內容中,包括了兩條數據記錄,其記錄的編號分別是77和78。在記錄中定義了工程的編號、名稱、負責人、承接的單位、開始時間、計劃完成時間,工程簡介等。通過這一XML的描述,可以較為清晰地將數據庫表中的數據進行描述。
本文在研究的過程中,主要是采用Schema方法來對數據表的結構和相互之間的關系進行描述,并對目前已有的基于Schema方式的數據表結構描述方法進行了研究,分析其存在的問題,并針對這些問題提出了一種優化的Schema映射方案。新的映射方案的主要特點是對Schema中可能出現的多種類型的元素進行了考慮,使其能夠更加準確地對數據表結構進行描述。改進的Schema模式也是基于層次性的結構對關系數據庫中的數據模式進行描述,但它將不同的數據結構進行了更為細致和準確的分類,主要分為五類元素,分別為單一元素、組合元素、有嵌套關系的組合元素、非單一值元素、可選元素以及分組元素。針對不同的XML文檔中的元素,分別制定其到關系數據模型的轉換映射。
針對組合型的復雜XML元素,在關系數據庫中建立一個關系對象,將復雜元素的name屬性值賦給該關系對象作為名字,并對該關系對象建立一個ID值,并作為關系的主鍵。
針對組合型復雜XML元素中的復雜XML元素,并且該元素是一個多值元素,則需要為該組合元素新建一個關系對象;并將該元素的name屬性值賦予這一對象;并創建一個ID值,作為該關系對象的主鍵;并對該關系對象的父對象創建一個新的字段值;并將以FK_為前綴,與被嵌套的元素建立主從關系的聯系。
對于組合元素中的單一元素,可以直接映射為關系對象中的一個單一屬性字段,這一步轉換較為簡單。
對于組合元素中的單一屬性,可以直接映射為關系對象中的一個單一屬性字段,該轉換較為簡單。
對于XML文檔中的可選元素或者屬性值,在關系對象中針對該元素應創建一個關系對象,并將該對象的主鍵設置為其所屬組合元素所對應關系對象的外鍵,其形式如:(ID,FK_FatherID,value)。
依據如上所述的映射關系規則,利用編程語言對其進行實現,就可以實現從XML文檔所描述的數據模式向關系數據模式的轉換,然后在關系數據庫中根據XML所確定的關系模式,建立關系數據表,為存儲源數據做好準備。
XML文檔到數據庫表的轉換示意如圖2所示。

圖2 X2D工作流程圖
異構數據庫之間的數據同步也是集成系統中重要的組成部分。傳統的數據同步處理方式主要有快照差分算法和基于日志的同步方法。然而這兩種同步的方法都有著較為明顯的缺陷。快照差分算法采用對整個數據庫進行處理的方法,需要大量的存儲空間,而且當數據量較大時,其對數據的排序、對比分析等處理都需要占用大量的計算資源,導致數據同步的效率將會急劇下降。基于日志的異構數據庫同步解決方案雖然在理論上,效率方面相比于前一種策略有了較為明顯的提升,但由于技術上的限制,這一方案在具體的實現過程中會碰到很多問題。
針對異構數據庫中數據的增量同步問題,本課題重點對其特點進行了研究,提出一種基于Web Service的數據增量同步解決方案。
對于壓縮數據傳輸體積的問題,傳輸的方式是基于觸發器的方式,這一方式屬于同步更新方式,也就是源數據庫一發生數據的改變,目標數據庫立即得到信息,并隨之進行更改。這一方式將會導致網絡中的數據負載激增,如果源數據庫操作較為頻繁,則會使同步的效率大大下降。為了解決這一問題,本研究采用了異步更新的方案,只記錄源數據庫中數據的改變情況,包括增加、刪除、更新等,而目標數據庫僅是對對應于源數據庫的增量部分進行更新操作。
對于數據庫之間的異構問題,主要采用的是上一節研究的基于XML的數據集成模塊,對應于不同的異構數據庫,設計開發一個數據轉換的構件,利用這一構件實現數據表結構和數據內容的轉換與加載。
基于Web Service的異構數據庫系統數據同步模型是構建于分布式的網絡,其主要的組成包括三個部分,分別是本地數據與XML文檔之間的映射與轉換流程,網絡傳輸流程,遠程的XML文檔與目標數據庫表之間的解析與加載流程,其結構如圖3所示。
根據上述異構數據庫集成方案的設計,利用編輯語言具體實現了實驗平臺,對方案的功能和性能進行驗證。

圖3 基于Web Service的數據同步更新模型
重點討論數據轉換功能的實現,界面如圖4所示。

圖4 數據庫結構到XML文檔轉換中的結構描述界面
該功能的實現代碼如下:

實驗證明,文本所設計的方案能夠快速高效地實現數據庫表與XML文檔結構的轉換,以及異構數據描述信息的轉換,在理論上和實踐應用中都具有一定的意義。
本文利用XML Schema具體實現了數據轉換與集成的過程,由于XML Schema既可利用基本數據格式,又可以自定義用戶的數據格式,利用這一特點,定義了關系數據庫的描述模式,以及XML文檔的數據結構,從而實現對XML文檔的約束和檢查。XML Schema在關系數據庫的數據表定義和XML數據文件之間建立起了映射機制,利用該映射機制,關系數據庫中的數據可以與XML數據文件中的數據方便地進行雙向交換。由于XML數據文檔中的數據格式可由開發人員定義并統一,因此,利用該方法可以方便地實現數據庫中數據的集成。
[1]劉敏超,劉衛東.數據集成系統關鍵問題研究[J].計算機應用,2009(7):45-48.
[2]A.Halevy,A.Rajaraman,J.Ordille.Data integration:the teenage years[C]//Proceedings of the 32nd international conference on Very large data bases.2008,VLDB Endowment:Seoul,Korea:9-16.
[3]孟小峰,周龍驤,王珊.數據庫技術發展趨勢[J].軟件學報,2007,15(12):1822-1836.
[4]E.Rahm,P.A.Bernstein.A survey of approaches to automatic schema matching[J].The VLDB Journal The International Journal on Very Large Data Bases,2010,10(4):334-350.
[5]A.Chatterjee,A.Segev.Rule based joins in heterogeneous databases[J].DecisionSupport Systems,2009,13(3-4):313-333.
[6]D.Dey,S.Sarkar,P.De.A Probabilistic Decision Model for Entity Matching in Heterogeneous Databases[J].Management Science,2008,44(10):1379-1395.
[7]P.De.A Distance-Based Approach to Entity Reconciliation in Heterogeneous Databases[J].IEEE TRANSACTIONS ON KNOWLEDGE ANDDATA ENGINEERING,2002:567-582.
[8]K.Lerman,S.Minton,C.Knoblock.Wrapper maintenance:A machine learning approach[J].Journal of Artificial Intelligence Research,2008,18:149-181.