王昌平
(福州市勘測院,福建 福州 350108)
隨著空間信息資源庫建設(shè)和應(yīng)用的發(fā)展,空間數(shù)據(jù)動態(tài)更新和數(shù)據(jù)分發(fā)成為確保數(shù)據(jù)現(xiàn)勢性的主要研究課題[1]。數(shù)據(jù)量的急劇增大、更新頻度復(fù)雜度的增加,使得數(shù)據(jù)生產(chǎn)管理更為復(fù)雜,為了不影響外業(yè)修測生產(chǎn)更新,同時又使空間數(shù)據(jù)應(yīng)用順暢,采用生產(chǎn)庫+應(yīng)用庫分離的雙庫存儲模式,避免生產(chǎn)和應(yīng)用互相影響。那么,如何將生產(chǎn)庫中外業(yè)修測更新變化反映到應(yīng)用庫,是急需要解決的問題,傳統(tǒng)的做法是采用全庫替換的方式,定期處理,需要人工處理,且替換效率低下,并且還需要斷掉應(yīng)用服務(wù),同時由于全庫替換,會造成原來在應(yīng)用庫建立起來后其他關(guān)聯(lián)失效問題,應(yīng)用庫的現(xiàn)勢也會滯后。
隨著政府部門應(yīng)用的深入和對現(xiàn)勢性要求的提高,政府部門如規(guī)劃局、國土局也需要及時提供現(xiàn)勢性高的按要素的矢量GIS數(shù)據(jù),作為規(guī)劃設(shè)計、GIS分析等應(yīng)用數(shù)據(jù)的支撐[6]。
綜合以上因素,需要建立一套空間資源信息數(shù)據(jù)同步系統(tǒng),完成自動的動態(tài)的數(shù)據(jù)同步功能,可將各類空間數(shù)據(jù)同步到其他空間應(yīng)用數(shù)據(jù)庫中,進(jìn)行實時動態(tài)數(shù)據(jù)分發(fā),實現(xiàn)應(yīng)用庫動態(tài)反映各空間資源庫的最新狀況,滿足現(xiàn)勢性需求。
數(shù)據(jù)庫同步主要指對具有相同邏輯結(jié)構(gòu)的多個影子副本的分布式數(shù)據(jù)庫,當(dāng)其中任何一個影子副本發(fā)生變更后,能以某種策略很快地將變更更新到各個副本中去來保證數(shù)據(jù)的一致性。數(shù)據(jù)同步技術(shù)只要分為基于觸發(fā)器、基于日志、基于時間戳、基于API法等幾種方法。
基于Oracle平臺的數(shù)據(jù)庫同步技術(shù)主要有Oracle Stream同步復(fù)制技術(shù)、基于CDC數(shù)據(jù)庫訂閱發(fā)布復(fù)制技術(shù)、數(shù)據(jù)庫高級復(fù)制技術(shù)以及SQL語句導(dǎo)出還原技術(shù)等。其中前三者均需要數(shù)據(jù)庫直連的情況下才能正確進(jìn)行,且配置管理較為復(fù)雜[2]。
ArcSDE是ESRI公司發(fā)布的GIS數(shù)據(jù)管理中間件,它提供了高級的、高性能的GIS數(shù)據(jù)管理接口,支持海量空間數(shù)據(jù)管理。在傳統(tǒng)的存儲方式中,每個圖層由業(yè)務(wù)表(business table)、要素表(feature table)和空間索引表(spatial index table)組成,屬性數(shù)據(jù)和空間數(shù)據(jù)分開存儲在B表和F表中,數(shù)據(jù)同步時需要考慮多表間級聯(lián)關(guān)系,不容易保證同步成功[3]。
簡單的采用Oracle平臺的數(shù)據(jù)庫同步技術(shù)是無法滿足空間數(shù)據(jù)的同步需求,而且還需要考慮不同版本,圖層按需同步,多節(jié)點多級聯(lián)同步需求。
Oracle的CDC變化捕捉技術(shù),只能捕獲簡單字段的變化,沒能捕捉到Blob、 ST_GEOMETRY等特殊字段的變化;ArcSDE通過版本管理獲取變化數(shù)據(jù),增加了空間數(shù)據(jù)復(fù)雜度,而且由于數(shù)據(jù)查詢要關(guān)聯(lián)版本表,降低了空間數(shù)據(jù)運行的性能。如果能通過將空間數(shù)據(jù)存儲的ST_GEOMETRY字段的變換轉(zhuǎn)換成字符串的變化,那么就可以使用Oracle的內(nèi)部CDC機制快速記錄空間數(shù)據(jù)的變化日志,同時采用ArcSDE提供的ST_GEOMETR直接操作SQL類庫,進(jìn)行直接SQL語句操作,兩者相結(jié)合,即滿足快速獲取變化日志,又不需要ArcSDE版本管理,可以像操作普通的數(shù)據(jù)一樣更新空間數(shù)據(jù)。
因此,要實現(xiàn)空間信息資源數(shù)據(jù)同步,主要解決的問題是:
1)如何獲取空間數(shù)據(jù)的增量變化數(shù)據(jù)。
2)通過采用ArcSDE提供的ST_GEOMETR直接操作SQL類庫,進(jìn)行直接SQL語句操作來解決空間資源庫、同步目標(biāo)庫的ArcSDE版本、Oracle版本存在不同。
3)如何將不同類型、不同比例尺的空間信息資源庫同步到同一個目標(biāo)數(shù)據(jù)庫中,不同比例尺、不同區(qū)域的同一類型空間資源庫圖層名稱可能相同,同步存儲需要同步到不同用戶下。
4)一個空間資源庫,存在同步到多個目標(biāo)庫的需求,需要考慮多節(jié)點,多級聯(lián)的同步需求。
5)同步過程,可以按圖層進(jìn)行配置,不同的應(yīng)用,可能需要的圖層不同。
信息指紋是信息時代互聯(lián)網(wǎng)上的新興技術(shù),信息指紋就是把網(wǎng)頁里面正文信息,提取一定的信息,可以是關(guān)鍵字、詞、句子或者段落及其在網(wǎng)頁里面的權(quán)重等,對它進(jìn)行加密,如MD5加密算法,從而形成的一個字符串。信息指紋如同人的指紋,只要內(nèi)容不相同,信息指紋就不一樣。
空間特征是地理信息系統(tǒng)或者說空間信息系統(tǒng)所獨有的??臻g特征是指空間地物的位置、形狀和大小等幾何特征,以及與相鄰地物的空間關(guān)系,空間位置可以通過坐標(biāo)來描述,GIS中地物的形狀和大小一般也是通過空間坐標(biāo)來體現(xiàn)。
將空間要素數(shù)據(jù)的坐標(biāo)數(shù)組通過加密算法生成32位字符串的“要素對象空間信息指紋”作為判定要素數(shù)據(jù)變化的方法,將傳統(tǒng)的幾何計算改為字符串比較的方法,大大提高了識別地形地物要素實體的變化數(shù)據(jù)的速度。具體的實現(xiàn)步驟如下:
1)提取地形地物要素數(shù)據(jù)的坐標(biāo)數(shù)組,地形地物要素數(shù)據(jù)都是由多個點或一個點按某一順序構(gòu)建而成的,構(gòu)建順序不同代表了地物的變化,我們將點坐標(biāo)數(shù)組作為一個信息來看待,可以對這個坐標(biāo)數(shù)組信息進(jìn)行管理。提取坐標(biāo)數(shù)組,可以根據(jù)空間數(shù)據(jù)庫的精度要求,截取適當(dāng)?shù)木葦?shù)據(jù)以避免因精度誤差造成的識別錯誤。
2)如POLYGON(
(428 467.665 344 24 2 893 946.511 535 64,
428 464.804 565 43 2 893 947.909 545 90,
428 463.890 380 86 2 893 948.334 533 69,
428 473.700 317 38 2 893 943.666 076 66,
428 471.448 547 36 2 893 945.041 198 73,
428 470.829 040 53 2 893 945.442 871 09,
428 470.526 611 33 2 893 945.112 426 76,
428 467.665 344 24 2 893 946.511 535 64)
)
通過信息加密算法,得到的“要素對象空間信息指紋”為32位字符串 :d9a8f6946726cb6c18c2bbc7935fcd30。
3)同樣提取空間要素重要屬性組成屬性字符串,屬性間的數(shù)據(jù)可以使用特殊符號進(jìn)行隔開,通過信息加密算法,等到“要素對象屬性信息指紋”。
4)提取庫內(nèi)更新區(qū)域所包含的空間要素的“要素對象空間信息指紋”、“要素對象屬性信息指紋”與修測數(shù)據(jù)的“要素對象空間信息指紋”、“要素對象屬性信息指紋”進(jìn)行比較,獲取更新要素數(shù)據(jù)集,然后更新到空間數(shù)據(jù)庫中。
5)采用Oracle的CDC機制,監(jiān)測空間數(shù)據(jù)的指紋信息增量變化情況,即可快速捕獲空間變化數(shù)據(jù),根據(jù)每個圖層設(shè)置CDC變化表,可以將同步顆粒最小化。
圖1為空間數(shù)據(jù)增量變化識別更新技術(shù)實現(xiàn)流程圖。
圖1 空間數(shù)據(jù)增量變化識別更新技術(shù)實現(xiàn)流程圖Fig.1 Flow chart of incremental updating technology of spatial data
2.1.1 速度快
采用“要素對象空間信息指紋”識別方法,將傳統(tǒng)的空間幾何計算,變換成字符串比較,大幅度提高了變化數(shù)據(jù)的提取速度,從下表的性能測試比較可以看出,數(shù)據(jù)量的增加,對空間幾何計算的識別性能急劇下降,而通過要素對象指紋識別技術(shù),數(shù)據(jù)量的增加,對性能影響是平穩(wěn)的,并且采用本方法性能有大幅度提高,表1是具體的測試性能數(shù)據(jù),圖2是測試曲線。
表1 性能測試比較Tab.1 Comparison of performance tests
圖2 性能測試曲線Fig.2 Performance of test curve
2.1.2 可靠性高
隨著加密算法技術(shù)的發(fā)展,加密碰撞的概率也越來越低,同時在一定區(qū)域范圍內(nèi)的空間要素的坐標(biāo)數(shù)組,生成的信息指紋碰撞的概率幾乎是為零的,目前福州市的地形圖與地下管線數(shù)據(jù)庫內(nèi)有1 000多萬條要素數(shù)據(jù),沒有重復(fù)的“要素對象空間信息指紋”,在數(shù)據(jù)更新識別變化過程中,也未發(fā)現(xiàn)錯誤識別情況,因此,其信息指紋可以作為該空間要素的唯一識別碼,可以確保高可靠性的識別率。
通過ETL數(shù)據(jù)同步技術(shù),結(jié)合ORACLE的CDC機制(數(shù)據(jù)變化機制),采用空間數(shù)據(jù)SDE提供的SQL操作類庫ST_GEOMETRY,通過SQL函數(shù)直接訪問空間數(shù)據(jù),像操作普通數(shù)據(jù)一樣操作空間數(shù)據(jù),通過空間圖層序列化、空間數(shù)據(jù)推送、空間數(shù)據(jù)抽取、空間數(shù)據(jù)標(biāo)準(zhǔn)化及臟數(shù)據(jù)處理、空間圖層屬性表和空間坐標(biāo)ST_GEOMETRY反序列化實現(xiàn)空間數(shù)據(jù)同步[5]。建立數(shù)據(jù)抽取、轉(zhuǎn)換、加載過程,形成各個圖層數(shù)據(jù)的執(zhí)行任務(wù)來完成空間數(shù)據(jù)的同步機制如圖3所示。
圖3 空間數(shù)據(jù)ETL過程流程圖Fig.3 Flow chart of spatial data ETL process
在變化日志記錄中,增加節(jié)點更新記錄字段,對設(shè)置的每個節(jié)點進(jìn)行標(biāo)記,標(biāo)記采用質(zhì)數(shù)形式,如節(jié)點1為3,節(jié)點2為5,節(jié)點3為7,同步過程根據(jù)節(jié)點提取該節(jié)點沒有同步的更新記錄,即日志標(biāo)記字段不能整除節(jié)點的質(zhì)數(shù),進(jìn)行同步,同步后記錄節(jié)點同步信息,即日志更新標(biāo)記字段值乘以節(jié)點質(zhì)數(shù)值,刪除更新日志,只有所有節(jié)點都通過更新后,即日志標(biāo)記字段值等于所有標(biāo)記節(jié)點質(zhì)數(shù)積,才可以將更新日志刪除[7]。整個同步過程,采取提取更新日志、同步更新、修改日志更新標(biāo)識、刪除更新日志一體化過程事務(wù)處理,這樣,即使在更新過程中出現(xiàn)異常情況,也能夠從新開始,進(jìn)行斷點續(xù)傳的同步更新。
空間資源信息數(shù)據(jù)同步系統(tǒng),采用“要素對象空間信息指紋”作為判定要素數(shù)據(jù)變化的依據(jù),結(jié)合Oracle數(shù)據(jù)庫CDC技術(shù),快速獲取空間變化數(shù)據(jù),同時采用ST_GEOMETRY類庫直接操作空間數(shù)據(jù)庫,通過ETL數(shù)據(jù)同步機制流程化管理空間同步過程,采用一鍵式配置過程,完成資源庫和目標(biāo)庫的配置,很好地解決了不同ArcSDE版本、Oracle版本間按不同應(yīng)用不同圖層、多節(jié)點、多級聯(lián)同步的需求。
空間資源信息數(shù)據(jù)同步系統(tǒng)主要功能設(shè)計如圖4所示。
圖4 系統(tǒng)功能圖Fig.4 System function diagram
要使用空間數(shù)據(jù)SDE提供的SQL操作類庫ST_GEOMETRY,需要對Oracle數(shù)據(jù)庫進(jìn)行相應(yīng)的設(shè)置,使SQL環(huán)境能直接操作空間數(shù)據(jù)。
1)找到Oracle數(shù)據(jù)庫的安裝目錄(服務(wù)器端),然后定位到OraclehomeNETWORKADMIN目錄,備份listener.ora文件,以便修改配置文件出錯時恢復(fù)。
2)打開listener.ora文件,找到 (PROGRAM =extproc) 這一行,在這行下面添加對ST_SHAPELIB的引用,即指定ST_SHAPELIB的地址,如下:(ENVS="EXTPROC_DLLS=C:Program FilesArcGISArcSDEora10gexeinst_shapelib.dll"),其中“C:ProgramFilesArcGISArcSDEora10gexeinst_shapelib.dll”為ST_SHAPELIB的物理路徑,可以根據(jù)安裝情況自己修改。
3)保存listener.ora文件,重新啟動監(jiān)聽程序。
對同步資源庫和目標(biāo)庫進(jìn)行設(shè)置,可以配置不同的用戶(非SDE用戶),可配置多個同步庫,可選擇需要同步的圖層,對資源庫和目標(biāo)庫進(jìn)行初始化設(shè)置等。
同步過程分為初始同步和增量同步過程,初始同步過程,需要確保兩個庫所需要同步的圖層的數(shù)據(jù)一致,可以通過直連方式將兩個庫的圖層進(jìn)行拷貝,也可以通過GBD文件數(shù)據(jù)庫導(dǎo)出、導(dǎo)入的方式達(dá)到初始數(shù)據(jù)一致的要求;增量數(shù)據(jù)同步即通過獲取該圖層的變化數(shù)據(jù)情況,ETL同步過程,將變化情況反映到同步目標(biāo)庫中,同時記錄同步日志。
圖5 系統(tǒng)主界面Fig.5 System main interface
空間信息資源數(shù)據(jù)同步系統(tǒng)的數(shù)據(jù)同步配置,采用一鍵式初始化資源庫和目標(biāo)庫配置,使配置過程簡單方便,同時同步配置支持多節(jié)點同步策略。
數(shù)據(jù)同步過程穩(wěn)定、效率高,在串行同步的情況下,地形圖和管線系統(tǒng)每天更新的數(shù)據(jù)同步時間在幾分鐘左右完成。同步過程穩(wěn)定,無異常信息。同步過程采用事務(wù)處理過程,確保同步數(shù)據(jù)一致性,同時支持?jǐn)帱c續(xù)傳功能。
同步日志記錄清晰,同時記錄每條更新記錄的同步情況和整個圖層的更新同步情況。
隨著應(yīng)用的深入和發(fā)展,還可以將空間資源數(shù)據(jù)的更新情況按圖層需求、多節(jié)點,多級聯(lián)地進(jìn)行同步分發(fā),滿足實時、動態(tài)分發(fā)空間數(shù)據(jù)的需求。