摘 要: 提出了采用網(wǎng)格中間件技術(shù)解決面向分布式空間數(shù)據(jù)庫的查詢問題,,設計并實現(xiàn)了一個網(wǎng)格中間件系統(tǒng)OGSA-SDQP,。給出了該系統(tǒng)的設計思想,重點研究了其中的空間數(shù)據(jù)類型轉(zhuǎn)換,、空間數(shù)據(jù)集成,、空間操作函數(shù)擴展、空間數(shù)據(jù)查詢流程等關(guān)鍵技術(shù),,給出了系統(tǒng)實現(xiàn)及查詢性能測試,。實驗結(jié)果表明,OGSA-SDQP能夠高效處理網(wǎng)格環(huán)境下的分布式空間數(shù)據(jù)查詢。
關(guān)鍵詞: 網(wǎng)格,;分布式,;空間數(shù)據(jù)查詢;OGSA-SDQP
空間數(shù)據(jù)庫用于存儲空間和屬性數(shù)據(jù),,其數(shù)據(jù)模型和查詢語言能支持空間數(shù)據(jù)類型和空間索引,,并且提供空間查詢和其他空間分析的方法。現(xiàn)實環(huán)境中,,由于GIS隸屬單位地域差異及異構(gòu)GIS數(shù)據(jù)庫的存在,,空間數(shù)據(jù)庫系統(tǒng)不僅地域分散,而且數(shù)據(jù)具有異構(gòu)性[1],,因而空間數(shù)據(jù)共享一直是GIS研究領(lǐng)域的一個很有挑戰(zhàn)性的問題,。
實現(xiàn)不同空間數(shù)據(jù)庫的信息共享和集成,必須解決不同的通信協(xié)議,、不同的系統(tǒng)結(jié)構(gòu),、不同的操作系統(tǒng)、不同的數(shù)據(jù)庫和其他應用服務帶來的異構(gòu)性[2],。網(wǎng)格是在網(wǎng)絡之上運行的以實現(xiàn)資源共享和協(xié)作為目標的軟件基礎(chǔ)設施,,提供了一種集成的資源和服務環(huán)境。網(wǎng)格技術(shù)具有高性能計算、資源共享,、互操作性,、服務管理、高可靠性,、安全性等特性[3],,它的迅猛發(fā)展為實現(xiàn)分布式空間信息的訪問和操作提供了新的思路。開放網(wǎng)格服務框架OGSA(Open Grid Service Architecture)是以服務為中心的框架結(jié)構(gòu),,在網(wǎng)格體系結(jié)構(gòu)中有廣泛的影響力,。開放網(wǎng)格服務框架下的分布式查詢處理器OGSA-DQP(Open Grid Service Architecture-Distributed Query Processor)符合OGSA框架,解決了一般數(shù)據(jù)的分布式異構(gòu)的問題,,但是它不能有效地集成空間數(shù)據(jù),,因為空間數(shù)據(jù)種類繁多,數(shù)據(jù)格式各異,,獲取時段各不相同,,存在多種比例尺、多種空間參考系和多種投影類型[4],。為此,,針對網(wǎng)格環(huán)境下的分布式空間數(shù)據(jù)集成問題,,以OGSA-DQP為基礎(chǔ)研究并開發(fā)了一個中間件系統(tǒng),,開放網(wǎng)格服務框架下的分布式空間查詢處理器OGSA-SDQP(Spatial DQP),能夠高效地處理分布式空間數(shù)據(jù)查詢,。
1 OGSA-SDQP設計思想
空間數(shù)據(jù)具有分布式異構(gòu)的特點,,OGSA-SDQP首先屏蔽了其異構(gòu)性,然后在此基礎(chǔ)上集成了不同的空間數(shù)據(jù)源,。OGSA-SDQP支持并擴展了空間操作函數(shù),。
數(shù)據(jù)庫之間具有異構(gòu)性,為了有效集成來自不同數(shù)據(jù)庫的數(shù)據(jù),,需要有統(tǒng)一的數(shù)據(jù)類型,。OGSA-SDQP用Java語言實現(xiàn),需要將SQL數(shù)據(jù)類型轉(zhuǎn)換成統(tǒng)一的Java數(shù)據(jù)類型[5],。對于常規(guī)的數(shù)據(jù)類型,,不同數(shù)據(jù)庫產(chǎn)品之間的語義差別不大,例如:SQL數(shù)據(jù)類型中的VARCHAR,、CHAR,、LONGVARCHAR對應Java數(shù)據(jù)類型中的java.lang.String和char[];SQL數(shù)據(jù)類型中的INTEGER對應Java數(shù)據(jù)類型中的int,。但是空間數(shù)據(jù)具有存儲格式多樣性的特點,各個數(shù)據(jù)庫的空間數(shù)據(jù)類型不相同,Java中也沒有表示空間數(shù)據(jù)的類型,。在OGSA-SDQP中,空間數(shù)據(jù)被轉(zhuǎn)換成一致的數(shù)據(jù)類型,實現(xiàn)了數(shù)據(jù)類型的統(tǒng)一,。
在面向分布式空間數(shù)據(jù)源的SDQP查詢中,,組合查詢被解析為針對不同數(shù)據(jù)源的子查詢,子查詢通過數(shù)據(jù)服務獲取查詢結(jié)果,,在SDQP中將不同數(shù)據(jù)源返回的結(jié)果轉(zhuǎn)換成一致的數(shù)據(jù)類型后進行組裝,,并返回給請求用戶。
OGSA-SDQP支持空間操作函數(shù),。單數(shù)據(jù)源查詢過程中,,提交到數(shù)據(jù)服務的查詢串被完整地推送到后端數(shù)據(jù)庫執(zhí)行查詢,后端數(shù)據(jù)庫支持的查詢函數(shù)都可以嵌入在查詢語句中提交給數(shù)據(jù)服務并獲得查詢結(jié)果,。對于數(shù)據(jù)表中包含的空間信息,,查詢語句可以根據(jù)嵌入的查詢函數(shù)經(jīng)后端數(shù)據(jù)庫處理后返回計算結(jié)果。而對于多源數(shù)據(jù)的分布式查詢,,需要在查詢語句推送前對應不同數(shù)據(jù)源拆分為相應的查詢子句,。在查詢子句返回數(shù)據(jù)結(jié)果之后,根據(jù)嵌入在OGSA-SDQP內(nèi)部的基于標量函數(shù)拓展的空間分析函數(shù),,對結(jié)果進行處理,、合并,返回給服務請求客戶端,。
2 OGSA-SDQP關(guān)鍵技術(shù)
2.1空間數(shù)據(jù)類型轉(zhuǎn)換
系統(tǒng)使用的兩個空間數(shù)據(jù)庫PostGIS和Beyondb都支持空間數(shù)據(jù),。Beyondb是項目組其他成員在開源項目Ingres的基礎(chǔ)上進行空間擴展生成的支持空間數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng)。目前,,OGSA-SDQP僅支持矢量空間數(shù)據(jù),。
首先,將空間數(shù)據(jù)庫的基本信息提交給OGSA-SDQP,,這些信息主要包括數(shù)據(jù)庫的URI,、數(shù)據(jù)庫的驅(qū)動程序JDBC等。由于每個空間數(shù)據(jù)庫的空間數(shù)據(jù)類型各不相同,,PostGIS的空間數(shù)據(jù)類型是PG_Geometry,,Beyondb的空間數(shù)據(jù)類型是ST_Geometry,OGSA-SDQP根據(jù)每個空間數(shù)據(jù)庫的JDBC,,將Geometry類型解析為通用文本W(wǎng)KT(Well-Known Text)類型,。WKT格式是對幾何體編碼的一個結(jié)構(gòu)化文本格式,可以像操作字符串一樣對WKT進行操作,。通過將不同的空間數(shù)據(jù)類型轉(zhuǎn)換為WKT的方式,,屏蔽了不同空間數(shù)據(jù)類型的異構(gòu)性。
空間數(shù)據(jù)的類型轉(zhuǎn)換如圖1所示,,當用戶提交查詢操作時,,OGSA-SDQP主要利用兩個行為Activity將數(shù)據(jù)轉(zhuǎn)換成結(jié)果集ResultSet的形式,SQLQuery和TupleToWebRowSetCharArrays。它們處在一個工作流中,,SQLQuery的輸出是TupleToWebRowSetCharArrays的輸入,。ResultSet是Java對象,不適合網(wǎng)絡傳輸,,在傳輸前將其轉(zhuǎn)換成WebRowSet格式[6],,OGSA-SDQP接收到數(shù)據(jù)后將其轉(zhuǎn)換回ResultSet格式。ResultSet中的空間數(shù)據(jù)類型是空間數(shù)據(jù)庫自己定義的類型,,OGSA-SDQP將空間數(shù)據(jù)轉(zhuǎn)換成WKT格式,,空間數(shù)據(jù)類型轉(zhuǎn)換是空間數(shù)據(jù)集成的前提。
2.2 空間數(shù)據(jù)集成
空間數(shù)據(jù)集成是將分布式數(shù)據(jù)庫構(gòu)成一個大的虛擬的數(shù)據(jù)庫,,屏蔽數(shù)據(jù)庫之間的異構(gòu)性,,為用戶提供統(tǒng)一、透明的訪問接口,。通過下面的語句可以從兩個空間數(shù)據(jù)庫中一次查詢出鐵路信息和公路信息并返回一個結(jié)果集:select rail. geom from beyondb_railway_pln rail union all select road.geom from postgis_road_pln road,。
為了向用戶提供統(tǒng)一的數(shù)據(jù)視圖,屏蔽底層數(shù)據(jù)庫的位置信息和平臺差異,,實現(xiàn)異構(gòu)數(shù)據(jù)庫的無縫連接,。虛擬表與數(shù)據(jù)源的映射關(guān)系如圖2所示,OGSA-SDQP首先建立了一張?zhí)摂M表,,虛擬表中定義了虛擬表名,、虛擬字段名等屬性。然后,,又建立了一張?zhí)摂M關(guān)系表來維持虛擬表名與實際表名,、虛擬字段名與實際屬性之間的映射關(guān)系,,虛擬表中的一個屬性可以對應0個或多個數(shù)據(jù)源對象的屬性[7],。OGSA-SDQP循環(huán)每個數(shù)據(jù)源結(jié)果集的行,再循環(huán)每行的字段,,根據(jù)映射關(guān)系查找該字段在虛擬表中的位置,,然后根據(jù)位置信息,將數(shù)據(jù)插入虛擬表,。
2.3空間操作函數(shù)擴展
在數(shù)據(jù)訪問與集成處理過程中,,行為(Activity)是基本工作模塊,每類行為負責完成一項特定的數(shù)據(jù)查詢,、轉(zhuǎn)換,、傳輸?shù)忍幚砣蝿誟8]。OGSA-SDQP提供了行為的擴展接口,,用戶通過該接口可以定義自己的行為,。
OGSA-SDQP提供服務行為拓展機制,可供拓展的函數(shù)類型為標量函數(shù)與聚合函數(shù)兩類。聚合函數(shù)從選擇列數(shù)據(jù)中提取出代表一種趨勢的值或者匯總值,,并聚合列得到結(jié)果集,,返回的數(shù)據(jù)類型對應于該列或者傳遞到函數(shù)中的值,如COUNT,、MAX,、SUM等。標量函數(shù)指的是基于輸入值定義類型返回單個數(shù)據(jù)值,。聚合函數(shù)針對通用數(shù)據(jù)類型進行操作,,而空間分析過程需要針對空間數(shù)據(jù)表中每條記錄包含的幾何字段進行計算,因此拓展空間分析函數(shù)主要基于標量函數(shù)的形式拓展,。
JTS Topology Suite是一系列Java API,,它完成了Java對幾何對象、空間拓撲的核心操作算法[9],。為了豐富用戶的個性化操作,,利用OGSA-SDQP的擴展功能和JTS Topology Suite,添加了一些支持矢量數(shù)據(jù)的空間操作,,包括緩沖區(qū)計算,、凸外包框計算和空間相交計算等。
2.4空間數(shù)據(jù)查詢流程
OGSA-SDQP是一個基于服務的分布式查詢處理器,,它可以一次對多個數(shù)據(jù)服務進行并行查詢,。OGSAS-DQP分布式查詢的實現(xiàn)需要兩個重要服務的支持:空間網(wǎng)格分布式查詢服務SGDQS(Spatial Grid Distributed Query Service)和空間網(wǎng)格查詢評估服務SGQES(Spatial Grid Query Evaluator Service)[10]。
SGDQS負責創(chuàng)建SDQP服務,,生成數(shù)據(jù)資源實體的表結(jié)構(gòu)schema,,對查詢計劃進行編譯、優(yōu)化,、分解,、制定查詢計劃,并將分解后的查詢發(fā)送給SGQES,。另外SGDQS還負責與用戶的交互,,接受用戶提交的請求,返回查詢結(jié)果給用戶,。
SGQES是查詢計劃的分支,,是查詢的執(zhí)行節(jié)點,它在SGDQS制定好查詢計劃后動態(tài)生成,,每個查詢計劃分支對應一個SGQES服務,,SGQES直接與數(shù)據(jù)資源和其他SGQES交互,并將執(zhí)行結(jié)果返回給SGDQS,。SGQES使用經(jīng)SGDQS分解的SQL語句進行查詢訪問,。圖3說明了一次查詢進行的數(shù)據(jù)流程,,其中數(shù)據(jù)服務資源SDSR(Spatial Data Service Resource) 標識和承載其數(shù)據(jù)庫的URI地址,充分屏蔽了異構(gòu)性,,實現(xiàn)了透明訪問[11],。
3 系統(tǒng)實現(xiàn)及實驗
3.1系統(tǒng)環(huán)境
部署了PostGIS和Beyondb兩個數(shù)據(jù)庫服務器。在WindowsXP操作系統(tǒng)上的Beyondb數(shù)據(jù)庫中存放了長沙市的鐵路數(shù)據(jù),在虛擬機Ubuntu操作系統(tǒng)上的PostGIS中部署了長沙市的公路數(shù)據(jù),。系統(tǒng)的服務器部分OGSA-SDQP部署在Ubuntu下,。客戶端分別部署在WindowsXP和Ubuntu下,。
3.2 系統(tǒng)實現(xiàn)方式
該系統(tǒng)分為服務器和客戶端兩個部分,。服務器是空間擴展后的OGSA-SDQP,支持空間數(shù)據(jù)類型和空間操作;客戶端包括注冊,、查詢,、空間渲染、導出四個模塊,,這四個模塊為用戶提供了接口,,用戶可以根據(jù)需要選擇其中幾個模塊建立自己的圖形化系統(tǒng)。其中空間渲染模塊和導出模塊的實現(xiàn)上使用了開源項目Geotools,。Geotools是Java語言編寫的開源GIS工具包,,提供各種GIS算法、各種數(shù)據(jù)格式的讀寫和顯示,,可以實現(xiàn)地圖的可視化,。
3.3 實驗結(jié)果
通過OGSA-SDQP訪問空間數(shù)據(jù)庫,既可以像以前一樣訪問單個數(shù)據(jù)庫來獲取空間信息,,如圖4(a),、圖4(b)所示,也可以通過集成查詢,,將鐵路和公路一次讀取并顯示出來,,看起來就像是對一個數(shù)據(jù)庫進行操作一樣,如圖4(c)所示,;還可以對獲取的空間數(shù)據(jù)進行操作,,圖4(d)是對鐵路的外包框操作,,圖4(e)是對公路做緩沖區(qū)操作,,圖4(f)求鐵路和公路的交點。
測試OGSA-SDQP的性能如圖5所示,。橫軸表示查詢的數(shù)據(jù)量,,縱軸表示查詢時間。先分別對兩個空間數(shù)據(jù)庫進行查詢,,將它們的查詢時間相加,,再與OGSA-SDQP的查詢時間做比較,。實驗發(fā)現(xiàn),由于采用并行查詢,,OGSA-SDQP在查詢記錄較小時,,基本上與單獨查詢的時間一致。隨著數(shù)據(jù)量的增大,,耗費的資源也隨之增大,,因此在查詢數(shù)據(jù)量大時集成查詢所需時間會比單獨查詢時間更長,但總體上還是小于累計的時間,。OGSA-SDQP的性能取決于網(wǎng)格服務器的性能和各個數(shù)據(jù)庫服務器的性能,。
針對空間數(shù)據(jù)分布式異構(gòu)的特點,使用網(wǎng)格技術(shù),,構(gòu)建了分布式多源異構(gòu)空間信息的集成訪問環(huán)境OGSA-SDQP,。在該環(huán)境下,用戶可以采用并發(fā)的方式同時訪問多個空間數(shù)據(jù)源,;擴展了空間操作功能,,支持對查詢結(jié)果的處理。最后,,通過實驗證明了該系統(tǒng)在集成查詢中的性能優(yōu)勢,。
參考文獻
[1] 龔強. 地理空間信息網(wǎng)格計算環(huán)境研究[J].信息技術(shù),2008,32(7):1-4.
[2] 都志輝, 陳渝. 以服務為中心的網(wǎng)格體系結(jié)構(gòu)OGSA[J]. 計算機科學, 2003,30(7):26-30.
[3] JOSHY J, FELLENSTEIN F著. 網(wǎng)格計算(Grid Computing)[M]. 占曉蘇, 張少華,譯.北京: 清華大學出版社, 2005.
[4] 張豐. 面向網(wǎng)格的海量時空數(shù)據(jù)訪問、集成于互操作研究[D]. 浙江:浙江大學, 2007.4.
[5] HOARAU W, TIXEUIL S, RODRIGUES N. Dependability evaluation of the ogsa-dai middleware[A]. Achievements in European Research on Grid Systems[C]. 2008:223-236.
[6] LYNDEN S, MUKHERJEE A, HUME A C. The design and implementation of OGSA-DQP: A service-based distributed query processor[J]. FutureGeneration Computer Systems, 2009,25(3):224-236.
[7] 劉會強. 網(wǎng)格環(huán)境下數(shù)據(jù)集成和查詢處理的研究與實現(xiàn)[D].北京:北京工業(yè)大學, 2009.4.
[8] CHUE Hong N, ANTONIOLETTI M, KARASAVVAS K. Accessing data in grids using OGSA-DAI[A]. Knowledge and Data Management in GRIDs[C]. 2007.3.
[9] 高昂. 面向空間數(shù)據(jù)的分布式服務計算研究與實現(xiàn)[D].北京:中國科學院地理科學與資源研究所, 2010.3.
[10] 張建兵. 基于網(wǎng)格的空間信息服務關(guān)鍵技術(shù)研究[D]. 北京:中國科學院遙感應用研究所, 2006.5.
[11] 龐雄文, 齊德昱, 李擁軍. Globus下的數(shù)據(jù)訪問方法[J].計算機應用研究, 2006,27(4):68-70.