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