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