數(shù)據(jù)集成中間件(數(shù)據(jù)庫)
時間:2022-11-14 10:30:01 | 來源:信息時代
時間:2022-11-14 10:30:01 來源:信息時代
數(shù)據(jù)集成中間件 : 支持不同來源、格式和性質(zhì)的數(shù)據(jù)源進(jìn)行邏輯上或物理上有機(jī)集成,為分布、自治、異構(gòu)的數(shù)據(jù)源提供可靠轉(zhuǎn)換,加載與統(tǒng)一訪問服務(wù)的中間件。在當(dāng)前的大型數(shù)據(jù)庫應(yīng)用系統(tǒng)中,數(shù)據(jù)資源通常分布在網(wǎng)絡(luò)的不同節(jié)點上,存儲在不同的數(shù)據(jù)庫中,而且格式、語義都可能存在異構(gòu),數(shù)據(jù)集成中間件的主要功能便是通過對不同來源、格式和特性的數(shù)據(jù)的轉(zhuǎn)換與包裝,提供統(tǒng)一的高層訪問服務(wù),實現(xiàn)各種異構(gòu)數(shù)據(jù)源的共享。
為解決不同類型的數(shù)據(jù)庫管理系統(tǒng)之間的數(shù)據(jù)交換問題,微軟于20世紀(jì)90年代初提出了開放式數(shù)據(jù)庫連接(ODBC)技術(shù),它試圖建立一種統(tǒng)一的應(yīng)用程序訪問數(shù)據(jù)庫的接口,開發(fā)人員無需了解數(shù)據(jù)庫內(nèi)部的結(jié)構(gòu)就可以實現(xiàn)對數(shù)據(jù)庫的訪問。后來,隨著Java語言的出現(xiàn),也隨之出現(xiàn)了Java數(shù)據(jù)庫互連標(biāo)準(zhǔn)(JDBC),JDBC是執(zhí)行SQL語句的Java API。它由一組用Java語言編寫的類與接口組成。隨著計算機(jī)技術(shù)的發(fā)展,ODBC在面對新的數(shù)據(jù)驅(qū)動程序的設(shè)計和構(gòu)造方法時,遇到了困難,對象鏈接嵌入數(shù)據(jù)庫(OLE DB)技術(shù)應(yīng)運(yùn)而生。它在設(shè)計上采用了多層模型,對數(shù)據(jù)的物理結(jié)構(gòu)依賴更少。為適應(yīng)網(wǎng)絡(luò)環(huán)境下分布式系統(tǒng)的開發(fā)需求,誕生了ADO(ActiveX data object)技術(shù),ADO對OLE DB做了進(jìn)一步的封裝,它以數(shù)據(jù)庫為中心,具有更多的層次模型,更豐富的編程接口,大致相當(dāng)于OLE DB的自動化版本。ADO.NET是ADO的發(fā)展產(chǎn)物,更具有通用性。它成功實現(xiàn)了在連接斷開的概念下實現(xiàn)客戶端對服務(wù)器上數(shù)據(jù)庫的訪問。
以上解決了異構(gòu)數(shù)據(jù)庫的統(tǒng)一訪問問題,但是在數(shù)據(jù)集成應(yīng)用過程中,還存在數(shù)據(jù)的格式、表示以及含義的不同,即數(shù)據(jù)轉(zhuǎn)換等問題,還需要用戶自己實現(xiàn)。為解決此問題,20世紀(jì)80年代末出現(xiàn)了聯(lián)邦式數(shù)據(jù)庫、數(shù)據(jù)倉庫和基于中間件模型的方法。其中,聯(lián)邦式數(shù)據(jù)庫(federated database system,FDBS)由半自治數(shù)據(jù)庫系統(tǒng)構(gòu)成,相互之間分享數(shù)據(jù),聯(lián)盟各數(shù)據(jù)源之間相互提供訪問接口,同時聯(lián)邦數(shù)據(jù)庫系統(tǒng)可以是集中數(shù)據(jù)庫系統(tǒng)或分布式數(shù)據(jù)庫系統(tǒng)。緊耦合FDBS有一個或幾個統(tǒng)一的模式,要解決邏輯上的異構(gòu),需要領(lǐng)域?qū)<覜Q定數(shù)據(jù)庫模式間的對應(yīng)關(guān)系。松耦合則不提供統(tǒng)一的接口,但可以通過統(tǒng)一的語言訪問數(shù)據(jù)源,其中核心的是必須解決所有數(shù)據(jù)源語義上的問題。聯(lián)邦數(shù)據(jù)庫集成系統(tǒng)適合于自治數(shù)據(jù)庫的數(shù)量比較小的情況,而且希望數(shù)據(jù)庫能夠保持“獨(dú)立”,允許用戶單獨(dú)查詢,數(shù)據(jù)庫間能夠彼此聯(lián)合回答查詢的情況,屬于邏輯上的數(shù)據(jù)集成。
數(shù)據(jù)倉庫是在企業(yè)管理和決策中面向主題的、集成的、與時間相關(guān)的和不可修改的數(shù)據(jù)集合。該方法需要建立一個存儲數(shù)據(jù)的倉庫,由ETL(extract,transform and load)工具定期從數(shù)據(jù)源過濾數(shù)據(jù),然后裝載到數(shù)據(jù)倉庫,供用戶查詢。
中間件模式通過統(tǒng)一的全局?jǐn)?shù)據(jù)模型來訪問異構(gòu)的數(shù)據(jù)庫、遺留系統(tǒng)和Web資源等。中間件位于異構(gòu)數(shù)據(jù)源系統(tǒng)(數(shù)據(jù)層)和應(yīng)用程序(應(yīng)用層)之間,向下協(xié)調(diào)各數(shù)據(jù)源系統(tǒng),向上為訪問集成數(shù)據(jù)的應(yīng)用提供統(tǒng)一數(shù)據(jù)模式和數(shù)據(jù)訪問的通用接口。各數(shù)據(jù)源的應(yīng)用仍然完成它們的任務(wù),中間件系統(tǒng)則主要集中為異構(gòu)數(shù)據(jù)源提供一個高層次數(shù)據(jù)訪問服務(wù)。
目前比較流行的數(shù)據(jù)集成方法是中間件模式,它通過在中間層提供一個統(tǒng)一的數(shù)據(jù)邏輯視圖來隱藏底層的數(shù)據(jù)細(xì)節(jié),使得用戶可以把集成數(shù)據(jù)源看為一個統(tǒng)一的整體。該模型下的關(guān)鍵問題是如何構(gòu)造這個邏輯視圖并使得不同數(shù)據(jù)源之間能映射到這個中間層。
數(shù)據(jù)集成中間件的主要功能構(gòu)件由數(shù)據(jù)訪問適配器、元數(shù)據(jù)、數(shù)據(jù)建模與管理及抽取、轉(zhuǎn)換、加載和統(tǒng)一視圖等主要功能構(gòu)件組成,其中,加載構(gòu)件是數(shù)據(jù)物理的集成到目標(biāo)數(shù)據(jù)庫中的構(gòu)件,統(tǒng)一視圖是數(shù)據(jù)邏輯的集成的構(gòu)件。如圖1所示。
圖1 數(shù)據(jù)集成中間件體系結(jié)構(gòu)圖
數(shù)據(jù)集成中間件的關(guān)鍵技術(shù)包括:
(1)數(shù)據(jù)抽取:基于中間件的數(shù)據(jù)抽取主要包括異構(gòu)數(shù)據(jù)訪問方法、數(shù)據(jù)庫適配器和數(shù)據(jù)抽取等關(guān)鍵技術(shù)。其中,異構(gòu)數(shù)據(jù)訪問方法包括通用SQL API方法、通用網(wǎng)關(guān)、通用協(xié)議和基于構(gòu)件技術(shù)的統(tǒng)一數(shù)據(jù)訪問接口等。通用SQL API方法即在客戶端的所有應(yīng)用程序都采用通用的SQL API訪問數(shù)據(jù)庫,而由不同的DBMS Server提供不同的數(shù)據(jù)庫驅(qū)動程序。通用網(wǎng)關(guān)方法是在客戶端有一個公共的客戶機(jī)驅(qū)動程序,在服務(wù)器端有一個網(wǎng)關(guān)接受程序,它捕獲進(jìn)來的格式和協(xié)議信息,然后進(jìn)行轉(zhuǎn)換,送至本地的SQL接口。通用協(xié)議方法是指公共的API,并且有一個單一的數(shù)據(jù)庫管理接口。公共格式支持適用于所有的SQL方言的超級設(shè)置或容忍全部本地SQL方言通過?;诮M件技術(shù)的統(tǒng)一數(shù)據(jù)訪問接口,即UDA(universal data access)技術(shù),包括底層系統(tǒng)級編程接口和高層應(yīng)用級編程接口。數(shù)據(jù)庫適配器是對異構(gòu)數(shù)據(jù)庫的抽象數(shù)據(jù)源,屏蔽異構(gòu)數(shù)據(jù)庫的訪問方法,針對數(shù)據(jù)集成中間件提供統(tǒng)一的數(shù)據(jù)訪問方法,并可以實現(xiàn)數(shù)據(jù)集成的可擴(kuò)展性。數(shù)據(jù)抽取包括完整抽取和數(shù)據(jù)增量抽取。數(shù)據(jù)增量抽取包括基于快照表的數(shù)據(jù)增量抽取、條件的數(shù)據(jù)增量抽取。其中快照表可以由系統(tǒng)自動生成,也可由用戶指定。數(shù)據(jù)抽取的策略有實時、輪詢和定時等方法。
(2)數(shù)據(jù)建模與管理:數(shù)據(jù)集成中的關(guān)鍵是對數(shù)據(jù)進(jìn)行概念建模和在概念建?;A(chǔ)之上的集成支持。只有建立數(shù)據(jù)的概念模型,才能對數(shù)據(jù)進(jìn)行統(tǒng)一標(biāo)示和編寫目錄,確定元數(shù)據(jù)模型。只有對數(shù)據(jù)建立統(tǒng)一的模型后,數(shù)據(jù)才有在分布式數(shù)據(jù)庫中共享的可能。數(shù)據(jù)建模主要是針對抽取、轉(zhuǎn)換過程中的模式、規(guī)則進(jìn)行建模,形成元數(shù)據(jù),以便數(shù)據(jù)集成中間件在抽取與訪問時使用。
數(shù)據(jù)抽取建模任務(wù)滿足從源數(shù)據(jù)中挑選有價值的數(shù)據(jù)進(jìn)行整合和交換,并能通過配置來適應(yīng)需求的變化。數(shù)據(jù)抽取建模任務(wù)通過訪問元數(shù)據(jù)庫,提供對單表多表、可選域段及表關(guān)聯(lián)的任務(wù)建模,還可定義任務(wù)順序和對任務(wù)進(jìn)行分組,它與數(shù)據(jù)抽取的特性相關(guān)聯(lián)。
數(shù)據(jù)映射建模包括數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)過濾兩部分建模。數(shù)據(jù)轉(zhuǎn)換,包括元數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)轉(zhuǎn)換構(gòu)件。元數(shù)據(jù)轉(zhuǎn)換,包括元數(shù)據(jù)映射表增刪和配置; 數(shù)據(jù)轉(zhuǎn)換構(gòu)件,包括數(shù)據(jù)映射表及映射規(guī)則的配置、表名轉(zhuǎn)換、前綴轉(zhuǎn)換、域轉(zhuǎn)換、值轉(zhuǎn)換構(gòu)件,實現(xiàn)數(shù)據(jù)映射。映射建模包括表名轉(zhuǎn)換、加前綴或后綴、增刪域段、提供缺省值、值轉(zhuǎn)換等。數(shù)據(jù)過濾建模,包括基于規(guī)則定義數(shù)據(jù)過濾,如簡單的表過濾、前綴或后綴過濾、域過濾、值過濾,實現(xiàn)數(shù)據(jù)過濾等功能。
(3)元數(shù)據(jù):元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù)。對于各種數(shù)據(jù)庫,其元數(shù)據(jù)都是不相同的。為了兼容和統(tǒng)一數(shù)據(jù)的描述,數(shù)據(jù)集成中間件通過對各種數(shù)據(jù)庫的元數(shù)據(jù)進(jìn)行分析,定義一套統(tǒng)一的元數(shù)據(jù)。并需要定義各種數(shù)據(jù)庫元數(shù)據(jù)與統(tǒng)一元數(shù)據(jù)之間的映射關(guān)系,以及統(tǒng)一元數(shù)據(jù)到具體數(shù)據(jù)庫元數(shù)據(jù)之間的映射關(guān)系。
(4)數(shù)據(jù)轉(zhuǎn)換:數(shù)據(jù)轉(zhuǎn)換是指對從源數(shù)據(jù)中抽取的數(shù)據(jù)進(jìn)行整理、拆分、匯總等處理,保證數(shù)據(jù)按要求裝入目標(biāo)數(shù)據(jù)庫。數(shù)據(jù)轉(zhuǎn)換是數(shù)據(jù)集成過程的核心環(huán)節(jié),包括數(shù)據(jù)變換和實例層數(shù)據(jù)清洗兩個步驟。變換指的是對數(shù)據(jù)的格式和語義按照元數(shù)據(jù)模型的定義進(jìn)行統(tǒng)一轉(zhuǎn)換; 清洗指的是確保數(shù)據(jù)集中的所有數(shù)值是一致的和被正確記錄的。由于各種數(shù)據(jù)差異很大,而且普遍存在數(shù)據(jù)格式、語義上的不一致問題,因此數(shù)據(jù)轉(zhuǎn)換是數(shù)據(jù)集成過程中最復(fù)雜、最繁重的工作。
數(shù)據(jù)轉(zhuǎn)換的作用是將抽取到的數(shù)據(jù)逐字段地映射到目標(biāo)數(shù)據(jù)庫的新數(shù)據(jù)結(jié)構(gòu)上。實現(xiàn)數(shù)據(jù)集成的困難在于如何將它們集成為一個緊密的數(shù)據(jù)模型,因為數(shù)據(jù)從多個數(shù)據(jù)源中抽取,往往具有不同的格式和語義,生成新的數(shù)據(jù),必須充分考慮這種差異。數(shù)據(jù)變換可大致分為兩類: 字段水平的簡單映射和復(fù)雜集成。字段水平的簡單映射是數(shù)據(jù)中的一個字段被轉(zhuǎn)移到目標(biāo)數(shù)據(jù)字段中的過程。數(shù)據(jù)變換其他工作量是進(jìn)行數(shù)據(jù)的復(fù)雜集成,它需要做更多的分析,包括通用標(biāo)識符問題、目標(biāo)元素的多個來源、計算數(shù)據(jù)、聚集數(shù)據(jù)、衍生數(shù)據(jù)等。實例層數(shù)據(jù)清洗用來檢查字段或記錄的實際內(nèi)容,消除不合要求數(shù)據(jù),保證集成數(shù)據(jù)的質(zhì)量。實例層數(shù)據(jù)清洗過程需要檢查的是字段或記錄的實際內(nèi)容而不僅是存儲格式,并提供解決方法,包括: 檢查數(shù)據(jù)字段中的有效性,結(jié)合一定的領(lǐng)域知識將不合要求數(shù)據(jù)轉(zhuǎn)換為符合數(shù)據(jù)質(zhì)量的數(shù)據(jù)。
(5)數(shù)據(jù)加載和統(tǒng)一視圖:數(shù)據(jù)加載包括數(shù)據(jù)的實時加載和數(shù)據(jù)的發(fā)布/訂閱技術(shù)。數(shù)據(jù)的實時加載,通過按照元數(shù)據(jù)的規(guī)則,將轉(zhuǎn)換與過濾完的數(shù)據(jù)實時加載到目標(biāo)數(shù)據(jù)庫中。保證源數(shù)據(jù)和目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)同步則是數(shù)據(jù)加載中的關(guān)鍵技術(shù),特別是在分布式異步數(shù)據(jù)集成的環(huán)境下,減少數(shù)據(jù)傳輸過程中的冗余量,實現(xiàn)數(shù)據(jù)的同步的高效性和增量報送成為數(shù)據(jù)同步的目標(biāo)。實現(xiàn)數(shù)據(jù)同步有兩種方法:如果數(shù)據(jù)源是功能完備的數(shù)據(jù)庫系統(tǒng),則可以通過定義一組觸發(fā)器,或者通過讀取日志的方式來檢測分析數(shù)據(jù)源的變化,實現(xiàn)數(shù)據(jù)同步。對于任意類型的數(shù)據(jù)源,都可以采用基于快照差分的方法實現(xiàn)數(shù)據(jù)同步。
數(shù)據(jù)發(fā)布技術(shù),提供向消息代理或其他消息中間件的數(shù)據(jù)發(fā)布方法。數(shù)據(jù)發(fā)布配置,包括連接特性、傳輸質(zhì)量特性和內(nèi)容特性(主題特性)的配置。數(shù)據(jù)訂閱,提供向消息代理或其他消息中間件的數(shù)據(jù)訂閱。數(shù)據(jù)訂閱特性配置,包括連接特性、訂閱內(nèi)容(主題)和過濾規(guī)則的配置。
統(tǒng)一視圖是針對數(shù)據(jù)邏輯上的集成到一起而提供的數(shù)據(jù)虛擬加載技術(shù),它不將數(shù)據(jù)物理的加載到目標(biāo)數(shù)據(jù)庫中,而是針對用戶的請求,按照統(tǒng)一視圖的規(guī)范,根據(jù)元數(shù)據(jù)的定義,對查詢進(jìn)行分解,并從源數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)抽取和轉(zhuǎn)換,形成滿足數(shù)據(jù)訪問請求的結(jié)果返回給對方。因為數(shù)據(jù)訪問統(tǒng)一視圖針對用戶的每次查詢都是實時的去查詢并轉(zhuǎn)換和集成結(jié)果,因此,不涉及數(shù)據(jù)物理集成過程中的同步問題。