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