胡小彭,任家鋒,魏雪梅
(1.安徽省基礎(chǔ)測繪信息中心,安徽 合肥 230031;2.安徽省智慧城市與地理國情監(jiān)測重點實驗室,安徽 合肥 230031)
分區(qū)存儲技術(shù)在地理國情普查數(shù)據(jù)庫中的應(yīng)用
胡小彭1,2,任家鋒1,2,魏雪梅1,2
(1.安徽省基礎(chǔ)測繪信息中心,安徽 合肥 230031;2.安徽省智慧城市與地理國情監(jiān)測重點實驗室,安徽 合肥 230031)
分析了Oracle數(shù)據(jù)庫分區(qū)存儲技術(shù),并通過ArcSDE空間數(shù)據(jù)庫引擎,提出了一種基于分區(qū)存儲技術(shù)的空間數(shù)據(jù)入庫解決方案。根據(jù)地理國情普查數(shù)據(jù)的特點,設(shè)計了對應(yīng)的數(shù)據(jù)分區(qū)存儲策略;并將其應(yīng)用于安徽省地理國情普查數(shù)據(jù)庫建設(shè)中。測試結(jié)果表明,分區(qū)存儲數(shù)據(jù)庫的讀取效率明顯高于非分區(qū)存儲數(shù)據(jù)庫。
地理國情普查;分區(qū)存儲;空間數(shù)據(jù);數(shù)據(jù)庫
地理國情普查是一項重大的國情國力調(diào)查,是全面獲取地理國情信息、掌握地表自然、生態(tài)以及人類活動基本情況的重要手段和基礎(chǔ)性工作[1]。安徽省第一次地理國情普查是與全國各省、市、區(qū)同步進(jìn)行的一項重要工作。地理國情普查成果數(shù)據(jù)具有龐大、復(fù)雜、多樣化且存儲分散等特點,為實現(xiàn)成果數(shù)據(jù)的集中存儲、安全管理與高效應(yīng)用,需要建立完整且空間連續(xù)的地理國情普查數(shù)據(jù)庫,以滿足普查成果數(shù)據(jù)管理、分發(fā)應(yīng)用、統(tǒng)計分析和地理國情監(jiān)測的需求[2]。
地理國情普查數(shù)據(jù)庫建設(shè)的內(nèi)容包括地理國情普查成果數(shù)據(jù)、專題數(shù)據(jù)和地理國情統(tǒng)計分析成果數(shù)據(jù)等[3]。其中,地理國情普查成果數(shù)據(jù)中的地表覆蓋、道路網(wǎng)絡(luò)和水域網(wǎng)絡(luò)等要素數(shù)量多、數(shù)據(jù)量大,可采取分區(qū)存儲策略,將其存儲在不同的物理空間,以提高數(shù)據(jù)的存儲和訪問性能,并可有效隔離數(shù)據(jù)故障[4]。
在數(shù)據(jù)庫建庫過程中,當(dāng)數(shù)據(jù)庫的表過大時,通常會采用分區(qū)存儲的策略,例如在Oracle中會采用分區(qū)表的形式,按照業(yè)務(wù)特征對表進(jìn)行分區(qū),達(dá)到提高存儲性、可管理性和可用性的目的。同樣,也可通過ArcSDE空間數(shù)據(jù)庫引擎,實現(xiàn)空間數(shù)據(jù)的分區(qū)存儲。
1.1 Oracle的分區(qū)存儲
分區(qū)是指將大型的表或索引分割成相對較小的、可獨立管理的部分,這些獨立的部分即為分區(qū)。對表進(jìn)行分區(qū)后,各分區(qū)的邏輯屬性是相同的,但物理屬性可以不同,如分區(qū)后各分區(qū)的屬性結(jié)構(gòu)完全一致,但各分區(qū)可存儲在不同的表空間中。由于各分區(qū)的邏輯屬性完全一致,對分區(qū)后的表來說,可用同樣的SQL語句進(jìn)行操作,沒有增加用戶操作數(shù)據(jù)庫的復(fù)雜度[5-6]。分區(qū)存儲的優(yōu)點為:①提高讀取效率,用戶可只在感興趣目標(biāo)分區(qū)中進(jìn)行查詢,從而提高數(shù)據(jù)讀取的效率;②維護(hù)方便,可單獨備份和恢復(fù)每個分區(qū);③隔離故障,若表的某個分區(qū)出現(xiàn)故障,但不影響表在其他分區(qū)數(shù)據(jù)的使用,增強了數(shù)據(jù)的可用性;④均衡I/O,將不同分區(qū)映射到不同的磁盤以平衡系統(tǒng)的I/O效率,提高了并發(fā)性,改善了系統(tǒng)性能。
Oracle的表分區(qū)方法分為范圍分區(qū)、列表分區(qū)、散列分區(qū)和組合分區(qū)4種[7],具體方法為:
1)范圍分區(qū):按范圍對數(shù)據(jù)表中的某個值進(jìn)行分區(qū),如根據(jù)行政區(qū)劃分區(qū),將不同行政區(qū)劃內(nèi)的數(shù)據(jù)存儲到對應(yīng)的分區(qū)表中。
2)列表分區(qū):對分區(qū)字段的離散值進(jìn)行分區(qū),可按照自然的方式將無序和不相關(guān)的數(shù)據(jù)集合進(jìn)行分區(qū)。
3)散列分區(qū):基于分區(qū)字段的Hash值,自動將記錄插入到相應(yīng)分區(qū),常用于分區(qū)范圍很難確定或很難平衡的情況。
4)組合分區(qū):主要有范圍—散列分區(qū)、范圍—列表分區(qū),將兩種分區(qū)方法結(jié)合使用,以滿足復(fù)雜情況的需求。
1.2 空間數(shù)據(jù)分區(qū)存儲
通過ArcSDE空間數(shù)據(jù)庫引擎可實現(xiàn)空間數(shù)據(jù)在Oracle中的分區(qū)存儲,即實現(xiàn)對ArcSDE相關(guān)參數(shù)設(shè)置的分區(qū)存儲。設(shè)置的方式有兩種:一種是對Dbtune文件(位于SDEHOME/etc/dbtune.sde)進(jìn)行配置,另一種是在ArcSDE系統(tǒng)表Dbtune中新增分區(qū)關(guān)鍵字和配置參數(shù);前者需安裝ArcSDE服務(wù),而后者只需鏈接ArcSDE數(shù)據(jù)庫即可。隨著ArcSDE版本的升級完善,已經(jīng)越來越趨向于通過直連的方式來鏈接空間數(shù)據(jù)庫。本文采用第二種方式對ArcSDE系統(tǒng)數(shù)據(jù)庫進(jìn)行配置,在配置的同時還可將空間數(shù)據(jù)的存儲模型設(shè)為基于Oracle Spatial的SDO_Geometry,進(jìn)一步提升空間數(shù)據(jù)的存儲性能。系統(tǒng)表的關(guān)鍵參數(shù)配置如表 1所示。
表1 ArcSDE系統(tǒng)表配置參數(shù)
2.1 分區(qū)存儲策略
地理國情普查成果數(shù)據(jù)中需要對要素數(shù)量多、數(shù)據(jù)量大的矢量數(shù)據(jù)進(jìn)行分區(qū)存儲。對于矢量數(shù)據(jù)來說,需進(jìn)行分區(qū)存儲的數(shù)據(jù)有地表覆蓋數(shù)據(jù)、交通網(wǎng)絡(luò)和水域網(wǎng)絡(luò)等,即需在V_LCRA、V_LRDL、V_LCTL、V_LVVL、V_HYDL、V_HYDA等6個圖層中增加1 個AREACODE字段,表示數(shù)據(jù)的分區(qū)代碼。
由于安徽省地理國情普查成果數(shù)據(jù)是以縣、區(qū)為單位進(jìn)行生產(chǎn)、建庫預(yù)處理和存儲組織的,為了便于數(shù)據(jù)入庫,在數(shù)據(jù)庫中可按照縣、區(qū)進(jìn)行分區(qū)存儲。具體實現(xiàn)方法為:首先在各縣、區(qū)的成果數(shù)據(jù)中建立分區(qū)代碼;再采用范圍分區(qū)的方法,根據(jù)分區(qū)代碼建立表分區(qū)。分區(qū)存儲設(shè)置功能模塊界面如圖1所示。
圖1 分區(qū)存儲設(shè)置功能界面
2.2 分區(qū)數(shù)據(jù)入庫
數(shù)據(jù)入庫前,需根據(jù)地理國情普查數(shù)據(jù)庫建設(shè)規(guī)范要求,建立每個要素類的數(shù)據(jù)結(jié)構(gòu);要實現(xiàn)分區(qū)數(shù)據(jù)入庫,在建立要素類時需指定配置關(guān)鍵字(代碼中的GQDB_PARTITION為分區(qū)策略配置中的關(guān)鍵字),創(chuàng)建分區(qū)要素類的代碼為:
IFeatureClass pfC = pFeatureDataset.CreateFeatureClass(fs Name,fsField,
null,null,pesriFeatureType, “SHAPE”, “GQDB_ PARTITION”);
為了保證數(shù)據(jù)高效、正確無誤地入庫,利用ArcGIS Engine組件,根據(jù)分區(qū)數(shù)據(jù)存儲的特性,開發(fā)了分區(qū)數(shù)據(jù)入庫程序,實現(xiàn)了各縣、區(qū)地理國情普查矢量數(shù)據(jù)在數(shù)據(jù)庫中的自動化分區(qū)存儲。
2.3 實例對比驗證
由于采用分區(qū)存儲的圖層數(shù)據(jù)要素數(shù)量多、數(shù)據(jù)量大,在未分區(qū)前需在海量數(shù)據(jù)中進(jìn)行檢索,降低了數(shù)據(jù)讀取效率;而使用分區(qū)存儲后,可只在指定的分區(qū)中進(jìn)行檢索,提高了數(shù)據(jù)讀取效率。在實際應(yīng)用中,可通過ArcGIS Engine提供的ISqlWorkspace和IQueryDescription接口來實現(xiàn)對分區(qū)數(shù)據(jù)的調(diào)用。
1)用直連的方式鏈接ArcSDE:
IPropertySet prtySet=new PropertySetClass();
prtySet.SetProperty(“instance”, “sde:oracle11g:10.34.65.1/ orcl”);
prtySet.SetProperty(“user”, “AHGQSDE”);
prtySet.SetProperty(“password”, “AHGQSDE”);
IWorkspaceFactory wkpFactory=new SdeWorkspace Factory();
IWorkspace wkp= wkpFactory.Open(prtySet,0);
2)調(diào)用分區(qū)數(shù)據(jù)示例代碼:ISqlWorkspace sqlWkp=(ISqlWorkspace) workspace; String cmd=“select * from V_LCRA Patrition (PARTITION340123)”;
IQueryDescription qDsp= sqlWkp.GetQueryDescription(cmd); String lyrName=“”;
sqlWkp.CheckDatasetName(“V_LCRA”, qDsp,out lyrName);
ITable pTb= sqlWkp.OpenQueryClass(lyrName, qDsp);
IFeatureClass pfC= pTb as IFeatureClass;
為了驗證分區(qū)數(shù)據(jù)的查詢效率,利用同一臺計算機,根據(jù)上述查詢方法,分別在全省分區(qū)和非分區(qū)存儲數(shù)據(jù)庫中讀取肥西縣的地表覆蓋、水系數(shù)據(jù),如圖2所示。
圖2 查詢效率對比
通過實例測試對比驗證表明,在分區(qū)存儲數(shù)據(jù)庫中讀取數(shù)據(jù)的效率明顯高于非分區(qū)存儲數(shù)據(jù)庫,查詢效率對比見表2。
表2 查詢效率對比/ms
本文在分析數(shù)據(jù)庫分區(qū)存儲相關(guān)技術(shù)的基礎(chǔ)上,提出了地理國情普查數(shù)據(jù)分區(qū)存儲的策略與方法;并通過編程實現(xiàn)、效率測試、算法調(diào)優(yōu),實現(xiàn)了數(shù)據(jù)量較大的地表覆蓋、道路和水系等矢量數(shù)據(jù)的分區(qū)存儲,為安徽省地理國情普查數(shù)據(jù)庫建設(shè)提供了一種高效方案。
分區(qū)存儲技術(shù),可明顯提高數(shù)據(jù)的讀取效率,也便于對數(shù)據(jù)庫的維護(hù)。高效的數(shù)據(jù)讀取效率有助于提高數(shù)據(jù)庫系統(tǒng)的性能和操作體驗,為今后安徽省地理國情普查成果的分發(fā)與應(yīng)用提供了更好的技術(shù)支撐。本文提出的空間數(shù)據(jù)分區(qū)存儲方法,亦可為其他地理信息數(shù)據(jù)庫的建設(shè)提供參考。
[1] GDPJ 03-2013.地理國情普查數(shù)據(jù)規(guī)定與采集要求[S].北京:國家測繪地理信息局,2013:8
[2] 國務(wù)院第一次全國地理國情普查領(lǐng)導(dǎo)小組辦公室.地理國情普查數(shù)據(jù)庫建庫技術(shù)方法[M].北京:測繪出版社,2015:15-20
[3] 魏雪梅,馬衛(wèi)春,李寶.安徽省地理國情普查數(shù)據(jù)庫系統(tǒng)的設(shè)計與實現(xiàn)[J].地理空間信息,2016,14(11):14-17
[4] 孫雷剛,周可法,張楠楠,等.數(shù)據(jù)分區(qū)在地學(xué)空間數(shù)據(jù)查詢中的應(yīng)用[J].計算機應(yīng)用,2010,30(增刊2):148-151
[5] 李璐璐.Oracle數(shù)據(jù)庫優(yōu)化方法分析[J].硅谷,2014(24):31-32 [6] 王佳,王智森.利用表分區(qū)的大數(shù)據(jù)庫優(yōu)化方法[J].大連工業(yè)大學(xué)學(xué)報,2013,32(6):465-468
[7] 蔣勇.Oracle數(shù)據(jù)庫分區(qū)技術(shù)及其應(yīng)用[J].科技信息, 2011(29):49-50
P208
B
1672-4623(2017)05-0039-03
10.3969/j.issn.1672-4623.2017.0051.2
胡小彭,碩士研究生,工程師,主要從事GIS開發(fā)與應(yīng)用、數(shù)據(jù)庫建設(shè)等方面工作。
2016-12-19。