摘要:基于網(wǎng)格的異構(gòu)數(shù)據(jù)源訪問體系定義了一套通用的數(shù)據(jù)訪問接口,包括結(jié)構(gòu)化查詢操作和非結(jié)構(gòu)化查詢操作#65377;該體系采用基于網(wǎng)格基礎構(gòu)件的多層結(jié)構(gòu)設計,包括附加在各個數(shù)據(jù)源之上的訪問代理層和用于負責維護模板庫和邏輯映射表的仲裁機構(gòu),通過在訪問代理層實現(xiàn)與實際數(shù)據(jù)源相關的轉(zhuǎn)換操作來提供對通用數(shù)據(jù)訪問接口的支持#65377;該體系實現(xiàn)了真正意義上的語句透明,并在最大限度上提供了數(shù)據(jù)的自動集成#65377;
關鍵詞:
異構(gòu)數(shù)據(jù)源;仲裁機構(gòu);訪問代理
中圖分類號:TP393文獻標志碼:A
文章編號:1001-3695(2007)10-0065-03
0引言
數(shù)據(jù)網(wǎng)格的發(fā)展促進了許多應用的蓬勃發(fā)展,尤其是面向海量信息處理的大型應用,如生命科學以及地球科學等#65377;這些應用往往需要訪問各種大型且復雜的數(shù)據(jù)集合#65377;這些數(shù)據(jù)集合來自不同組織甚至不同國家,它們之間的聯(lián)系是松散而且不穩(wěn)定的#65377;與此同時,數(shù)據(jù)的組織方式也是多種多樣的,既有結(jié)構(gòu)化的信息資源,如符合關系模型的關系數(shù)據(jù)庫#65380;符合面向?qū)ο竽P偷膶ο髷?shù)據(jù)庫和符合概念模型的數(shù)據(jù)倉庫;也有半結(jié)構(gòu)化或非結(jié)構(gòu)化的信息資源,如各種格式的數(shù)據(jù)文檔(word#65380;PPT#65380;HTML和XML等)以及采用文件方式存儲的文本信息或二進制數(shù)據(jù)信息#65377;而上層應用系統(tǒng)關心的是如何集成這些信息資源,使之能夠通過類似的訪問手段來對不同的信息資源進行訪問#65377;
本文提出的異構(gòu)數(shù)據(jù)源訪問體系試圖為解決以上問題提供一種方案#65377;該體系定義了一套基于代理訪問中間件的網(wǎng)格服務向上層應用提供數(shù)據(jù)訪問的手段#65377;其核心思想就是設計一個仲裁機構(gòu)來處理上層應用的數(shù)據(jù)訪問請求,之后該機構(gòu)負責將這些訪問請求轉(zhuǎn)換為標準化的中間查詢語句發(fā)送到底層的數(shù)據(jù)源,而在各個數(shù)據(jù)源之上覆蓋了一層訪問代理中間件負責解析這些中間查詢語句,并按照特定數(shù)據(jù)源的訪問方式重構(gòu)為專門的查詢語句#65377;訪問代理中間件還負責將查詢結(jié)果封裝為XML文檔發(fā)送到仲裁機構(gòu);而仲裁機構(gòu)則負責合并結(jié)果,并將結(jié)果轉(zhuǎn)換為合適的格式返回給上層應用#65377;
1異構(gòu)數(shù)據(jù)訪問體系結(jié)構(gòu)
為了實現(xiàn)異構(gòu)數(shù)據(jù)源的統(tǒng)一訪問,首先需要解決的問題是如何將用戶的訪問請求轉(zhuǎn)換為體系內(nèi)部的標準化查詢命令,在此是通過提供一個應用相關的模板庫來實現(xiàn)用戶請求的標準化處理的;其次需要確定各個數(shù)據(jù)源是否包含所需要的信息,這可通過查詢邏輯映射表來實現(xiàn);最后需要將通用的查詢語法表示轉(zhuǎn)換為各個數(shù)據(jù)源所能夠識別的查詢命令,并將從各個數(shù)據(jù)源返回的數(shù)據(jù)按照指定的數(shù)據(jù)格式進行歸并后返回給上層應用#65377;整個過程如圖1所示#65377;
在體系架構(gòu)的設計上,采用了中心+分層結(jié)構(gòu)#65377;中心是指仲裁機構(gòu),該機構(gòu)負責維護模板庫和邏輯映射表;分層是指將實際的數(shù)據(jù)訪問工作分解到不同的位置實現(xiàn)以提高系統(tǒng)的可重用性以及可擴展性#65377;整個體系結(jié)構(gòu)可分為以下層次:
a)語句解析層#65377;該層位于仲裁機構(gòu),分析接收到的查詢請求,根據(jù)模板庫中的定義將其轉(zhuǎn)換為體系定義的標準化數(shù)據(jù)訪問命令形式#65377;
b)數(shù)據(jù)集成層#65377;該層位于仲裁機構(gòu),負責接收來自各個數(shù)據(jù)訪問代理的結(jié)果信息,并按照預先指定的數(shù)據(jù)組織方式進行數(shù)據(jù)合并#65377;
c)語句重構(gòu)層#65377;該層位于訪問代理,負責接收由仲裁機構(gòu)發(fā)送過來的標準化數(shù)據(jù)訪問命令,并根據(jù)其代理的數(shù)據(jù)源類型將其重構(gòu)為數(shù)據(jù)源可識別的數(shù)據(jù)訪問命令#65377;
d)數(shù)據(jù)查詢層#65377;該層位于訪問代理,負責執(zhí)行由語句重構(gòu)層所生成的特定數(shù)據(jù)訪問命令,并將結(jié)果返回到仲裁機構(gòu)#65377;異構(gòu)數(shù)據(jù)訪問體系的結(jié)構(gòu)圖如圖2所示#65377;
上層應用與仲裁機構(gòu)之間的通信采用標準的HTTP(s)進行#65377;仲裁機構(gòu)與訪問代理中間件之間的通信則采用基于HTTP(S)的XML數(shù)據(jù)交換格式#65377;訪問代理中間件與底層數(shù)據(jù)源的通信則根據(jù)需求可以分別采用不同的專門協(xié)議進行,如JDBC#65380;OCI或私有協(xié)議等#65377;
仲裁機構(gòu)采用Servlet+傳統(tǒng)Java類的方式實現(xiàn),它可以被命令行工具#65380;Web瀏覽器或編程API接口所調(diào)用#65377;上層應用的編寫者不需要具備任何關于底層數(shù)據(jù)源方面的知識,他僅僅需要通過標準的HTTP get方法和post方法就可以訪問到任何種類的數(shù)據(jù)源#65377;訪問代理中間件提供符合網(wǎng)格服務規(guī)范的服務,接收XML格式的命令請求,返回XML格式的結(jié)果數(shù)據(jù);同時它也可以直接被上層應用所訪問,從而提供更加直接的數(shù)據(jù)操縱機制#65377;同一類的數(shù)據(jù)源可以由一個或多個訪問代理中間件所管理,訪問代理中間件通過網(wǎng)格服務注冊機制來發(fā)現(xiàn)和查找指定的數(shù)據(jù)源#65377;
2標準與規(guī)范
2.1中間層語言
為實現(xiàn)異構(gòu)數(shù)據(jù)源之間數(shù)據(jù)訪問的透明轉(zhuǎn)換,需要定義一種中間層的表示語法#65377;本文定義了數(shù)據(jù)訪問的查詢操作,同時還定義了能夠返回目標數(shù)據(jù)類型的描述操作#65377;具體說明如下:
a)查詢操作(query)#65377;對于數(shù)據(jù)源的查詢可分為結(jié)構(gòu)化查詢和非結(jié)構(gòu)化查詢兩類#65377;對于結(jié)構(gòu)化查詢采用四元組表名,選取字段列表,查詢條件,排序條件表示#65377;其中:表名為系統(tǒng)定義的虛擬表名,通過映射關系映射到各個數(shù)據(jù)源的實際表名;選取字段列表和查詢條件的表示方法均符合標準SQL 92定義;排序條件支持order和group/having兩種操作#65377;
對于非結(jié)構(gòu)化查詢,其主要的查詢需求為全文檢索,即在目標文檔中發(fā)現(xiàn)指定的關鍵字,并按照一定的格式返回目標文檔#65377;其中檢索模式具有可擴展性,能夠支持更多的智能信息處理模式#65377;其查詢采用三元組檢索模式,查詢條件,返回格式表示#65377;
目前支持的檢索模式包括文件名檢索和全文檢索兩種#65377;例如,文件名檢索,“QueryFileName”,pureText表示以純文本的格式返回指定文件名為QueryFileName的文件內(nèi)容;全文檢索,“Keyword1 and Keyword2”,original表示以文檔的原始格式返回包含指定關鍵字Keyword1和Keyword2的文件內(nèi)容#65377;
b)描述操作(describe)#65377;通過描述操作可以返回目標數(shù)據(jù)源的類別以及所支持的操作,同時可以根據(jù)給定的表名返回其中的字段及類型#65377;描述操作采用三元組數(shù)據(jù)源,查詢命令,查詢條件表示#65377;其中:數(shù)據(jù)源通過IP:port的格式來指定提供服務的數(shù)據(jù)源位置;查詢命令指定了查詢的種類,目前包括數(shù)據(jù)源類別查詢和表結(jié)構(gòu)查詢兩類;對于數(shù)據(jù)源類別查詢,查詢條件可為空,對于表結(jié)構(gòu)查詢,查詢條件為表名#65377;例如,IP:port,“QueryDataSource”,1表示返回指定數(shù)據(jù)源的描述信息,包括數(shù)據(jù)源的類型以及支持的操作;IP:port,“QueryTableInfo”“TableName”表示返回指定TableName表的結(jié)構(gòu)信息,包括字段名以及各個字段的類型#65377;
2.2訪問代理規(guī)范
異構(gòu)數(shù)據(jù)源訪問的關鍵問題是訪問代理的實現(xiàn),不論是語句透明還是數(shù)據(jù)源的擴展都是通過增加不同種類的訪問代理中間件來實現(xiàn)的#65377;為了增加訪問代理中間件在實現(xiàn)上的靈活性,本文定義了一個訪問代理的抽象類來描述訪問代理中間件應該具有的功能和接口,實際的訪問代理中間件則可以由這個抽象類派生出來#65377;這樣的設計使得訪問代理的實現(xiàn)非常靈活,不僅可以支持標準格式的數(shù)據(jù)源(如各種商業(yè)數(shù)據(jù)庫產(chǎn)品)接入,也能夠?qū)崿F(xiàn)自定義數(shù)據(jù)源的接入#65377;下面分兩部分介紹抽象類的實現(xiàn)#65377;
2.2.1工作流程
整個抽象類分為五個線程類協(xié)同執(zhí)行;核心數(shù)據(jù)結(jié)構(gòu)包括三個隊列,線程之間通過這三個隊列協(xié)同執(zhí)行#65377;這樣設計的好處是當某個線程類運行時間較長時可以動態(tài)地增加該線程類中的線程數(shù)量,從而達到增加處理能力的作用;同時由于每個線程類的功能相對比較簡單,便于維護和擴展#65377;圖3顯示了這五個線程類的基本工作流程以及線程與三個核心隊列之間的關系#65377;
2.2.2抽象類中的虛函數(shù)及相應的參數(shù)定義
1)輸入/輸出參數(shù)結(jié)構(gòu)定義
typedef struct _DS_PARAM {
ub1*name;//字段名
ub1*value;//值
sb4 len;//長度
ub2 type;//類型
short indicator;//缺省值
ub2 rcode;//返回值
} DS_PARAM;
2)初始化函數(shù)
API_EXPORT(int) ds_init(DS_BLK *oblk, char *ds_name, char *userName, char *userPass);
3)釋放處理函數(shù)
API_EXPORT(int) ds_destroy(DS_BLK *oblk);
4)獲取數(shù)據(jù)源訪問會話函數(shù)
API_EXPORT(int) ds_getSession(DS_BLK *oblk, DS_SESSION *osession)
5)釋放數(shù)據(jù)源訪問會話函數(shù)
API_EXPORT(int) ds_releaseSession(DS_BLK *oblk, DS_SESSION *osession)
6)重構(gòu)數(shù)據(jù)源訪問會話函數(shù)(用于當前會話出現(xiàn)錯誤進行復位操作)
API_EXPORT(void) ds_reap_session(DS_BLK *oblk, DS_SESSION *osession, request_rec *r)
7)對數(shù)據(jù)源執(zhí)行指定插入或更新命令,僅有輸入?yún)?shù)
API_EXPORT(sword) ds_set_value(DS_BLK *oblk, char *cmd_name, DS_PARAM **in_data, DS_PARAM **out_data)
3結(jié)束語
本文所設計的基于數(shù)據(jù)網(wǎng)格的異構(gòu)數(shù)據(jù)源訪問體系具有以下特點:
a)數(shù)據(jù)采集和發(fā)布的平臺#65377;不同的數(shù)據(jù)源(包括關系數(shù)據(jù)庫#65380;XML和文件系統(tǒng))都可以通過數(shù)據(jù)訪問中間件來訪問#65377;在不同的數(shù)據(jù)源之間,數(shù)據(jù)可以自由地被更新和檢索#65377;數(shù)據(jù)類型的轉(zhuǎn)換可以通過XSLT來實現(xiàn),傳輸過程中可以使用標準的壓縮/解壓算法來實現(xiàn)(如ZIP和GZIP)#65377;通過訪問數(shù)據(jù)服務,數(shù)據(jù)可以被發(fā)送到各種應用中,包括各種操作系統(tǒng)平臺和編程環(huán)境#65377;通過提供C和Java兩種語言的開發(fā)包,可以幫助用戶迅速地開發(fā)基于數(shù)據(jù)訪問中間件的應用#65377;向訪問中間件提交的請求具有統(tǒng)一的格式,數(shù)據(jù)訪問中間件會自動根據(jù)數(shù)據(jù)源的不同進行相應的轉(zhuǎn)換#65377;這種轉(zhuǎn)換對用戶來說是透明的,因此用戶可以同時訪問幾個不同類型的數(shù)據(jù)源并獲得合并后的查詢結(jié)果#65377;
b)開放的數(shù)據(jù)源平臺#65377;由于該體系具有面向服務的體系架構(gòu),可以方便地加入第三方功能構(gòu)件;同時數(shù)據(jù)訪問中間件具有開放的編程接口,用戶可以開發(fā)新的應用來支持特定的數(shù)據(jù)源,從而通過數(shù)據(jù)訪問中間件開放其私有的數(shù)據(jù)資源#65377;
參考文獻:
[1]SUGDEN T,HUME A,JACKSON M,et al.Protecting application developers:a client toolkit for OGSADAI[C]//Proc of the UK eScience All Hands Meeting.Nottingham:[s.n.],2004:143149.
[2]DEELMAN E,SINGH G,ATKINSON M P,et al. Gridbased metadata services[C]//Proc of the 16th International Conference on Scientific and Statistical Database Management.Washington D C:IEEE Computer Society,2004:393-402.
[3]SINGH G,BHARATHI S,CHERVENAK A,et al.A metadata catalog service for data intensive applications[C]//Proc of Supercomputing.Washington D C:IEEE Computer Society,2003:33-50.
[4]OGSADAI WSRF 2.1 user guide[EB/OL].(2005).http://www.ogsadai.org/releases/ogsadai.html.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”