程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> [Oracle]數據倉庫的分層管理器方案

[Oracle]數據倉庫的分層管理器方案

編輯:Oracle數據庫基礎

前言

  21世紀是信息的世紀,綜合國力的競爭在很大程度上是信息的競爭,更是信息利用率的競爭。近年來,隨著“數字地球”和“數字國土”戰略的提出和實施,地學領域的海量數據飛速增長,數據的存儲、分析、管理和處理變得日益復雜。隨著Oracle技術的成熟,尤其是8.15本版後Oracle Spatial的出現,數據倉庫在海量數據存儲、分析和表達方面有著無可比擬的優勢。同時,由於信息量的巨大,傳統的數據存儲和顯示方式在大范圍數據快速浏覽方面顯得力不從心,這樣有必要改變空間數據的存儲方式,加載需要的空間數據部分,避免不必要數據的反復加載和卸載。

  分層管理器

  1、分層管理器架構

  分層管理器是實現大范圍數據的快速浏覽的關鍵部分,它控制了逐層細化表的結構和元數據的定義和賦值,定義了組件表中的關鍵信息,給出了空間數據的來源、數據挖掘規則、圖層加載范圍和圖形編輯、輸出和保存。分層管理器有兩部分組成,分別為:

  a) 一組存儲於Oracle數據倉庫中的空間數據表,用於逐層細化圖層中的每個詳細信息層,這些表稱為組件表;

  b) 一個空表,包含該表的結構定義和描述組件表的特殊元數據,該表稱為逐層細化表。任何逐層細化應用程序均需要逐層細化表,從中可以了解逐層細化圖層中各層的層次關鍵字描述,以及它們之間的層次關聯方式。進行分層時,分層管理器作為程序的一部分,確定需要添加的子圖元所在的圖層及其關鍵字,以便確定在逐層細化圖層中需要添加和刪除的圖元信息。

  逐層細化圖層是一種特殊的地圖圖層,它是有自己表結構的空白圖層,並用元數據規定了所有加載圖層的一些規則和限制,所顯示出來的地圖信息是按照元數據規定的規則從其它表或數據庫中提取出來的。在地圖中顯示逐層細化圖層時,分層管理器會創建一個臨時表,然後將組件表中的圖元復制到該臨時表中。逐層細化圖層中顯示的圖元實際上是組件表中圖元的副本。這樣就可以靈活的在圖層上面加載需要的信息。在應用程序終止時,將丟棄該臨時表,為了保存有用的專題圖信息,可以對提取出來的圖層進行保存。此時,如果用戶查看圖層信息時,逐層細化圖層仍將是單個圖層。

  逐層細化表的要求作為分層管理器的組織核心部分,它定義了元數據關鍵字和三個標准列:關鍵字、層和標簽。並有著自己的一套語法:

  (1) 關鍵字 begin_metadata 標記逐層細化表中元數據部分的開頭。

  (2) 每行元數據包含兩個元素:關鍵字和值。所有關鍵字和值均使用雙引號引起來。

  (3) 逐層細化表必須包含 \IsDrilldown 關鍵字,該關鍵字的值必須為 True。

  (4) 每個關鍵字以“\”(反斜線)開頭。

  (5) 元數據關鍵字可以在層次結構中嵌套。層次結構中的每一層以反斜線 (\) 標記。

  (6) 元數據包括 \DDMap\ComponentMaps\ 關鍵字層次結構。在該層次結構中為每個組件表指定四個元數據關鍵字。




Click here to open new window

  分層管理器的分層原理圖如圖1所示,從圖中可以看出,分層管理器有兩部分組成:組件表和逐層細化表組成,分層管理器根據系統的要求以數據挖掘的方式從Oracle數據倉庫中提取數據,形成組件表中的某個圖層,然後確定需要加載圖層的名稱和圖層中的部分,並加載到逐層細化表中。如果是第一次加載,此時的逐層細化表是空白圖層,在加載過程中,逐層細化表不斷的進行圖元信息的增加和刪除,這樣會出現每個組件表中的部分信息顯示在逐層細化表所示的圖層中。這樣輸出所需要的圖層,並對它進行編輯,由於逐層細化表中數據是個組件表中的副本,需要對編輯後的圖層進行另存,形成專題圖。

  分層管理器首先形成空白圖層,通過分層管理器用數據挖掘工具從Oracle數據倉庫中提取數據,根據分層管理器的元數據規則形成一級的圖層,在該圖層中,通過響應事件,以確定加載二級圖層的圖層名稱和該圖層中的加載部分,相應的加載三級、四級圖層數據,在加載的同時,就形成了各種專題圖。當然,分層管理器功能的實現是通過GIS組件(MapX、MO、AO等)和編程語言(VB、VC、Delphi等)來實現的。

