彭成
摘要:為充分利用空間數(shù)據(jù)對(duì)象的位置信息,提升存儲(chǔ)結(jié)構(gòu)化程度及查詢效率,基于多層索引及緩存建立空間數(shù)據(jù)管理系統(tǒng)。首先基于不同粒度建立用于渲染和查詢的兩層索引框架,同時(shí)為索引及空間數(shù)據(jù)建立內(nèi)存緩沖隊(duì)列。在查詢過(guò)程中通過(guò)區(qū)域范圍及索引多級(jí)篩選空間數(shù)據(jù)對(duì)象,在空間數(shù)據(jù)變更時(shí)增量修改索引及數(shù)據(jù)記錄,在渲染時(shí)通過(guò)內(nèi)存緩沖隊(duì)列及渲染區(qū)域?qū)?yīng)索引讀取數(shù)據(jù)。結(jié)合實(shí)例,驗(yàn)證了索引及內(nèi)存緩沖的效果,為高效空間數(shù)據(jù)存儲(chǔ)及查詢提供了技術(shù)支持。
關(guān)鍵詞:數(shù)據(jù)庫(kù);空間數(shù)據(jù);多層索引;內(nèi)存緩沖隊(duì)列;地理信息系統(tǒng)
中圖分類號(hào): TP311 ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2023)36-0059-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID)
0 引言
地理信息系統(tǒng)的發(fā)展與應(yīng)用,導(dǎo)致空間數(shù)據(jù)不斷增長(zhǎng),海量空間數(shù)據(jù)的存儲(chǔ)和查詢模式變得十分重要,也是地理信息系統(tǒng)發(fā)展的瓶頸所在[1-2]。如何設(shè)計(jì)高效的空間數(shù)據(jù)存儲(chǔ)和查詢模式,提高數(shù)據(jù)導(dǎo)入、加載、渲染、查詢的速度,成為地理信息系統(tǒng)中首要解決的問題[3]。
空間數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)的發(fā)展經(jīng)歷了五個(gè)時(shí)代:文件系統(tǒng)存儲(chǔ)、混合數(shù)據(jù)存儲(chǔ)、關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)、面向?qū)ο髷?shù)據(jù)庫(kù)存儲(chǔ)、對(duì)象關(guān)系型存儲(chǔ)[4-5]。目前,在成熟的二維地理信息系統(tǒng)商業(yè)軟件方面,主要采用對(duì)象關(guān)系型,其擁有完善成熟的數(shù)據(jù)管理功能。現(xiàn)存在兩種方法,一是數(shù)據(jù)庫(kù)企業(yè)在其各自的數(shù)據(jù)庫(kù)產(chǎn)品中增加了支持空間數(shù)據(jù)類型的專用軟件(如Oracle的Spatial Cartridge)[6],二是地理信息系統(tǒng)軟件企業(yè)在傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)之上進(jìn)行功能和數(shù)據(jù)類型的擴(kuò)張,外加一個(gè)空間數(shù)據(jù)管理引擎,如ESRI的ArcSDE,MapInfo與Oracle公司共同開發(fā)的Oracle Spatial等[7]。而在這一時(shí)期成熟的系統(tǒng)有加州大學(xué)Berkeley分校研制的PostGIS[8]。
對(duì)于現(xiàn)有的空間數(shù)據(jù)存儲(chǔ)及查詢,對(duì)空間數(shù)據(jù)對(duì)象的位置信息利用得不夠充分,存儲(chǔ)的結(jié)構(gòu)化程度不夠高,查詢的效率也有提升空間?,F(xiàn)有的空間數(shù)據(jù)存儲(chǔ)根據(jù)空間數(shù)據(jù)對(duì)象的位置建立索引,查詢時(shí)根據(jù)指定的查詢范圍對(duì)應(yīng)的區(qū)域進(jìn)行查詢,當(dāng)查詢范圍與區(qū)域范圍大小不在同級(jí)別時(shí)效率較低。對(duì)于經(jīng)常需要使用到的空間數(shù)據(jù)對(duì)象,也應(yīng)該進(jìn)行緩存以提升效率。同時(shí),在空間數(shù)據(jù)導(dǎo)入、加載等過(guò)程中,應(yīng)該充分利用計(jì)算機(jī)的性能進(jìn)行多線程、生產(chǎn)者-消費(fèi)者等模式來(lái)提升速度。
因此,針對(duì)上述問題,需要一種功能更為完善,更好地利用空間數(shù)據(jù)對(duì)象位置信息,建立更加靈活索引的空間數(shù)據(jù)存儲(chǔ)及查詢方法。
1 創(chuàng)建多層索引框架及內(nèi)存緩沖隊(duì)列
1.1創(chuàng)建表及索引
如圖1所示,首先選擇要導(dǎo)入的空間數(shù)據(jù)文件,可以選擇多種格式的文件,如shp、cgm、mapgis、雙狐文本文件等,本文選擇shp文件類型,文件為countries.shp,是多邊形類型的數(shù)據(jù)。選擇完文件后,系統(tǒng)會(huì)創(chuàng)建相應(yīng)的空間數(shù)據(jù)對(duì)象表、索引表、屬性表、參數(shù)配置表。屬性表默認(rèn)只有對(duì)象編號(hào)字段,若導(dǎo)入的文件配有相應(yīng)的屬性文件,則會(huì)根據(jù)屬性文件中的屬性信息增加相應(yīng)的字段;空間數(shù)據(jù)對(duì)象表包含對(duì)象編號(hào),類型,范圍及具體數(shù)據(jù);索引表包含格子編號(hào),格子類型,對(duì)象編號(hào),格子與對(duì)象的關(guān)系,對(duì)象的范圍;參數(shù)配置表包含渲染索引框架x和y兩個(gè)方向的切分?jǐn)?shù)量,查詢索引框架對(duì)渲染索引框架中一個(gè)格子在x和y方向進(jìn)一步切分的數(shù)量,內(nèi)存緩沖隊(duì)列中空間數(shù)據(jù)對(duì)象的數(shù)量限制及索引的數(shù)量限制,所有空間數(shù)據(jù)對(duì)象的總范圍。
建表之后系統(tǒng)會(huì)給空間數(shù)據(jù)對(duì)象表的對(duì)象編號(hào)字段,索引表的格子編號(hào)、對(duì)象編號(hào)字段建立索引,以加快數(shù)據(jù)庫(kù)訪問速度。
1.2 配置參數(shù)設(shè)置
配置參數(shù)基本屬性包括導(dǎo)入的空間數(shù)據(jù)對(duì)象渲染時(shí)顯示的圖層名稱,是否可見,以及備注信息,配置參數(shù)的SDE屬性即加載過(guò)程中的屬性包括是否存入數(shù)據(jù)庫(kù),渲染索引框架x和y兩個(gè)方向的切分?jǐn)?shù)量,查詢索引框架對(duì)渲染索引框架中一個(gè)格子在x和y方向進(jìn)一步切分的數(shù)量,內(nèi)存緩沖隊(duì)列中空間數(shù)據(jù)對(duì)象的數(shù)量限制及索引的數(shù)量限制,是否使用多線程,是否在每導(dǎo)入一個(gè)空間數(shù)據(jù)對(duì)象時(shí)將其插入緩沖隊(duì)列,空間數(shù)據(jù)對(duì)象和屬性數(shù)據(jù)的提交間隔。
如圖2所示,本文例子設(shè)置渲染索引框架劃分方式為10×10,查詢索引框架在渲染索引框架格子基礎(chǔ)上每個(gè)格子在x和y上進(jìn)一步切分2塊,內(nèi)存緩沖隊(duì)列中空間數(shù)據(jù)對(duì)象的數(shù)量限制為100,內(nèi)存緩沖隊(duì)列中索引數(shù)量的限制為1 000,每導(dǎo)入5 000個(gè)空間數(shù)據(jù)對(duì)象和屬性時(shí)進(jìn)行一次提交。
1.3 創(chuàng)建索引框架
索引框架共分為兩層,分別用于渲染和查詢。查詢索引框架是在渲染索引框架的每個(gè)格子基礎(chǔ)上,進(jìn)一步對(duì)格子進(jìn)行劃分。通常情況下,渲染涉及的區(qū)域較大,對(duì)精度要求低,采用粗粒度劃分,查詢涉及的區(qū)域較小,對(duì)精度要求高,采用細(xì)粒度劃分。本文例子渲染索引框架劃分粒度為10×10,查詢索引框架的劃分粒度為20×20。
建立索引框架時(shí),先計(jì)算空間數(shù)據(jù)對(duì)象總體范圍外包矩形,將其按照x和y兩個(gè)方向進(jìn)行分塊,切分為多個(gè)格子。本文例子可以從導(dǎo)入的文件中直接獲取到其總體范圍的外包矩形,x的最小值和最大值分別為-190.0,190.0,y的最小值和最大值分別為-99.9, 93.6。將這片區(qū)域分別劃分為10×10份和20×20份,建立渲染索引框架和查詢索引框架。
1.4 創(chuàng)建緩沖隊(duì)列
內(nèi)存緩沖隊(duì)列包括索引及空間數(shù)據(jù)對(duì)象,通過(guò)將部分索引及空間數(shù)據(jù)對(duì)象存放在內(nèi)存中,減少渲染和查詢過(guò)程中的數(shù)據(jù)庫(kù)訪問操作。其中索引在內(nèi)存緩沖中以格子為單位進(jìn)行存儲(chǔ)。當(dāng)隊(duì)列已滿時(shí)將最早添加進(jìn)隊(duì)列的元素剔除。本文例子索引隊(duì)列的大小限制為1 000,空間數(shù)據(jù)對(duì)象隊(duì)列的大小限制為100。
2 空間數(shù)據(jù)的導(dǎo)入與索引生成
2.1 導(dǎo)入空間數(shù)據(jù)
在建立完索引框架和內(nèi)存緩沖隊(duì)列后,導(dǎo)入空間數(shù)據(jù),具體的形狀和位置信息通過(guò)坐標(biāo)存儲(chǔ)和表示。本文例子空間數(shù)據(jù)對(duì)象的文件類型為多多邊形,通過(guò)頂點(diǎn)坐標(biāo)得到空間數(shù)據(jù)對(duì)象的形狀和范圍,用來(lái)判斷與給定的查詢和渲染范圍是否有相交的部分。
2.2 生成索引
對(duì)于每個(gè)導(dǎo)入的空間數(shù)據(jù)對(duì)象生成索引,根據(jù)空間數(shù)據(jù)對(duì)象的范圍,得到此范圍包含的渲染索引格子和查詢索引格子,再根據(jù)空間數(shù)據(jù)對(duì)象的形狀,判斷是否與格子范圍有交集,對(duì)有交集的生成索引。導(dǎo)入完畢后,每個(gè)格子對(duì)應(yīng)若干條索引,每條索引表示與此格子有相交部分的空間數(shù)據(jù)對(duì)象。
2.3 存儲(chǔ)索引及空間數(shù)據(jù)
在到達(dá)提交間隔時(shí),將生成的索引作為記錄存儲(chǔ)到數(shù)據(jù)庫(kù)的索引表中,存儲(chǔ)的信息包含索引類型、格子編號(hào)、對(duì)象編號(hào)、對(duì)象所占范圍、與索引格子的關(guān)系。這些索引用來(lái)快速獲取所給區(qū)域中包含的空間數(shù)據(jù)對(duì)象,提升顯示查詢速度。空間數(shù)據(jù)對(duì)象及其對(duì)應(yīng)的渲染索引和查詢索引會(huì)添加到內(nèi)存緩沖隊(duì)列中。同時(shí),將每個(gè)空間數(shù)據(jù)對(duì)象作為一條記錄存儲(chǔ)到數(shù)據(jù)庫(kù)的空間數(shù)據(jù)對(duì)象表中,存儲(chǔ)的信息包含對(duì)象編號(hào)、類型、范圍以及具體形狀數(shù)據(jù)。本文例子每導(dǎo)入5000個(gè)空間數(shù)據(jù)對(duì)象進(jìn)行一次提交。
導(dǎo)入空間數(shù)據(jù)采用多線程來(lái)讀取和提交空間數(shù)據(jù)對(duì)象和索引,并采用生產(chǎn)者-消費(fèi)者模式,生成渲染索引和查詢索引作為生產(chǎn)者,提交作為消費(fèi)者同時(shí)進(jìn)行。
對(duì)于存在關(guān)聯(lián)屬性文件的情況,如本文例子,存在countries.dbf文件,其存儲(chǔ)了每個(gè)空間數(shù)據(jù)對(duì)象的相關(guān)屬性,如人口密度、名稱,會(huì)讀取這個(gè)屬性文件并將信息添加到屬性表中。
3 空間數(shù)據(jù)的渲染與查詢
3.1空間數(shù)據(jù)渲染
根據(jù)給定的渲染范圍,得到對(duì)應(yīng)的渲染格子,然后逐一渲染這些格子所含的空間數(shù)據(jù)對(duì)象。對(duì)于一個(gè)渲染格子,如果對(duì)應(yīng)的渲染索引記錄存在于內(nèi)存緩沖隊(duì)列中,則直接獲取索引對(duì)應(yīng)的空間數(shù)據(jù)對(duì)象編號(hào),否則從數(shù)據(jù)庫(kù)索引表中獲取編號(hào),然后根據(jù)編號(hào)獲取空間數(shù)據(jù)對(duì)象并渲染。對(duì)于存在于內(nèi)存緩沖隊(duì)列中的空間數(shù)據(jù)對(duì)象,直接進(jìn)行渲染,否則從空間數(shù)據(jù)對(duì)象表獲取數(shù)據(jù)然后渲染。本文例子效果如圖3所示,是由多個(gè)多邊形組成的世界地圖形狀。
3.2 空間數(shù)據(jù)查詢
空間數(shù)據(jù)查詢的分為初始過(guò)濾、中間過(guò)濾以及最終過(guò)濾。初始過(guò)濾是根據(jù)查詢所指定的區(qū)域,得到其對(duì)應(yīng)哪些查詢格子,將這些格子作為初步結(jié)果;中間過(guò)濾是在初步結(jié)果基礎(chǔ)上,進(jìn)一步進(jìn)行過(guò)濾,先計(jì)算出查詢所指定區(qū)域?qū)?yīng)的內(nèi)切矩形,得到初步結(jié)果中存在于內(nèi)切矩形中的格子,并獲取這些格子所對(duì)應(yīng)的空間數(shù)據(jù)對(duì)象,將其添加到最終查詢結(jié)果中,對(duì)于初步結(jié)果中其他格子,在下一階段進(jìn)行判斷;最終過(guò)濾是對(duì)上一階段剩余的查詢格子,獲取他們所含的空間數(shù)據(jù)對(duì)象,并逐一與查詢指定區(qū)域進(jìn)行比較判斷,把與查詢區(qū)域有相交部分的空間數(shù)據(jù)對(duì)象添加到最終結(jié)果中。本文例子給出查詢請(qǐng)求結(jié)果如圖4所示,結(jié)果集中的空間數(shù)據(jù)對(duì)象以不同顏色顯示;在對(duì)話框中選中結(jié)果集中的某個(gè)空間數(shù)據(jù)對(duì)象顯示對(duì)應(yīng)屬性信息,并以不同顏色顯示,圖中選中的空間數(shù)據(jù)對(duì)象的名稱為“Niger”,人口密度值為7.0。
4 空間數(shù)據(jù)的變更與加載
新增空間數(shù)據(jù)對(duì)象時(shí),根據(jù)范圍計(jì)算對(duì)應(yīng)渲染和查詢格子,生成索引添加到內(nèi)存緩沖隊(duì)列,添加到新增集合;修改時(shí),根據(jù)對(duì)象編號(hào)得到對(duì)應(yīng)渲染和索引格子,將其刪除,然后根據(jù)修改后的空間數(shù)據(jù)對(duì)象范圍計(jì)算對(duì)應(yīng)渲染和索引格子,生成索引添加到內(nèi)存緩沖隊(duì)列,并添加到修改集合;刪除時(shí),根據(jù)對(duì)象編號(hào)得到對(duì)應(yīng)的渲染和索引格子,將其刪除,并添加到刪除集合。
提交變更時(shí),對(duì)新增集合,將對(duì)應(yīng)的渲染、查詢索引和對(duì)象數(shù)據(jù)提交到數(shù)據(jù)庫(kù);對(duì)修改集合,在索引表中刪除對(duì)象編號(hào)相同記錄,并將對(duì)應(yīng)的新渲染、查詢索引提交到數(shù)據(jù)庫(kù),在空間數(shù)據(jù)對(duì)象表中更新對(duì)象編號(hào)相同記錄;對(duì)刪除集合,在索引表和空間數(shù)據(jù)對(duì)象表中刪除對(duì)象編號(hào)相同記錄。
空間數(shù)據(jù)加載時(shí),根據(jù)配置參數(shù)建立渲染和查詢索引框架,然后讀取渲染格子索引,從空間數(shù)據(jù)對(duì)象表讀取空間數(shù)據(jù)對(duì)象加載到內(nèi)存緩沖隊(duì)列。
5 結(jié)論
本文設(shè)計(jì)實(shí)現(xiàn)了高效的基于多層索引及緩存的空間數(shù)據(jù)管理系統(tǒng),建立了多層索引,針對(duì)不同的渲染和查詢要求,都有較高的處理效率;建立了內(nèi)存緩沖策略,對(duì)經(jīng)常使用的空間數(shù)據(jù)對(duì)象直接從內(nèi)存中給出,提升了效率;使用多線程及生產(chǎn)者-消費(fèi)者模式進(jìn)行空間數(shù)據(jù)對(duì)象的導(dǎo)入和加載,提升了數(shù)據(jù)存取的速度。
參考文獻(xiàn):
[1] 王峰,安曉亞,朱璇.地理空間數(shù)據(jù)增量更新版本化管理方法研究[J].地理空間信息,2021,19(2):26-29,6.
[2] 宋軒,高云君,李勇,等.空間數(shù)據(jù)智能:概念、技術(shù)與挑戰(zhàn)[J].計(jì)算機(jī)研究與發(fā)展,2022,59(2):255-263.
[3] 郭名靜,景琳.空間數(shù)據(jù)挖掘驅(qū)動(dòng)城市疫情監(jiān)測(cè)常態(tài)化的作用研究[J].商業(yè)經(jīng)濟(jì),2022(2):11-13,16.
[4] 蘇瑤.基于GIS+BIM的空間數(shù)據(jù)可視化研究[J].自動(dòng)化與儀器儀表,2021(12):28-31,35.
[5] 周群.基于GIS的綜合交通空間數(shù)據(jù)管理系統(tǒng)研究[J].地理空間信息,2021,19(11):75-78,8.
[6] 陳新.論空間數(shù)據(jù)挖掘和知識(shí)發(fā)現(xiàn)的理論與方法[J].電腦知識(shí)與技術(shù),2021,17(33):20-21,31.
[7] 崔夢(mèng)真,賀晗,王虎,等.便攜式采集裝置及鐵路基礎(chǔ)設(shè)施三維空間數(shù)據(jù)管理系統(tǒng)設(shè)計(jì)[J].鐵路計(jì)算機(jī)應(yīng)用,2021,30(10):24-29.
[8] 石偉偉,劉皓宇,程麗麗,等.超大規(guī)模空間數(shù)據(jù)管理及計(jì)算框架關(guān)鍵技術(shù)研究[J].國(guó)土資源信息化,2021(5):15-21.
【通聯(lián)編輯:梁書】