引言
數據是各個企業的無形資產,各種各樣的數據庫技術在企業的 IT 環境中得到了豐富的應用。利用好數據庫讓數據在企業各部門的協同工作中順暢交互從而提高工作效率,這在企業的 IT 框架中顯得越來越重要。在大型現代企業中,組織中的各部門使用不同數據庫管理系統來存儲和搜索其重要數據,這幾乎是不可避免的。
競爭、不斷發展的技術、合並、收購、地域分布以及擴展中不可避免的分散等因素都會造成這種多樣性。在整合企業各部門之間辦公應用程序時,結構化的關系型數據的交互較為容易,基於標准的 SQL 語言開發相應應用程序很容易實現這種整合。但是,作為企業應用,很多數據可能是非結構化的或者半結構化的。實現這種數據的交互成為企業應用整合的一大挑戰。例如很多企業使用了 Domino/Notes 的半結構化的文檔型數據庫。很多大型企業使用了 IBM 的 Domino 作為郵件系統和工作流系統。與普通郵件系統相比,Domino 提供的便利的二次開發特性在為企業基於 Domino 實現工作流,從而實現企業各部門之間協同工作,提高工作效率方面的優勢尤為突出。但是各個企業部門的 IT 發展情況不同,在實現 Domino 應用和其它部門基於關系型數據庫的應用程序如 ERP、CRM 系統之間數據共享,協同工作時數據的交互往往是架構人員頭痛的問題。
本文將提出一種基於 Domino 新特性和 DB2 數據聯邦技術的企業應用整合方式,輕松實現 Domino 應用和其它基於關系型數據庫應用的數據交互。
在集成基於關系型數據庫(RDB)的傳統應用和 Domino 應用時,通常實現以下兩個方面:
使基於 RDB 的應用輕松訪問半結構化的 Domino 文檔數據庫數據。
盡管 Domino 提供了豐富的 API 讓客戶可以定制應用來訪問 Domino 的數據,但是,定制應用需要大量編程,特別在客戶需求與時俱進或者數據結構變化迅速的今天想要隨需應變非常困難。並且日後的軟件重用維護和跨平台移植都需要較大的潛在投資。相較於使用標准的 SQL 語句訪問關系型數據庫其可行性和靈活性大打折扣。因此很多客戶希望能夠像訪問關系型數據庫一樣訪問 Domino 數據。
使 Domino 能夠訪問 RDB 的數據並與 Domino 數據一起混合展示。
Domino 提供了多種方式實現訪問外部數據源,如 Domino Enterprise Connection Service (DECS),Lotus Script,Domino Formula Language,Lotus Enterprise Integrator(LEI)等。但是,需要額外編程或者付費工具軟件如 LEI。在跨數據源的訪問中,花費較高。
此外,以上兩個方面都需要考慮的一個問題是,使用 SQL 語句可以跨表關聯操作,但是使用簡單的 SQL 語句跨 DataBase 關聯操作難以實現。但是由於需要集成的應用往往都是歷史遺產,重新開發新應用投資過大且穩定性沒有經過長期使用的系統優秀,客戶往往需要利用這些歷史應用,這些舊有的系統往往使用各自獨立的 DB 甚至是各種不同類型的 DB 產品。在集成時,往往需要跨 DB 甚至異種 DB 進行數據操作。屏蔽各種 DB 的差異性,以及實現跨 DB 數據操作成為另外一大難題。
總之,在實現以上兩個方面時,主要需要解決以下幾個問題:
如何讓外部應用使用 SQL 訪問 Domino 數據?
如何實現多種異型關系型數據源的跨源訪問?
以下本文將介紹基於 DB2 聯邦技術和 Domino NSFDB2 的解決方案實現基於關系型數據庫的應用和 Domino 應用的集成。
DB2 的數據聯邦技術介紹
IBM 的聯邦數據庫系統為組合來自多個數據源的信息提供了功能強大的工具。
圖 1 顯示了 IBM 聯邦數據庫的體系結構。應用程序可以使用任何受支持的接口(包括 ODBC、JDBC 或 Web 服務客戶機)與聯邦服務器交互。聯邦服務器通過稱為包裝器的軟件模塊與數據源進行通信。
圖 1. IBM 聯邦系統的體系結構
查看原圖(大圖)
通過安裝聯邦引擎,然後配置它以與數據源通信,從而創建聯邦系統。向聯邦系統添加新的數據源包括以下幾步。
首先,在 DB2 命令窗口運行 DB2 GET DBM CFG 來查看當前實例的配置參數,並確保 FEDERATED 參數設置為 YES,您可以通過運行 DB2 UPDATE DBM CFG USING FEDERATED YES 來設置這個參數。修改這個參數後,必須重新啟動實例才會生效。
然後,必須安裝用於數據源的包裝器,然後必須告訴 IBM 的聯邦數據庫在何處可找到包裝器。通過 CREATE WRAPPER 語句可以做到這一點。如果期望添加的多個數據源屬於同一類型,則只需一個包裝器。例如,即使聯邦系統將包含五個可能在不同機器上的 Oracle 數據庫實例,也只需要一個 Oracle 包裝器,因此只需要一條 CREATE WRAPPER 語句。然而,還必須向系統標識每個單獨的數據源。通過 CREATE SERVER 語句可以做到這一點。如果有五個 Oracle 數據庫實例,則必須發出五條 CREATE SERVER 語句。
在定義好包裝器和服務器之後,必須根據聯邦中間件的數據模型來描述位於遠程數據源中的數據。由於這裡所描述的聯邦數據庫支持對象關系數據模型,因此必須向聯邦引擎描述來自外部數據源的每個數據集,並將其描述為具有相應類型列的表。這些外部數據集稱為別名(nickname),應用程序向聯邦體提交的 SQL 中會用到這個表名和列名。通過 CREATE NICKNAME 語句來定義別名。
此外,還需創建用戶映射,才能實現數據的訪問。
Domino NSFDB2 簡介
NSFDB2 是啟用 IBM(R) DB2 Universal Database(TM) Enterprise Server Edition 的 IBM(R) Lotus(R) Notes(R) 數據庫。從 Domino7 開始提供 NSFDB2 這個新特性,此新特性具有以下幾個功能:
Domino 將 DB2 用作 Notes 數據的替換數據存儲。
以 DB2 Access 視圖 (DAV) 表單,將特定的數據集從 NSF 送到 DB2。
Notes 視圖可以根據 SQL 查詢用“查詢視圖”Query VIEw(QV)表單建立。
圖 2. NSFDB2 體系結構示意圖
查看原圖(大圖)
Domino 可以將 DB2 用作 Notes 數據的替換數據存儲,其數據的訪問跟使用 NSF 格式的文檔數據庫無異。但是,存儲在 DB2 中的 Domino 數據是被保護的,這些數據對 DB2 User 來講是不可視的,更不用說查詢和操作了。僅僅使用這一功能對於集成基於關系型數據庫的應用和 Domino 應用毫無意義,雙方無法實現數據交互。要想使 DB2 User 可以訪問 Domino 的數據,還必須使用 DB2 Access 視圖 (DAV) 表單,通過 Designer 將 Domino 數據推出到 DB2。這樣,Domino 的數據才可能被 DB2 應用訪問。為其他應用集成 Domino 數據提供了訪問出口。
此外,Domino 還可以使用 Query View 的功能,將 DB2 中 Domino 和非 Domino 的數據聯合查詢,顯示在 Domino database 的設定 vIEw 中。當然,從 Domino 端訪問其他關系型數據庫的數據源,還可以有多種方式,如 Lotus Script(LS:DO,LCConnection),DECS,LEI 等,本文不詳細敘述。
利用數據聯邦功能配置 Domino 和基於關系型數據庫的企業應用信息整合
如圖 3 所示,基於關系型數據庫的不同的數據源都通過聯邦數據庫的 Wrapper 映射到以 Federated Database Server 這樣一個虛擬的大數據庫中。同時,Domino 的數據也基於 NSFDB2 技術,推出到該數據庫中。至此,異種異源甚至半結構化的 Domino 文檔型數據庫的數據都被無差別的集成到了 Federated Database Server 中了。通過此方案,開篇我們所提出的在集成基於關系型數據庫(RDB)的傳統應用和 Domino 應用時,應解決的兩個問題迎刃而解:
如何讓外部應用使用 SQL 訪問 Domino 數據?
Domino 的數據通過 NSFDB2 和 DAV 推出到 DB2 中,DB2 User 就可以使用 SQL 訪問 DAV 的數據了。這使得基於 RDB 的應用可以輕松的訪問半結構化的 Domino 文檔數據庫數據。
如何實現多種異型關系型數據源的跨源訪問?
通過以上方案,Domino 和其他應用的數據都被映射到同一個 DB2 Database 中,也解決了跨 DB 訪問數據的麻煩,不必單獨去各個 DB 取數據,再通過程序解析所有結果並整合成所需數據返回,只需要簡單的聯合查詢就能夠實現看起來是跨 DB 的復雜查詢了。
圖 3. 通過聯邦技術集成基於關系型數據庫(RDB)的傳統應用和 Domino 應用
查看原圖(大圖)
應用整合配置實例
本文使用一個簡單的例子展示如何使用聯邦技術集成一個基於 DB2 的應用和一個 Domino 應用。
某銀行業務部門有一個信用卡管理應用程序,其數據存儲在 DB2 中。該銀行的 HR 工作流系統部署在 Domino server 上,銀行員工的全部信息都存儲為半結構化的 NSF 數據庫中。現在信用卡管理應用程序需要擴展一項功能能夠專門針對本銀行員工的信用額度進行調整。HR 的工作流中也需要增加一個 vIEw 去查看本銀行員工的信用額度。
舊有的業務部門沒有銀行員工的人員信息,而 HR 系統中也沒有業務部門的信用額度信息。通常情況下,會采用將員工信息導出到 DB2 表中供業務部門應用程序使用,同時 Domino 端需要編程或者額外的工具將業務部門的信用額度數據導入到 NSF 存儲。
這種方法的弊端是,員工人員流動會需要定期將信息導出到 DB2 中,信用額度的調整也需要隨時更新至 Domino,如果數據更新不及時,會造成數據的不一致,且無法實現數據的實時查詢。此外編程或者使用額外工具軟件,花費過高。
而使用 Federation Feature 按照本文所述方案只需要使用已有的工具和簡單的 SQL 語句就能實現新功能的增加,並且無需雙方額外的數據導入導出和更新,能夠實現實時查詢。
本例的軟件環境如下:
Domino 8.0.1 安裝在 Windows 上。 Domino server 已經 NSFDB2 enabled。
本例所用的包含該銀行員工信息的 NSFDB2 database 已經創建。員工信息的 DAV 已經創建。
DB2 Connect 9.1 Enterprise Edition 安裝在 Windows 上並且 FEDERATED 參數已經設置為 YES。
本例所使用的銀行開戶人的信用額度表已經在 DB2 中創建。該 DB2 Database 在業務部門的服務器上為准備作為 Federated Database Server 的 DB2 服務器的 remote server。
具體配置和實現步驟如下:
將業務部門的位於 H6060A1C.cn.ibm.com 上的 DB2 Database MASSAGNO catalog 至准備用作 Federated Database Server 的 IBM-EDA51C1D287 上。
使用以下命令實現 catalog,不同的操作系統可能參數不同,請根據實際情況進行調整。
db2 catalog tcpip node server_name remote server_name server 446 system server_name ostype OS400
db2 catalog dcs database rdb_name AS rdb_name
db2 catalog database rdb_name AS rdb_name at node server_name authentication dcs
圖 4. Catalog remote DB2 database 至 Federated Database Server
Federate 銀行業務部門的信用額度表至 Federated Database Server 上的 Database-TESTDOM
首先創建 Wrapper:
圖 5. 創建 Wrapper
在創建 Wrapper 的對話框中指定數據源類型和名稱,並在 setting tab 中設定 DB2_FENCED 值為 NO。
圖 6. 設定 Wrapper 參數
然後在 Federated Database Object 中創建 Server Definitions。在隨後出現的對話框中的 settings tab 頁中選中“DBNAME”和“PASSWord”並指定“DBNAME”。
圖 7. 創建 Server Definition
查看原圖(大圖)
查看原圖(大圖)
然後創建用戶映射,以保證 Federated Database 具有對被聯邦的數據源具有訪問權限。
圖 8. 創建用戶映射
查看原圖(大圖)
查看原圖(大圖)
查看原圖(大圖)
為被聯邦的數據對象-存儲信用額度的數據表創建昵稱。
圖 9. 創建昵稱
查看原圖(大圖)
至此,業務部門的存儲開戶客戶引用額度的表格已經被聯邦到 TESTDOM 中,並可以如同訪問本地數據表一般在聯邦數據庫中被操作。
圖 10. Federate 結果
查看原圖(大圖)
在 Domino 的 database 中創建查詢信用額度的 Query VIEw。
圖 11. 創建 QV
查看原圖(大圖)
查看原圖(大圖)
在 Notes 中查看結果。
圖 12. Notes 中實時查看員工的信用額度
在業務部門的應用中操作員工的信用額度。
簡單使用 NSFDB2 的功能,通過 Designer 打開 Domino 的數據庫設計,在 Shared Resource->DB2 Access VIEw 中創建 DAV,選擇需要的員工信息,將數據 populate 到 DB2 中,就在 DB2 裡出現一個可供 DB2 User 訪問的數據表。業務部門可以通過簡單的 SQL 查詢實現此功能。此處不再贅述。
結語
本文所提出的基於聯邦技術集成基於關系型數據庫的應用和基於半結構化的文檔型數據庫的 Domino 引用的方案,能夠實現大型企業各種應用集成的需求,並成功的解決了開篇所提出的,使用 SQL 訪問 Domino 數據難和跨源訪問多種數據難的問題。
並且在此方案中,聯邦技術的各種優點和特性得到了集中體現:
透明性:聯邦系統是透明的,它對用戶掩蓋了底層數據源的差異、特質和實現。它使一組聯邦數據源對用戶而言象是一個系統。用戶無需知道數據存儲在哪裡(位置透明);無需知道數據源支持何種語言或編程接口(調用透明);如果使用 SQL,無需知道數據源支持哪種 SQL 語句(語言透明);不需要知道數據是以哪種物理方式存儲的,或者數據是否被分區和/或被復制(物理數據獨立性、分段和復制透明性);無需知道使用何種網絡協議(網絡透明性)。用戶應該看到一個統一的接口,包括單一的一組錯誤代碼(錯誤代碼透明性)。IBM 提供了所有這些特性,使得在編寫應用程序時就好象所有數據都位於一個數據庫中,盡管事實上,數據可能存儲在異構的數據源集合中。
異構性:該方案屏蔽了各數據源之間的差異程度。數據源在許多方面可以不同。它們可以運行在不同的硬件上,可以使用不同的網絡協議,以及使用不同的軟件來管理它們的數 據存儲。它們可能具有不同的查詢語言、不同的查詢能力甚至不同的數據模型。它們處理錯誤的方式可能不同,或者提供不同的事務語義。IBM 的聯邦數據庫可以容納所有這些差異,將上述這些系統封裝在一個無縫的透明聯邦體中。
聯邦體的可擴展性和開放性:所有系統都需要隨時間而發展。在聯邦系統內,可能需要新的數據源來滿足用戶業務不斷變化的需求。IBM 使增加新的數據源變得很方便。聯邦數據庫引擎通過稱為包裝器的軟件組件來訪問數據源。通過為那個數據源獲得或創建包裝器來訪問新型的數據源。包裝器體系結構支持新包裝器的創建。一旦存在包裝器之後,簡單的數據定義(DDL)語句允許在不停止正在進行的查詢或事務的情況下動態地將數據源添加到聯邦體。
數據源的自治:通常,數據源有現有的應用程序和用戶。所以,當將數據源引入聯邦體時,不影響它的操作是很重要的。IBM 的聯邦數據庫不影響現有數據源的本地操作。現有應用程序的運行不會發生變化,既不會修改數據也不會移動數據,接口也保持相同。盡管對聯邦系統執行全局查詢可能會涉及各種數據源,但數據源處理數據請求的方式並不受此影響。同樣,當數據源進入或離開聯邦體時,不會影響本地系統的一致性。唯一的例外是在對加入聯邦體的數據源執行聯邦的兩階段提交處理期間,會受到影響。