虛擬數據庫(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 包括以下組件:
各組件的關系如下:
圖1-3 Teiid 的組件
此外在 Teiid 發布包中還包括一些工具,主要有:
在 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 ,你需要先在系統裡安裝下面組件:
一切就緒之後,就可以下載安裝 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:\jboss\standalone\configuration\mgmt-users.properties’
Added user ‘raylinn’ to file ‘C:\jboss\domain\configuration\mgmt-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):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>這裡我們來解釋一下上面的 VDB XML 結構:
當然我們還需要為這兩個數據源建立其 JNDI 查找,這樣動態 VDB 才能獲得數據庫連接信息。如何編寫JNDI 查找的 XML 文件可以參考 docs/teiid/datasource 目錄中的例子和說明。不過注意 marketdata 的JNDI 查找是要歸並到 standalone-teiid.xml 配置文件中,這和數據庫的不太一樣。
一旦 JNDI 查找部署成功,就可以部署動態 VDB 了,只需要將 “portfolio-vdb.xml” 拷貝到以下文件夾中,
<jboss-install>/standalone/deployments該動作會觸發 Teiid 運行時自動加載 VDB,同時還會驗證數據源是否可用,一旦成功加載,在 Admin Console 中 VDB 狀態將顯示為 “Active”。
除了這種方式外,你還可以使用 Admin Console 或者 Admin Shell 來將虛擬數據局部署到遠程服務器或者群集上,這裡給出用命令行方式的部署方法:
bin/jboss-admin.shTeiid 的詳細介紹:請點這裡
Teiid 的下載地址:請點這裡