2021-05-12 14:32:11
Teiid 基於資料聯邦的整合方案
虛擬資料庫(Virtual Database–VDB) 是將一個或多個物理資料來源組合起來以提供更簡單的資料整合解決方案,它提供了包含元件的容器,這些元件用來整合不同資料來源的資料,並通過一致的 API 來存取它們。這些物理資料來源包括: JDBC 資料來源、CSV 文字檔案、資料表,甚至可以是 Web services。這種技術被稱為是“資料聯邦” -Data federation。資料聯邦技術提供了一種為資料提供抽象的資料介面的能力。這些多個資料來源組成的虛擬檢視可以使資料消費者(應用)不需要知道資料的物理位置、資料結構和儲存方式。
與其它資料整合技術相比,資料聯邦技術的明顯優勢在於獲取資料的方便性和實時性。現在很多企業都在實現 SOA,SOA 的靈活性和敏捷性要求組織提供資料時應該具有更少的時延。以前的利用批次任務或者 ETL 的方式建立資料市集和資料倉儲的方式的實時性都不太好,在很多應用場景中被資料聯邦技術所取代。
但是資料聯邦技術存取資料是通過一個“聯邦”檢視(federation view)來實現的,檢視是實時的。隨著企業資料量的增大,效能問題是所有資料整合(Data Integration tools)都面臨的問題,但是由於設計上的根本缺陷,資料聯邦在這方面雖有很大進展,但是仍無法和另外一些資料整合技術相比。這種缺點制約了它在資料整合領域的適用性,雖然很多領域都使用了資料聯邦技術,但是在關鍵的核心業務系統它的應用非常少。
圖1-1 資料聯邦
目前已實施資料聯邦專案的特點如下:使用簡單的有限的資料來源,資料結果集不大,唯讀性的資料存取,資料品質要求簡單。比較典型資料聯邦產品有:BEA 的 AquaLogic Data Services Platform、IBM 公司的 Federation Server、Software AG 公司的 Enterprise Information Integration、Sybase 的 DataFederation 以及 Red Hat 公司的 JBoss MetaMatrix,其開源實現即 Teiid。
什麼是 Teiid?Teiid 是一個資料虛擬化系統,由工具、元件、和服務組成,用於建立和執行雙向資料服務,它提供了針對虛擬資料庫(VDB)執行查詢的執行時,使應用程式能夠使用來自多個異構儲存的資料。通過抽象和聯邦技術,實現分散式資料來源的實時資料存取和整合,無需從記錄系統中複製或移動資料。利用 Teiid, 使用者可以用設計器或者動態 VDB 等功能來建立 VDB,然後以聯邦方式來存取資料了。如圖 1-2。
圖1-2 Teiid 執行時
Teiid 中的模型在電腦科學中,模型是資訊結構集合的表現形式。常見的模型有關係模式,它定位了由列和資料記錄構成的表格。另一種常見的模型是 XML 模型, 它定義了層級的資料集合。在 Teiid 虛擬資料庫也有模型的概念,模型被定義為實體和實體之間的關係,實體代表著被整合且暴露給應用的資訊,必須被完整地定義。
在 Teiid 中使用兩大類模型 — 源模型(Source Model) 和檢視模型 (View Model)。所謂源模型定義了資料來源所包含的資訊的結構化和資料特徵。Teiid 將源模型中的資訊對映到不同資料來源中的資訊,從使用者的角度上看,就如同單一的資料來源一樣。
在源模型之外,Teiid 還提供了定義檢視模型的功能。檢視是模型之間的變,通過檢視模型可以在物理層之上再定義一個抽象層,因此呈現給使用者的資訊可以更貼近商業需要,而不是其原始的物理儲存。這些商業檢視可以以多種形式呈現:關係型、XML 或 Web Services 等等。
總之,源模型表示的是物理資料來源的結構和特徵,而檢視模型則表達的是要呈現給應用的抽象資料結構的結構與特徵。
圖1-2 虛擬資料庫內部
模型必須處於有效狀態,這樣 VDB 才能將之用於資料存取。對單個模型的驗證意味著該模型必須是處於自洽(self-consistent)和完整狀態,也就是該模型無任何缺失或參照不存在的實體。對多個模型的驗證將會檢查所有內部模型的依賴是存在且可分解的。
Teiid 的元件
Teiid 包括以下元件:
- 查詢引擎(Teiid Query Engine):Teiid 的核心是一個高效能的查詢引擎,處理來自聯邦資料來源的關係型、XML、XQuery 和(儲存)過程型的查詢,支援同構模式(homogenous schema)、異構模式(hetrogenous schema)、事務(transaction)和使用者定義函數(user defined function)。
- 虛擬資料庫
- 聯結器框架(Connector Framework):包括轉換器和資源介面卡。轉換器提供了查詢引擎和物理資料來源之間的抽象層,它可以把 Teiid 發出的查詢命令轉換成資料來源特定的命令,並通過資源介面卡執行這些命令。
- Teiid 控制台:提供 Web 介面讓使用者來監控 Teiid 的執行。
- Admin Shell:用 Groovy 編寫的 Shell 介面,支援用命令列或指令碼來實現自動化管理和任務測試。
各元件的關係如下:
圖1-3 Teiid 的元件
此外在 Teiid 發布包中還包括一些工具,主要有:
- 設計器:Teiid 設計器是基於 Eclipse 的 GUI 工具,用來定義虛擬資料庫, 包含檢視、儲存過程,甚至動態的XML文件。
- 聯結器開發工具 -用來開發使用者自定義的轉換器和資源介面卡。
在 Teiid 有兩種方法來建立 VDB 。你可以建立動態 VDB,這種 VDB 由簡單的 XML 檔案定義,該 XML 檔案定義了它想要整合的資料來源,並通過 JDBC 提供了存取。使用者編寫針對該 VDB 的查詢,可以使用所有定義的資料來源,就象是用單一的資料來源一樣。但是動態 VDB 不提供檢視抽象層。
你也可以使用 Teiid 設計器來建立 VDB。它不但可以用來定義資料來源模型,並由此匯入後設資料和統計資料(statistics),還允許在這些資料來源之上定義關聯和 XML 檢視。這可以讓使用者對底層的物理資料結構進行抽象,暴露出所需的資訊結構給應用程式使用。
VDB 必須總是處於一種完整狀態(complete state),這意味著所有的資訊都包含在 VDB ,不能有外部的依賴。當定義好 VDB 之後,它必須被部署到 Teiid runtime 中,如果部署過程中沒有錯誤,而且底層的資料來源被正確設定,VDB 就可以被客戶應用存取了。一旦 VDB 被部署,就可以通過 JDBC-SQL,SOAP (Web Services), SOAP-SQL, 或者 XQuery 進行存取。
圖1-4 將 VDB 部署到 runtime中
至此,我們介紹了 Teiid 的一些重要概念,接下來我們將學習如何建立和發布一個虛擬資料庫。so let’s begin!
下載和安裝 Teiid為了執行 Teiid ,你需要先在系統裡安裝下面元件:
- Java 6 (OpenJDK 或者 Oracle JDK)
- Maven 3 這是執行範例需要的一個小工具
- JBoss AS ,最新版本是 7.1.1,直接解壓即可。
一切就緒之後,就可以下載安裝 Teiid 執行時了,目前最新版本是 8.2.0 (teiid-8.2.0.Final-jboss-dist.zip),你只需要將所有的內容解壓到 JBoss AS 的安裝目錄中去即可。 由於 Teiid 和 JBoss AS 的目錄結構完全一樣,因此 Teiid 會被歸併到相應的目錄中。建議下載 Admin Console 和 Admin Shell 這兩個管理工具包,安裝方式和 runtime 類似。
用下面的命令來啟動 JBoss AS 的 Standalone 模式:
<jboss-install>/bin/standalone.sh -c=standalone-teiid.xml
要進入Admin Console 必須新增管理使用者,執行 add-user.bat 並輸入:
What type of user do you wish to add?
a) Management User (mgmt-users.properties)
b) Application User (application-users.properties)
(a):
Enter the details of the new user to add.
Realm (ManagementRealm) :
Username : raylinn
Password :
Re-enter Password :
About to add user ‘raylinn’ for realm ‘ManagementRealm’
Is this correct yes/no? yes
Added user ‘raylinn’ to file ‘C:jbossstandaloneconfigurationmgmt-users.properties’
Added user ‘raylinn’ to file ‘C:jbossdomainconfigurationmgmt-users.properties’
Press any key to continue . . .
現在你可以在瀏覽器中輸入 http://localhost:8080/ 進入到 JBoss 歡迎介面,點選介面上的 “Administration Console” 連結就看到管理介面,如圖1-5所示:
圖1-5 Admin Console 介面。
建立虛擬資料庫在 Teiid 中,你可以用設計器或者通過稱為動態 VDB 的 XML 檔案來建立虛擬資料庫。我們首先了解如何使用動態 VDB 的方式,稍後我們會學習使用設計器。注意:如果你的應用需要在資料來源之上使用檢視層,你必須使用設計器。
我們用投資組合來作為範例,演示 Teiid 如何整合多個資料來源,並使用單個查詢從多個資料來源中返回結果。使用資料聯邦技術很容易就能整合新的資料來源,而不需要暴露任何存取資訊。
在這個例子中,我們會用到兩個資料來源: 儲存在 H2 資料庫的帳戶資訊(關係型),以及在儲存在 CSV 檔案中的股票價格(非關係型)。我們會建立一個動態 VDB,名為 DynamicPortfolio,在該 XML 檔案中為每個資料來源定一個模型:即 Account 和 MarketData。當你將這個 VDB 將部署到 Teiid 執行時,應用程式就能夠使用 JDBC 來存取它。
圖1-6 範例:通過動態 VDB 存取資料來源
查詢語句會關聯模型 Accounts 和 MarketData 中的資料,在後台,Teiid 會同時存取關係型和非關係型資料來源,計算出投資利潤,並返回結果。DynamicPortfolio 的內容如下(portfolio-vdb.xml):
<vdb name="Portfolio" version="1">
<description>The Portfolio Dynamic VDB</description>
<property name="UseConnectorMetadata" value="true" />
<model name="MarketData">
<source name="text-connector" translator-name="file" connection-jndi-name="java:/marketdata-file"/>
</model>
<model name="Accounts">
<property name="importer.useFullSchemaName" value="false"/>
<source name="h2-connector" translator-name="h2" connection-jndi-name="java:/accounts-ds"/>
</model>
</vdb>
這裡我們來解釋一下上面的 VDB XML 結構:
- 元素 “vdb” 定義了虛擬資料庫的名稱和版本,在例子中為 “Portfolio” 版本為 1。
- 元素 “model” 表示被整合的 schema。在例子中我們定義了兩個資料來源,“MarketData” 表示儲存股票資訊的文字檔案的 Schema,”Accounts” 則用來表示 HSQL 資料庫的 Schema。
- “model”元素的子元素“source”,其有關屬性分別定義了資料來源的名稱(任意名稱),轉換器的名字(定義了資料來源的型別,比如 oracle、 db2、 mysql、 h2、file、 ws 等等),隨後的 “connection-jndi-name” 則定義了資料來源在 JBoss AS 容器中的 JNDI 名稱
- 同樣在 “model” 元素裡,你還可以找到一些 “property” 元素,這些元素用來定義後設資料如何從資料來源中被匯入的。其含義可以查閱動態 VDB 參考手冊。
當然我們還需要為這兩個資料來源建立其 JNDI 查詢,這樣動態 VDB 才能獲得資料庫連線資訊。如何編寫JNDI 查詢的 XML 檔案可以參考 docs/teiid/datasource 目錄中的例子和說明。不過注意 marketdata 的JNDI 查詢是要歸併到 standalone-teiid.xml 組態檔中,這和資料庫的不太一樣。
一旦 JNDI 查詢部署成功,就可以部署動態 VDB 了,只需要將 “portfolio-vdb.xml” 拷貝到以下資料夾中,
該動作會觸發 Teiid 執行時自動載入 VDB,同時還會驗證資料來源是否可用,一旦成功載入,在 Admin Console 中 VDB 狀態將顯示為 “Active”。
除了這種方式外,你還可以使用 Admin Console 或者 Admin Shell 來將虛擬資料區域性署到遠端伺服器或者群集上,這裡給出用命令列方式的部署方法:
command and run
# in stand alone mode
deploy /path/to/my.vdb
# in domain mode
deploy –all-server-groups /path/to/my.vdb
相關文章