2、分層管理器開發步驟

  分層管理器應用程序需要進行許多設置和准備。主要步驟匯總如下:

  (1)獲取多層逐層細化圖層時要使用的各個表的數據。

  (2)創建一個包含特殊列和特殊元數據的新的空逐層細化表(.tab 文件)。元數據為每個組件表指定一個層名,同時標識組件表中的重要列標識列和標題列。

  (3)將逐層細化表加入地圖。例如,將逐層細化表加入您使用的Geoset,或通過編碼方法將逐層細化表加入地圖。

  (4)在應用程序中添加用戶界面元素,響應逐層細化事件。

  (5)添加代碼,響應用戶對逐層細化工具的使用(也就是說編寫分層管理器)。

  (6)該代碼需要檢測用戶已選擇的圖元;確定需要添加的子圖元和需要刪除的圖元;調用應用程序來實現分層或匯總地圖圖元。

  實例分析

  由於遙感影響數據量特別巨大,對於數據的存儲、管理、分析和有用圖形部分顯示就顯得非常困難,這需要用關系——對象數據庫對數據進行存儲。在圖形顯示時,為了使取得有用圖層信息,減少加載時間和提高編輯效率,需要對圖形進行分層顯示,即用到了前面介紹的分層管理器技術。本文用VB作為編程語言,MapX作為GIS組件進行二次開發來實現分層管理技術。

  1、構建分層管理器

  構建逐層細化表,其表結構為:

Definition Table

Type Native Charset "WindowsLatin1"

FIElds 3

Key Char (32);

Level Char (32);

Label Char (32) ;

  元數據關鍵字和對應值為:

begin_metadata

"\IsDrilldown" = "TRUE"

"\DDMap\ComponentMaps\One\File" = " Tab_YNP.TAB"

"\DDMap\ComponentMaps\One\LevelID" = " Tab_YNP "

"\DDMap\ComponentMaps\One\FeatureIDCol" = "3"

"\DDMap\ComponentMaps\One\FeatureCaptionCol" = "1"

…(其他各組件層的關鍵字和值與此相同)

"\DDMap\HIErarchyManager\IsDLL" = "TRUE"

"\DDMap\HIErarchyManager\ID" = "SomeDLL.dll"

"\DDMap\HIErarchyManager\InitialLevel" = " Tab_YNP "

end_metadata

  2、分層管理器的實現

  使用 CreateCustomTool 方法實現逐層細化工具,定義為:Map1.CreateCustomTool customDrilldownExpandTool, miToolTypePoint, miDrilldownExpandCursor, miDrilldownContractCursor, miDrilldownContractCursor

  每次使用自定義逐層細化工具均會觸發 ToolUsed 事件。在 ToolUsed 事件過程中,您將需要執行產生逐層細化行為的代碼。該過程主要分為四個步驟:

  (1)使用 SelectByPoint 或 SearchAtPoint 之類的方法確定用戶單擊的地圖圖元。

  (2)確定應取代用戶單擊的圖元的子圖元集。例如,可以使用一個或多個嵌套的 Case 語句確定哪些子圖元取代所選的父圖元。

  (3)提取空間數據。根據前述條件,用SQL語言從數據倉庫中提取信息,如:select goloc form YN. Tab_HQ_KC where Prix=68

  (4)調用 DrilldownAddFeatures 方法將子圖元加入地圖。

  (5)調用 DrilldownRemoveFeatures 方法從地圖中刪除父圖元(用戶單擊的圖元)。

  (6)對顯示圖層進行編輯,並把編輯結果保存。

  3、結果分析

  從實例的結果可以看出,Oracle數據倉庫能夠方便的對空間數據進行存儲、分析、管理和輸出,數據挖掘技術的應用能夠靈活存取數據,而不需要加載整個數據表中的所有數據,分層管理器的應用實現了空間數據大范圍快速浏覽和不同主題圖層的部分疊加,實際應用中有著非常方便的應用。

  結論

  高效地利用現有的海量數據是目前面臨的難題之一。Oracle數據倉庫技術是專門針對海量數據的管理和應用的技術,它在對象-關系型數據庫、功能強大的DBMS和支持可視化檢索方面有著非常明顯的優勢。地學數據倉庫的理論在今年的時間應用中不斷完善,本文在數據倉庫的存儲、分析和表達層方面把理論和實際應用相結合,結合分層管理GIS二次開發,開發出基於Oracle數據倉庫的分層管理系統,它結合了數據倉庫和分層管理的優點,在地學空間數據應用方面進行了有益的嘗試。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved