胡小彭,任家鋒,魏雪梅
(1.安徽省基礎測繪信息中心,安徽 合肥 230031;2.安徽省智慧城市與地理國情監測重點實驗室,安徽 合肥 230031)
分區存儲技術在地理國情普查數據庫中的應用
胡小彭1,2,任家鋒1,2,魏雪梅1,2
(1.安徽省基礎測繪信息中心,安徽 合肥 230031;2.安徽省智慧城市與地理國情監測重點實驗室,安徽 合肥 230031)
分析了Oracle數據庫分區存儲技術,并通過ArcSDE空間數據庫引擎,提出了一種基于分區存儲技術的空間數據入庫解決方案。根據地理國情普查數據的特點,設計了對應的數據分區存儲策略;并將其應用于安徽省地理國情普查數據庫建設中。測試結果表明,分區存儲數據庫的讀取效率明顯高于非分區存儲數據庫。
地理國情普查;分區存儲;空間數據;數據庫

地理國情普查是一項重大的國情國力調查,是全面獲取地理國情信息、掌握地表自然、生態以及人類活動基本情況的重要手段和基礎性工作[1]。安徽省第一次地理國情普查是與全國各省、市、區同步進行的一項重要工作。地理國情普查成果數據具有龐大、復雜、多樣化且存儲分散等特點,為實現成果數據的集中存儲、安全管理與高效應用,需要建立完整且空間連續的地理國情普查數據庫,以滿足普查成果數據管理、分發應用、統計分析和地理國情監測的需求[2]。
地理國情普查數據庫建設的內容包括地理國情普查成果數據、專題數據和地理國情統計分析成果數據等[3]。其中,地理國情普查成果數據中的地表覆蓋、道路網絡和水域網絡等要素數量多、數據量大,可采取分區存儲策略,將其存儲在不同的物理空間,以提高數據的存儲和訪問性能,并可有效隔離數據故障[4]。
在數據庫建庫過程中,當數據庫的表過大時,通常會采用分區存儲的策略,例如在Oracle中會采用分區表的形式,按照業務特征對表進行分區,達到提高存儲性、可管理性和可用性的目的。同樣,也可通過ArcSDE空間數據庫引擎,實現空間數據的分區存儲。
1.1 Oracle的分區存儲
分區是指將大型的表或索引分割成相對較小的、可獨立管理的部分,這些獨立的部分即為分區。對表進行分區后,各分區的邏輯屬性是相同的,但物理屬性可以不同,如分區后各分區的屬性結構完全一致,但各分區可存儲在不同的表空間中。由于各分區的邏輯屬性完全一致,對分區后的表來說,可用同樣的SQL語句進行操作,沒有增加用戶操作數據庫的復雜度[5-6]。分區存儲的優點為:①提高讀取效率,用戶可只在感興趣目標分區中進行查詢,從而提高數據讀取的效率;②維護方便,可單獨備份和恢復每個分區;③隔離故障,若表的某個分區出現故障,但不影響表在其他分區數據的使用,增強了數據的可用性;④均衡I/O,將不同分區映射到不同的磁盤以平衡系統的I/O效率,提高了并發性,改善了系統性能。
Oracle的表分區方法分為范圍分區、列表分區、散列分區和組合分區4種[7],具體方法為:
1)范圍分區:按范圍對數據表中的某個值進行分區,如根據行政區劃分區,將不同行政區劃內的數據存儲到對應的分區表中。
2)列表分區:對分區字段的離散值進行分區,可按照自然的方式將無序和不相關的數據集合進行分區。
3)散列分區:基于分區字段的Hash值,自動將記錄插入到相應分區,常用于分區范圍很難確定或很難平衡的情況。
4)組合分區:主要有范圍—散列分區、范圍—列表分區,將兩種分區方法結合使用,以滿足復雜情況的需求。
1.2 空間數據分區存儲
通過ArcSDE空間數據庫引擎可實現空間數據在Oracle中的分區存儲,即實現對ArcSDE相關參數設置的分區存儲。設置的方式有兩種:一種是對Dbtune文件(位于SDEHOME/etc/dbtune.sde)進行配置,另一種是在ArcSDE系統表Dbtune中新增分區關鍵字和配置參數;前者需安裝ArcSDE服務,而后者只需鏈接ArcSDE數據庫即可。隨著ArcSDE版本的升級完善,已經越來越趨向于通過直連的方式來鏈接空間數據庫。本文采用第二種方式對ArcSDE系統數據庫進行配置,在配置的同時還可將空間數據的存儲模型設為基于Oracle Spatial的SDO_Geometry,進一步提升空間數據的存儲性能。系統表的關鍵參數配置如表 1所示。

