IBM聯邦技術的主要特徵

IBM聯邦技術的主要特徵:透明性、異構性、高級功能、底層聯邦數據源的自治、可擴展性、開放性和優化的性能。

IBM 的聯邦技術是如何工作的

1顯示了 IBM 聯邦數據庫的體系結構。應用程序可以使用任何受支持的接口(包括 ODBCJDBC Web 服務客戶機)與聯邦服務器交互。聯邦服務器通過稱爲包裝器的軟件模塊與數據源進行通信。

 

查詢處理

配置好聯邦系統之後,應用程序可以向聯邦服務器提交用 SQL 編寫的查詢。聯邦服務器優化該查詢,產生一個執行方案,其中這條查詢被分解爲可以在各個數據源上執行的片段。正如上面所提到的,對這條查詢可能存在多種分解,優化器根據最少資源總耗估計值從多種可能中做出選擇。一旦選定一個方案,聯邦數據庫就開始執行,調用包裝器來執行分配給它們的片段。爲了執行某個代碼段,包裝器會執行任何所需的數據源操作,這些操作也許是一系列函數調用,或者是提交給數據源用其本機查詢語句執行的查詢。生成的數據流被返回給聯邦服務器,由聯邦服務器來組合它們,執行任何其它的由數據源無法完成的處理,然後將最終結果返回給應用程序。

IBM 聯邦查詢處理方法的核心是,聯邦服務器的優化器和包裝器一起爲執行某個查詢而形成方案所採用的方式 [4]。優化器負責研究這些可能的查詢方案的空間。在連接枚舉中,動態編程是缺省方法,優化器首先生成單表訪問的方案,然後生成雙向連接等。在每一級別,優化器都會考慮各種連接順序和連接方法,如果所有表都位於一個公共的數據源,則它認爲執行這個連接可以在數據源中進行,也可以在聯邦服務器上進行。 2 顯示了這一過程。


2. 用於連接的查詢方案

優化器的工作方式因使用關係和非關係包裝器而有所不同。優化器詳細地對關係數據源建模,建模所使用的信息由包裝器提供,這些信息是用來生成執行計劃,而這些計劃表示優化器期望數據源如何執行。

然而,由於非關係數據源確實沒有公共的操作集或公共的數據模型,因此對於這些數據源需要更靈活的安排。因而優化器這樣使用非關係包裝器:

1.       如果稱爲請求的候選查詢段適用於單個數據源,則 IBM 聯邦數據庫向包裝器提交該查詢段。

2.       在非關係包裝器接收到一個請求之後,它確定相應的查詢段中哪部分(如果有的話)可以由數據源執行。

3.       包裝器返回一個應答,其中描述了查詢段已接受的部分。應答還包括對將要產生的行數的估計、對整個執行時間的估計以及包裝器方案:包裝器將需要知道所有內容的封裝表示,才能執行查詢段已接受的部分。

4.       聯邦數據庫優化器將這個應答合併到全局方案中,同時引入其它必要的運算符以彌補包裝器不能接受的查詢段部分。使用應答中的成本和基數信息來估計這個方案的總成本,從所有候選方案中選出總成本最低的方案。在選定方案之後,不需要立即執行該方案;可以將它存儲在數據庫目錄中,在以後執行該查詢時,一次或多次使用該方案。即使立即使用該方案,也不需要在創建該方案的同一過程中執行它,如 3所示。


3. 非關係數據源的編譯和運行時

 

配置聯邦系統

通過安裝聯邦引擎,然後配置它以與數據源通信,從而創建聯邦系統。步驟具體如下:

l          必須安裝用於數據源的包裝器,

l          必須告訴IBM的聯邦數據庫在何處可找到包裝器。通過CREATE WRAPPER

l          必須向系統標識每個單獨的數據源。通過CREATE SERVER語句

l          根據聯邦中間件的數據模型來描述位於遠程數據源中的數據。由於這裏所描述的聯邦數據庫支持對象關係數據模型,因此必須向聯邦引擎描述來自外部數據源的每個數據集,並將其描述爲具有相應類型列的表。建模爲表的外部數據集稱爲別名(nickname),應用程序向聯邦體提交的SQL中會用到這個表名和列名。通過CREATE NICKNAME語句來定義別名。

 

CREATE WRAPPER web_wrapper             //定義wrapper

LIBRARY "/u/haas/wrappers/libweb.a"         //定義wrapper位置

CREATE SERVER weather_server          //定義數據源

WRAPPER web_wrapper OPTIONS (URL 'www.****.com')     //定義web_wrapper相關聯的服務器

CREATE NICKNAME weather                 //建立外部數據源的描述

  (zone integer, climate varchar(10), yearly_rainfall float)

  SERVER weather_server OPTIONS (QUERY_METHOD 'GET')

SELECT c.Name, c.Address

  FROM customers c, stores s, weather w

  WHERE temp_forecast(w.zone, :DATE) >= 85 ANDc.ShopsAt = s.id and s.location = w.zone

CREATE FUNCTION temp_forecast (integer, date) RETURNS float AS TEMPLATE

DETERMINISTIC NO EXTERNAL ACTION               //CREATE FUNCTION語句告訴聯邦數據庫可以在SELECT語句中使用該函數

//AS TEMPLATE子句告訴聯邦數據庫這個函數沒有本地實現。

CREATE FUNCTION MAPPING tf1 for temp_forecast SERVER weather_server  

//CREATE FUNCTION MAPPING語句告訴聯邦數據庫哪個服務器可以對這個函數求值。

上面這些DDL語句會產生元數據,這個元數據描述了有關映射函數的別名和特徵符的信息。聯邦查詢處理引擎要使用這個元數據,這個元數據存儲在聯邦數據庫的全局目錄中。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章