引文格式: 尚曉娟,姜福泉,張帆,等. 基于OracleSDO_PC的點(diǎn)云數(shù)據(jù)存儲管理技術(shù)的應(yīng)用研究[J].測繪通報,2015(4):57-60.DOI:10.13474/j.cnki.11-2246.2014.0502
基于OracleSDO_PC的點(diǎn)云數(shù)據(jù)存儲管理技術(shù)的應(yīng)用研究
尚曉娟1,姜福泉2,張帆1,黃先鋒1
(1. 武漢大學(xué)測繪遙感信息工程國家重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430079;
2. 中國地質(zhì)大學(xué)(武漢)信息工程學(xué)院,湖北 武漢 430074)
ApplicationResearchonPointCloudDataMemoryManagementTechnique
BasedonOracleSDO_PC
SHANGXiaojuan,JIANGFuquan,ZHANGFan,HUANGXianfeng
摘要:基于Oracle SDO_PC的存儲模型和功能結(jié)構(gòu)研究點(diǎn)云的數(shù)據(jù)庫導(dǎo)入、存儲、檢索等操作,并針對不同的點(diǎn)云數(shù)據(jù)量、點(diǎn)云類型、存儲分塊大小,以及多用戶并發(fā)情況,分別進(jìn)行點(diǎn)云數(shù)據(jù)存儲和檢索效率的試驗(yàn)對比。試驗(yàn)結(jié)果表明,SDO_PC模型可以勝任不同類型點(diǎn)云數(shù)據(jù)的存儲、檢索工作,并具有良好的數(shù)據(jù)存儲可擴(kuò)展能力和高效的多用戶并發(fā)處理能力。本研究可為后續(xù)海量點(diǎn)云數(shù)據(jù)存儲管理及應(yīng)用、服務(wù)提供有價值的參考。
關(guān)鍵詞:SDO_PC;點(diǎn)云數(shù)據(jù);存儲;檢索;多用戶并發(fā)
中圖分類號:P208
收稿日期:2014-02-25
基金項(xiàng)目:973計劃(2011CB707001);國家自然科學(xué)基金(41071291;41001308);Oracle空間數(shù)據(jù)庫新技術(shù)研究;國家科技支撐計劃(2012BAH43F00)
作者簡介:尚曉娟(1988—),女,碩士生,主要研究方向?yàn)閿z影測量、激光掃描數(shù)據(jù)分析處理等。E-mail:shangxiaojuan@whu.edu.cn
一、引言
近十幾年來,激光掃描點(diǎn)云數(shù)據(jù)作為一種描述空間對象的重要數(shù)據(jù)源,已經(jīng)受到國內(nèi)外學(xué)者和工業(yè)應(yīng)用的廣泛關(guān)注,并在三維建模、文物修復(fù)、地物提取等方面得到廣泛應(yīng)用[1-2]。然而,激光掃描點(diǎn)云數(shù)據(jù)的“海量性”給點(diǎn)云數(shù)據(jù)的后處理帶來很大困難,已經(jīng)成為限制點(diǎn)云在存儲、管理、查詢、分析、可視化等多方面應(yīng)用的瓶頸。
目前,點(diǎn)云數(shù)據(jù)的組織與管理多采用文件形式的數(shù)據(jù)管理方案,但文件管理點(diǎn)云數(shù)據(jù)的方法尚存在許多不足之處,如信息共享不便、安全級別較低、并發(fā)訪問難等。OracleSpatial作為領(lǐng)先的空間數(shù)據(jù)庫管理平臺,在管理空間數(shù)據(jù)方面具有保證數(shù)據(jù)的完整性、可恢復(fù)性和安全性等基本特性。OracleSpatial從11g開始推出了專門用于點(diǎn)云數(shù)據(jù)組織與管理的SDO_PC數(shù)據(jù)類型,針對點(diǎn)云數(shù)據(jù)的特點(diǎn)擴(kuò)展了存儲對象創(chuàng)建、查詢、可視化等多方面的功能[3]。
本文針對SDO_PC的存儲模型和功能結(jié)構(gòu),研究了Oracle數(shù)據(jù)庫的點(diǎn)云數(shù)據(jù)導(dǎo)入、創(chuàng)建存儲對象和檢索點(diǎn)云數(shù)據(jù)的操作。為了測試SDO_PC在點(diǎn)云數(shù)據(jù)存儲管理方面的性能,本文分別設(shè)計了在不同數(shù)據(jù)量的點(diǎn)云數(shù)據(jù)、不同類型的點(diǎn)云、存儲過程中不同的分塊,以及多用戶并發(fā)等不同情況下,進(jìn)行點(diǎn)云數(shù)據(jù)存儲和檢索的效率測試試驗(yàn)。從而驗(yàn)證Oracle的SDO_PC技術(shù)在點(diǎn)云數(shù)據(jù)管理方面的性能,為日益廣泛開展與海量點(diǎn)云數(shù)據(jù)管理、處理有關(guān)的工程應(yīng)用和科研提供實(shí)驗(yàn)參考。
二、SDO_PC簡介
SDO_PC是Oracle數(shù)據(jù)庫的一種對象關(guān)系數(shù)據(jù)模型,是存取管理點(diǎn)云數(shù)據(jù)信息的基礎(chǔ),提供了存取、索引、查詢、分析點(diǎn)云數(shù)據(jù)的能力,同時提供了并發(fā)訪問和安全控制等機(jī)制,并將相關(guān)函數(shù)集成在一起[4]。
1.SDO_PC點(diǎn)云數(shù)據(jù)存儲模型
圖1顯示了在Oracle中使用SDO_PC類型表示點(diǎn)云的存儲體系結(jié)構(gòu)?;砭哂袛?shù)據(jù)類型為SDO_PC的列,這個列存儲與點(diǎn)云相關(guān)的元數(shù)據(jù)。點(diǎn)云被分成多個子集,并存儲為塊表的多行。塊表同時記錄了分塊的其他屬性,如分塊的范圍、分塊中點(diǎn)的數(shù)目、分塊點(diǎn)云的分辨率范圍等。塊表中的每個分塊都唯一關(guān)聯(lián)到一個pc元數(shù)據(jù)對象上,同時每個pc對象記錄了對應(yīng)塊表的屬性信息,如塊表名稱、塊表的范圍、分塊的大小等。
點(diǎn)云數(shù)據(jù)采用上述存儲模型具有如下優(yōu)點(diǎn):①存儲點(diǎn)云的數(shù)據(jù)量沒有上限,因?yàn)楸淼男袛?shù)沒有限制;②通過指定窗口或指定塊(BLK_ID)有效選擇點(diǎn)云的子集;③支持刪除或更新指定范圍的點(diǎn)云數(shù)據(jù)。
圖1 Oracle 中點(diǎn)云的可伸縮存儲框架
2.SDO_PC相關(guān)功能介紹
OracleSpatial為實(shí)現(xiàn)快速、高效地存取、分析空間數(shù)據(jù)而將相關(guān)功能函數(shù)及其過程完全集成在數(shù)據(jù)庫服務(wù)器內(nèi),并為數(shù)據(jù)庫管理系統(tǒng)管理空間數(shù)據(jù)提供了完全開放的體系結(jié)構(gòu)[5]。用戶通過SQL定義和操縱空間數(shù)據(jù),可以訪問對象關(guān)系數(shù)據(jù)模型的存取、檢索、分析等功能。表1 為集成在Oracle數(shù)據(jù)庫內(nèi)部的SDO_PC相關(guān)功能。
表1 SDO_PC_PKG
三、Oracle數(shù)據(jù)庫中點(diǎn)云數(shù)據(jù)的關(guān)鍵操作
1. 點(diǎn)云數(shù)據(jù)的數(shù)據(jù)庫導(dǎo)入
LAS文件為存儲點(diǎn)云數(shù)據(jù)的常用數(shù)據(jù)格式。目前有兩種方法可以實(shí)現(xiàn)點(diǎn)云數(shù)據(jù)LAS文件的Oracle數(shù)據(jù)庫導(dǎo)入,分別是libLAS[6]和PDAL[7]。
筆者仿照libLAS的LAS文件讀取方式讀取點(diǎn)云數(shù)據(jù),使用OCCI[8]接口將點(diǎn)云數(shù)據(jù)插入到Oracle數(shù)據(jù)庫中,根據(jù)要存儲的點(diǎn)云屬性創(chuàng)建Inputtable來存儲點(diǎn)云坐標(biāo)和屬性信息。LAS文件導(dǎo)入為Oracle數(shù)據(jù)庫表結(jié)構(gòu)如圖2所示。
圖2 LAS文件導(dǎo)入為Oracle數(shù)據(jù)庫示意圖
2. 創(chuàng)建SDO_PC存儲對象
在Oracle數(shù)據(jù)庫中,創(chuàng)建SDO_PC存儲對象的實(shí)質(zhì)是基于點(diǎn)云數(shù)據(jù)構(gòu)建R-tree索引[9]。導(dǎo)入到輸入表(InpTable)的點(diǎn)云數(shù)據(jù)最終按照R-tree索引的原理被分塊存儲到塊表的多行。Oracle數(shù)據(jù)庫基于點(diǎn)云數(shù)據(jù)構(gòu)建R-tree索引的程序被集成在Oracle數(shù)據(jù)庫服務(wù)器的SDO_PC_PKG.INIT函數(shù)和SDO_PC_PKG.CREATE_PC函數(shù)中。
3. 點(diǎn)云數(shù)據(jù)的檢索
Oracle數(shù)據(jù)庫提供了兩種檢索點(diǎn)云數(shù)據(jù)的方法,窗口查詢和基于分辨率的查詢[10]。兩者相比而言,窗口查詢的檢索結(jié)果更加精準(zhǔn)。筆者主要針對窗口查詢進(jìn)行了試驗(yàn)。查詢過程包括兩個階段:①檢索與所給窗口范圍相交的候選分塊;②檢索候選分塊中與檢索窗口范圍相交的所有點(diǎn)。該過程被集成在Oracle數(shù)據(jù)庫服務(wù)器的SDO_PC_PKG.CLIP_PC函數(shù)中。
四、試驗(yàn)測試及分析
為驗(yàn)證OracleSDO_PC的點(diǎn)云數(shù)據(jù)存儲、檢索、多用戶并發(fā)等功能的可行性,筆者進(jìn)行了大量的測試試驗(yàn)。試驗(yàn)硬件環(huán)境:2個Intel至強(qiáng)3.2GHz處理器,8GB內(nèi)存,1TB硬盤,NTFS分區(qū)。軟件環(huán)境:64位Windows7操作系統(tǒng),VC++2010編輯器,Oracle11gR2。
試驗(yàn)數(shù)據(jù)來源于敦煌973數(shù)字文化遺產(chǎn)項(xiàng)目的機(jī)載掃描數(shù)據(jù)。掃描區(qū)域大致位于北緯40.04°、東經(jīng)94.81°的敦煌莫高窟附近的沙漠區(qū)域,數(shù)據(jù)采集的儀器為LeicaALS50Ⅱ,點(diǎn)云數(shù)據(jù)格式為LAS1.0,點(diǎn)云數(shù)據(jù)的點(diǎn)間距為0.4m,數(shù)據(jù)量為347GB。
1. 基于SDO_PC的點(diǎn)云數(shù)據(jù)存儲與檢索
為驗(yàn)證Oracle數(shù)據(jù)庫對點(diǎn)云數(shù)據(jù)存儲的可擴(kuò)展性,試驗(yàn)挑選了同一測區(qū)6組不同數(shù)據(jù)量的點(diǎn)云數(shù)據(jù),從100萬到3700萬不等。將其逐個導(dǎo)入到數(shù)據(jù)庫中,并記錄存儲時間。6組數(shù)據(jù)導(dǎo)入完成后,利用窗口查詢進(jìn)行檢索試驗(yàn),并記錄檢索與存儲范圍同樣大小的檢索時間,用吞吐量衡量所用服務(wù)器的I/O效率。試驗(yàn)結(jié)果見表2。
表2 點(diǎn)云數(shù)據(jù)的存儲和檢索時間
從表2可以看出,Oracle數(shù)據(jù)庫可以實(shí)現(xiàn)點(diǎn)云數(shù)據(jù)的導(dǎo)入,并表現(xiàn)出存儲點(diǎn)云數(shù)據(jù)的可擴(kuò)展性。另外,隨著點(diǎn)云數(shù)據(jù)量的增多,點(diǎn)云的存儲時間和檢索時間都在增大,但是檢索時間卻遠(yuǎn)遠(yuǎn)小于存儲時間,這種情況同樣體現(xiàn)在點(diǎn)云存儲和查詢的服務(wù)器I/O效率上,點(diǎn)云存儲I/O效率是1.3~1.4萬點(diǎn)/s,點(diǎn)云查詢的I/O效率在25萬點(diǎn)/s左右。原因在于基于點(diǎn)云數(shù)據(jù)構(gòu)建R-tree索引的過程遠(yuǎn)遠(yuǎn)復(fù)雜于R-tree的檢索過程,并且數(shù)據(jù)量越大,R-tree索引的構(gòu)建就越復(fù)雜。但是正由于R-tree索引的建立,才大大提高了點(diǎn)云數(shù)據(jù)的檢索效率,方便了點(diǎn)云數(shù)據(jù)的后續(xù)處理。
2. 點(diǎn)云類型不同對數(shù)據(jù)存儲和檢索的影響
為測試點(diǎn)云類型不同對Oracle的點(diǎn)云數(shù)據(jù)存儲和檢索的影響,本文選了3組不同類型的點(diǎn)云數(shù)據(jù)進(jìn)行存儲和檢索試驗(yàn)。試驗(yàn)數(shù)據(jù)情況和試驗(yàn)結(jié)果見表3。
表3 不同類型點(diǎn)云數(shù)據(jù)的 Oracle存儲和檢索
從表3可以看出,Oracle對不同類型的點(diǎn)云都可以實(shí)現(xiàn)無差別的存儲和檢索功能,而影響存儲和檢索效率的主要因素在于點(diǎn)云的密度,也即表3中所列的點(diǎn)間距。點(diǎn)間距越大,密度越小,點(diǎn)云分布越稀疏,創(chuàng)建R-tree索引的時間就越短。機(jī)載點(diǎn)云和地面點(diǎn)云相比,點(diǎn)云的數(shù)據(jù)量相差不大,但是由于機(jī)載點(diǎn)云的點(diǎn)間距遠(yuǎn)大于地面點(diǎn)云,因此即使在機(jī)載點(diǎn)云數(shù)據(jù)量大的情況下,機(jī)載點(diǎn)云的存儲時間較短,檢索時間也較短。地面點(diǎn)云和車載點(diǎn)云相比,有相同的點(diǎn)間距,車載點(diǎn)云比地面點(diǎn)云的數(shù)據(jù)量大,相應(yīng)地,存儲時間較長,檢索時間也較長。因而,Oracle對點(diǎn)云數(shù)據(jù)的存儲和檢索不受點(diǎn)云類型不同的影響,同樣數(shù)據(jù)量的點(diǎn)云數(shù)據(jù)的存儲和檢索效率與點(diǎn)云的分布密度成反比,密度越大則效率越低,反之則越高。
3. 分塊大小對點(diǎn)云數(shù)據(jù)存儲與檢索的影響
blk_capacity是決定SDO_PC存儲對象分塊大小的一個關(guān)鍵參數(shù),在函數(shù)SDO_PC_PKG.INIT的ptn_params參數(shù)中設(shè)置,一般設(shè)置如 "blk_capacity=100"。下面通過試驗(yàn)來分析blk_capacity取值不同對創(chuàng)建SDO_PC存儲對象和窗口查詢的影響。試驗(yàn)選用了數(shù)據(jù)量為12571243的LAS點(diǎn)云數(shù)據(jù),進(jìn)行了4組試驗(yàn),分別給blk_capacity取值5000、10000、50000和100000(Oracle數(shù)據(jù)庫中限制該參數(shù)上限為十萬)。為了確保試驗(yàn)中blk_capacity為唯一變量,選用該組數(shù)據(jù)進(jìn)行重復(fù)試驗(yàn)。在blk_capacity取值不同的情況下,每次導(dǎo)入該組數(shù)據(jù)后及時記錄存儲時間,然后用同樣大小的窗口去查詢點(diǎn)云數(shù)據(jù)并記錄檢索時間,最后刪除所導(dǎo)入的數(shù)據(jù)進(jìn)行下組試驗(yàn)。為避免緩存影響試驗(yàn)的真實(shí)性,每次試驗(yàn)前都清理緩存。試驗(yàn)結(jié)果如圖3所示。
圖3 blk_capacity取值不同對創(chuàng)建SDO_PC存儲對象和窗口查詢的影響
由圖3可知,分塊越小,創(chuàng)建SDO_PC存儲對象的時間就越長。說明分塊越小,對于同樣數(shù)據(jù)量的點(diǎn)云數(shù)據(jù),R-tree的結(jié)點(diǎn)越多,層級越深,插入就越復(fù)雜。對于查詢而言,查詢的時間隨著分塊的增大先減小后增大。這是由于在分塊大的情況下,雖然可以通過R-tree索引很快找到相關(guān)的候選分塊,但是由于分塊過大,當(dāng)查找窗口邊緣分塊中包含在窗口中的點(diǎn)時,花費(fèi)的時間就會增長。不過,在分塊太小的情況下,R-tree層級增加,導(dǎo)致查詢變慢,同時需要更多的塊內(nèi)檢索操作,導(dǎo)致時間變長。因此,為了均衡點(diǎn)云數(shù)據(jù)存儲和檢索的效率,應(yīng)該結(jié)合點(diǎn)云的數(shù)據(jù)量為分塊大小選擇合理的取值,該值的選擇由多次導(dǎo)入、檢索的經(jīng)驗(yàn)所得,目前無法準(zhǔn)確給出參考標(biāo)準(zhǔn)。
4. 多用戶并發(fā)在點(diǎn)云窗口查詢方面的應(yīng)用
Oracle數(shù)據(jù)庫內(nèi)部提供并發(fā)處理的功能。為了測試Oracle數(shù)據(jù)庫在點(diǎn)云數(shù)據(jù)方面的并發(fā)性能,筆者進(jìn)行了點(diǎn)云數(shù)據(jù)多用戶并發(fā)窗口查詢的試驗(yàn)。試驗(yàn)選取了兩個相鄰條帶的機(jī)載激光LAS點(diǎn)云數(shù)據(jù),數(shù)據(jù)量分別為46526014和46515286,重疊率為50%。為了保證試驗(yàn)結(jié)果不受緩存的影響,每個多用戶試驗(yàn)前都清理緩存。
試驗(yàn)過程描述如下:單用戶窗口查詢的范圍是兩個條帶數(shù)據(jù)的整體范圍;2個用戶的窗口查詢范圍是將單用戶窗口范圍平分;4個用戶的窗口查詢范圍則將單用戶窗口范圍4等份;8用戶、16用戶、32用戶則依次類推。每個窗口查詢的過程由一個BAT文件編寫完成,并發(fā)的試驗(yàn)由BAT文件同時運(yùn)行實(shí)現(xiàn),同時運(yùn)行的BAT文件的個數(shù)就相當(dāng)于多用戶并發(fā)的個數(shù)。試驗(yàn)結(jié)果用吞吐量來評價,見表4。
表4 點(diǎn)云窗口查詢多用戶并發(fā)
由表4可以得到,隨著并發(fā)數(shù)的增多,吞吐量逐漸增大,但是當(dāng)吞吐量達(dá)到某個值時,即使并發(fā)數(shù)仍在增加,吞吐量也只在該值附近上下浮動。這個值的大小與CPU的配置有關(guān)。在高配的CPU情況下,能得到更好的結(jié)果??偠灾诓l(fā)的用戶量增多的情況下,CPU的使用效率變高,計算機(jī)的吞吐量增大。
五、結(jié)束語
針對OracleSDO_PC在組織管理點(diǎn)云數(shù)據(jù)方面的優(yōu)勢,本文進(jìn)行了大量的測試對比試驗(yàn)。試驗(yàn)表明,OracleSDO_PC數(shù)據(jù)類型的使用,為存儲大點(diǎn)集云數(shù)據(jù)提供了一個可伸縮的平臺,很好地解決了大點(diǎn)集云數(shù)據(jù)存儲查詢問題,并具有多用戶并發(fā)處理的功能,可以成為海量點(diǎn)云存儲管理的工具。不過,由于基于大點(diǎn)集云數(shù)據(jù)構(gòu)建R-tree空間索引的復(fù)雜性,導(dǎo)致Oracle數(shù)據(jù)庫的點(diǎn)云數(shù)據(jù)組織的效率有待提高。另外,本文的研究為海量點(diǎn)云數(shù)據(jù)的后處理、分析及應(yīng)用提供了有價值的參考。
參考文獻(xiàn):
[1]黃先鋒.機(jī)載LiDAR點(diǎn)云數(shù)據(jù)的建筑物重建研究[D].武漢:武漢大學(xué),2006.
[2]張帆, 黃先鋒, 李德仁. 激光掃描與光學(xué)影像數(shù)據(jù)配準(zhǔn)的研究進(jìn)展[J]. 測繪通報, 2008(2): 7-10.
[3]ABRAMSONI.OracleDatabase11g:ABeginner’sGuide[M].[S.l.]:OraclePress, 2009.
[4]GODFRINDA.Oracle’sPointCloudDatatype[EB/OL].2011-11-04.http:∥www.ncg.knaw.nl/Studiedagen/09PointClouds/presentations/PointCloud_14_AlbertGodfrind.pdf.
[5]王云帆.OracleSpatial空間數(shù)據(jù)存儲管理技術(shù)的應(yīng)用研究[J]. 測繪通報, 2011(6):76-79.
[6]BUTLERH,LOSKOTM,VACHONP,etal.LibLAS:ASPRSLASLiDARDataToolkit[EB/OL].2011-02-15.http:∥www.liblas.org/.
Abstract[7]HOWARD B, MICHAEL G. PDAL-Point Data ion Library [EB/OL].2013-12-31. http:∥www.pointcloud.org/.
[8]LEYDERMANR.OracleC++CallInterfaceProgrammer’sGuide[M].[S.l.]:OraclePress, 2005.
[9]GONGJ,ZHUQ,ZHONGR,etal.AnEfficientPointCloudManagementMethodBasedona3DR-Tree[J].PhotogrammetricEngineeringandRemoteSensing, 2012, 78(4): 373-381.
[10]RAVADAS,HORHAMMERM,BARISMK.PointCloud:Storage,Loading,andVisualization[EB/OL].[2014-02-25].http:∥www.cigi.illinois.edu/cybergis/docs/Kazar_Position_Paper.pdf.