表1 ArcSDE系統表配置參數
2.1 分區存儲策略
地理國情普查成果數據中需要對要素數量多、數據量大的矢量數據進行分區存儲。對于矢量數據來說,需進行分區存儲的數據有地表覆蓋數據、交通網絡和水域網絡等,即需在V_LCRA、V_LRDL、V_LCTL、V_LVVL、V_HYDL、V_HYDA等6個圖層中增加1 個AREACODE字段,表示數據的分區代碼。
由于安徽省地理國情普查成果數據是以縣、區為單位進行生產、建庫預處理和存儲組織的,為了便于數據入庫,在數據庫中可按照縣、區進行分區存儲。具體實現方法為:首先在各縣、區的成果數據中建立分區代碼;再采用范圍分區的方法,根據分區代碼建立表分區。分區存儲設置功能模塊界面如圖1所示。

圖1 分區存儲設置功能界面
2.2 分區數據入庫
數據入庫前,需根據地理國情普查數據庫建設規范要求,建立每個要素類的數據結構;要實現分區數據入庫,在建立要素類時需指定配置關鍵字(代碼中的GQDB_PARTITION為分區策略配置中的關鍵字),創建分區要素類的代碼為:
IFeatureClass pfC = pFeatureDataset.CreateFeatureClass(fs Name,fsField,
null,null,pesriFeatureType, “SHAPE”, “GQDB_ PARTITION”);
為了保證數據高效、正確無誤地入庫,利用ArcGIS Engine組件,根據分區數據存儲的特性,開發了分區數據入庫程序,實現了各縣、區地理國情普查矢量數據在數據庫中的自動化分區存儲。
2.3 實例對比驗證
由于采用分區存儲的圖層數據要素數量多、數據量大,在未分區前需在海量數據中進行檢索,降低了數據讀取效率;而使用分區存儲后,可只在指定的分區中進行檢索,提高了數據讀取效率。在實際應用中,可通過ArcGIS Engine提供的ISqlWorkspace和IQueryDescription接口來實現對分區數據的調用。
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)調用分區數據示例代碼: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;
為了驗證分區數據的查詢效率,利用同一臺計算機,根據上述查詢方法,分別在全省分區和非分區存儲數據庫中讀取肥西縣的地表覆蓋、水系數據,如圖2所示。

圖2 查詢效率對比
通過實例測試對比驗證表明,在分區存儲數據庫中讀取數據的效率明顯高于非分區存儲數據庫,查詢效率對比見表2。

表2 查詢效率對比/ms
本文在分析數據庫分區存儲相關技術的基礎上,提出了地理國情普查數據分區存儲的策略與方法;并通過編程實現、效率測試、算法調優,實現了數據量較大的地表覆蓋、道路和水系等矢量數據的分區存儲,為安徽省地理國情普查數據庫建設提供了一種高效方案。
分區存儲技術,可明顯提高數據的讀取效率,也便于對數據庫的維護。高效的數據讀取效率有助于提高數據庫系統的性能和操作體驗,為今后安徽省地理國情普查成果的分發與應用提供了更好的技術支撐。本文提出的空間數據分區存儲方法,亦可為其他地理信息數據庫的建設提供參考。
[1] GDPJ 03-2013.地理國情普查數據規定與采集要求[S].北京:國家測繪地理信息局,2013:8
[2] 國務院第一次全國地理國情普查領導小組辦公室.地理國情普查數據庫建庫技術方法[M].北京:測繪出版社,2015:15-20
[3] 魏雪梅,馬衛春,李寶.安徽省地理國情普查數據庫系統的設計與實現[J].地理空間信息,2016,14(11):14-17
[4] 孫雷剛,周可法,張楠楠,等.數據分區在地學空間數據查詢中的應用[J].計算機應用,2010,30(增刊2):148-151
[5] 李璐璐.Oracle數據庫優化方法分析[J].硅谷,2014(24):31-32 [6] 王佳,王智森.利用表分區的大數據庫優化方法[J].大連工業大學學報,2013,32(6):465-468
[7] 蔣勇.Oracle數據庫分區技術及其應用[J].科技信息, 2011(29):49-50
P208
B
1672-4623(2017)05-0039-03
10.3969/j.issn.1672-4623.2017.0051.2
胡小彭,碩士研究生,工程師,主要從事GIS開發與應用、數據庫建設等方面工作。
2016-12-19。