数据聚集技术在mondrian中的实现
1?聚集的概念及其作用?
聚集是指按照維粒度、指標與計算元的不同,依據實際分析需要對底層數據進行記錄行壓縮、表聯接、屬性合并等預處理,是對底層的詳細數據進行相應的統計的數據加工形式,包括求和、求平均值等。?
聚集計算的結果是根據用戶可能的查詢預先計算好的匯總數據。匯總的形式多種多樣,可以沿著數據倉庫中的多維數據的任何一維或多維進行。如果維分層次,聚集還可以在任何一個層次上進行。維的某種組合對應的聚集數據稱為一個方體(Cuboid),給定維集合的所有方體形成的方體格稱為該維集合的數據立方(Data Cube)。數據立方的建立就是通過聚集實現的。?
數據聚集用于提升數據倉庫系統進行聯機分析處理時的性能,它通過在問題提出之前就準備好答案來縮短查詢響應時間,是OLAP技術能夠快速響應的基礎,主要體現在以下幾個方面:?
(1)?聚集降低了直接訪問基礎數據對前端應用的影響?
聯機分析處理通常需要的是由細節數據導出的匯總數據,直接在海量基礎數據上進行查詢統計將極大的影響系統效率。通過聚集預先計算出需要的匯總數據,從而避免對基礎數據的直接訪問。?
(2)?聚集減少了對基礎數據的重復計算?
不同的聯機分析處理操作可能都需要對同一部分基礎數據進行同樣的處理。如“2000年第2季度A地區的銷售額”是對該地區該時間段內所有銷售記錄的統計匯總,在進行“A地區2000年不同季度銷售額對比”、“A地區不同年份第2季度的銷售額對比”、“不同地區2000年第2季度銷售額對比”等處理時,都需要使用該匯總數據。通過聚集預先計算出該匯總數據,從而避免對相關基礎數據的重復計算。?
(3)?使用聚集可以在一定程度上保證數據一致性?
一方面,數據倉庫中的基礎數據是不可實時更新的,由這些相對穩定的基礎數據導出的聚集反映的是一段時間內的匯總信息。另一方面,數據倉庫中的數據又是時變的,新的數據將被定期的增加。通過聚集可以在一定程度上保證分析過程訪問的數據的一致性,避免因直接使用基礎數據而導致先后匯總的數據不一致。?
2?聚集的存儲組織?
聚集數據通常以多維數據集的形式組織。多維數據集是包含維度和度量值的多維結構,其中維度定義多維數據集的結構,確定度量值的坐標,反映了可以向多維數據集提出的查詢;度量值提供了用戶感興趣的數值。?
2.1?三種聚集存儲方式的比較?
聚集數據按維所指定的坐標存儲在多維結構單元中,存儲位置依賴于多維數據集的存儲方式。包括多維結構(MOLAP)方式和關系型結構(ROLAP)方式,兩種方式有各自的優勢。?
(1) MOLAP方式:聚集數據和基礎數據的副本一起存儲在多維結構中。?
該方式存儲結構簡潔、明了,聚集數據預綜合較高,可以很大程度的提升查詢性能。缺點是適應維數動態變化較差,增加一維,聚集規模迅速增長;適應數據變化較差,數據變化時,聚集重計算量相當大。
(2) ROLAP方式:聚集數據與基礎數據一起保存在關系結構中。
該方式下聚集數據與基礎數據存放在關系表中,適應維數動態變化較好,維數的增加對已有聚集的影響不大;適應數據變化的范圍大,聚集數據預綜合度靈活,各種粒度的聚集數據可以分開存儲。缺點是存儲結構和處理過程復雜,處理時間通常也較長。
結合上述兩種存儲方式的優點,混合型結構(HOLAP)方式將聚集數據存儲在多維結構中,將基礎數據存儲在關系型結構中,但這種方式不適合既需要快速統計分析,有能夠快速訪問基礎數據的應用環境。
2.2?聚集模式與聚集表
由于關系型數據庫的廣泛應用,利用ROLAP實現多維數據組織是最為常用,并且較為成熟的方法。
在ROLAP中,存儲基礎數據的關系模式稱為基礎模式,由存儲事實數據的事實表和存儲維數據的基本維表構成。存儲聚集數據的關系模式稱為聚集模式,由聚集表和相關維表(細粒度基本維表和/或粗粒度的上卷維表)構成。聚集模式與基礎模式都是典型的星型模式,在結構上基本一致,只是存儲數據的粒度不同。
可以通過修改基本維表,將維的層次信息擴展到其中,從而實現聚集數據和基礎數據的集中存放,進而將兩種模式合而為一,達到一體化存儲、簡化數據存儲結構的目的。但是這種方法存在一系列問題:
(1)?增加了查詢的復雜度,需要區分基礎數據和聚集數據以避免數據重復計算;
(2)?模糊了列的數據類型,在列中需要存儲不同類型的數據;
(3)?擴大了數據的定義范圍,因存儲統計數據導致基礎數據存儲空間的浪費;
(4)?加大了ETL過程的困難。
因此,聚集數據通常單獨存放在不同的關系表中。
3?聚集的物化
聚集的有效計算是多維分析的核心。如前所述,維集合的任意一個組合對應的聚集數據代表了數據立方中的一個方體,一次聚集計算處理可以是單個方體的計算,也可以是整個數據立方的計算。聚集的計算過程就是數據立方的物化過程。
3.1?全物化方法
全物化是指對維集合的所有可能組合都進行聚集。最為簡單的全物化方法是2N算法,通過計算N維事實表中的元組,依次得到2N個聚集數據并存儲到多維數據集中。當數據立方的維數增多,維的層次更趨復雜時,可能的聚集計算量將劇增,導致存儲空間爆炸現象的發生。
為降低聚集計算量,減少存儲空間的使用,可以采用多種改進方法,根據參與聚集計算的數據的范圍分為單個方體的聚集計算和基于依賴關系的聚集計算兩類。
典型的單方體聚集計算方法是基于數組方式的聚集計算方法,該方法包括四種形式:G-Aggregation、M-Aggregation、Infix-Aggregation和Prefix-Aggregation。單個方體計算方法會進行多次重復的I/O操作,因此計算效率很低。
并不是所有的聚集都需要從基礎數據開始計算,利用方體之間的依賴關系從子方體匯總計算父方體可以加速聚集計算的過程。基于該思想的聚集計算方法包括基于排序(sort- based)和基于哈希(hash-based)的算法:PipeSort,PipeHash和Overlap。這類方法先估計數據立方的各種計算方式的代價,確定其計算順序和導出關系,其目的是使數據立方的計算開銷最小。
上述聚集計算方法特別指針以ROLAP形式存儲的數據立方,適合于MOLAP的經典聚集計算方法是多路數組聚集方法。它在尋找最優掃描次序時是將所有的掃描次序需要的內存數量都計算出來,然后將需要內存最少的掃描次序作為最優次序,對數據立方進行聚集計算。多路數組聚集的基本原理如下:
(1)?將n維數組劃分成小的n維塊,其中每個塊作為一個獨立的單元包含有聯機分析處理所需要的信息;
(2)?對數組分塊處理后的子方體進行聚集計算,通過優化計算次序,使部分聚集可以同時計算,并避免不必要的重復計算。
3.2?部分物化策略
盡管通過全物化可以使所有查詢以最短的時間做出響應。但是,當數據量非常龐大時,全物化過程消耗的時間及其占用的空間都可能讓用戶無法忍受,因而不具現實性。其次,簡單排列組合產生的多維數據集往往是一個龐大的稀疏矩陣,存在著大量的空聚集數據單元,造成存儲空間的巨大浪費。再次,隨著數據倉庫的定時刷新,聚集數據的同步更新也將耗費大量的系統資源。因此,應該科學的選擇物化方案和聚集策略,以平衡聚集計算和維護與OLAP響應時間之間的矛盾。
部分物化是指在部分維及其相關層次上進行聚集,即從數據立方的所有方體中選擇一個子集進行物化。在一般情況下,通常20%的聚集就能夠滿足80%的查詢需要。如何確定該20%的聚集是提高聚集效率的關鍵。
聚集的識別可以綜合使用以下方法:
(1)?在設計數據倉庫時,站著用戶的角度分析數據倉庫可能的查詢需求。業務上的功能需要往往可以暴露出潛在的聚集需求;
(2)?數據倉庫模式確定后,通過分析主題域確定頻繁的聚集;
(3)?數據倉庫投入使用后,可以從已有系統的查詢模式中獲取,包括報表、日志以及利用其它商業智能工具。
完成聚集的識別后,需要對其進行評估,以縮小需要物化的范圍。評估需要考察的因素包括幾個方面:
(1)?評估數據倉庫可用的資源,用于確定可以物化的聚集數量。在模式上聚集表要小于事實表,然而盡管只是少數幾個聚集表,其占用的存儲空間可能遠遠超出事實表。這是限制只能物化部分聚集表的因素之一。
(2)?將聚集與事實表進行比對,用于確定哪些聚集是有效的,能夠實際提高查詢效率。聚集究竟能夠帶來多大的性能提升需要進行量化。量化指標一般直接與該聚集匯總的元組數相關,但數據的稀疏性和傾斜性對該指標帶來一定的影響。
除了和事實表進行比較外,聚集指標還需在不同聚集之間進行衡量,以判斷哪種聚集形式更優。如聚集A可以分別從B和C得到,相對而言,B更具指標意義,則僅需物化B即可。
(3)?聚集的粒度。粒度是對數據倉庫中的數據綜合程度高低的一個度量,粒度小,綜合程度低,回答查詢的種類多,數據量大;粒度大,綜合程度高,回答查詢的種類少,數據量小。不明確的聚集粒度將帶來一系列問題,包括:導致數據倉庫細節數據的遺漏;聚集包含了不合適的維度;應該包含的維度沒有被包含;不同事實表的維度包含在同一個聚集表中。
(4)?聚集能夠為多少用戶所用,以及對不同用戶的重要程度。某些少數查詢執行頻率不高,但為重要決策所使用,盡管對應的聚集綜合指標意義不大,但是仍然需要物化。
隨著時間的發展,應用需求的變化可能使得已有的聚集不再經常被使用,或者以前較少使用的聚集開始需要經常性的使用。因此需要能夠對聚集進行添加和刪除。
4?聚集導航與優化
聚集導航的本質是基本SQL語句的轉換,即將基本SQL語句通過查詢重寫重定位到已有的聚集上,利用聚集數據提高查詢效率。沒有聚集導航,終端用戶將不得不直接面對聚集選擇問題。嚴格限制事實表上的聚集數量,可以降低人工選擇帶來的混亂,但同時也限制了可能的性能提升。通過聚集導航,可以增加事實表上聚集的數量,實現查詢的透明性。
4.1聚集的導航策略
聚集的標識是實現其導航的前提,復雜的標識將對聚集的管理帶來不利的影響。以ROLAP為例,聚集的標識包括聚集的命名和聚集表屬性的命名。在命名時需要參考以下原則:
(1)?事實和維的屬性的名稱在聚集模式和基礎模式中應該保持一致;
(2)?聚集維表的命名機制應與基礎維表的一致,通過表名都能夠指示表中記錄的含義;
(3)?聚集事實表的命名比較復雜,簡單的根據聚集的粒度或聚集的對象進行命名將導致較長的表名。由于聚集的使用對用戶是透明的,聚集的名字可以對用戶不可見。提供聚集導航后,只需要由聚集導航過程處理復雜的聚集命名和解釋過程。此時可以使用編號等方式對同一事實表上的聚集進行區分。
除了對聚集進行標識外,在設計聚集維表時,還應注意以下問題:
(1)?除了關鍵字外,聚集維表必須是基礎維表的子集;
(2)?聚集維表屬性的取值必須與基礎維表的一致,明確聚集維表的數據是對基礎維表數據的匯總;
(3)?對于基礎維表中的每一個屬性值的組合,聚集維表中有且僅有一條記錄與之對應,從而解決維表數據的加載問題。
根據用戶的查詢在數據倉庫中的大量聚集中找到對應聚集的過程就是聚集導航。聚集導航的任務有:
(1)?用最快的速度找到能夠回答用戶需求的聚集;
(2)?找到的聚集應該是回答查詢問題的最優聚集。
4.2?聚集的優化
聚集優化包括兩個方面:一是指聚集處理過程和處理技術的優化,如索引的建立與更新、多線程技術、并行處理技術等,其作用是提高系統聚集效率,降低聚集的時間與空間復雜性;二是指聚集策略和聚集導航的優化。前者是相關技術在聚集上的應用,與聚集技術本身關聯不大,需要重點考察的是后者。
聚集策略的優化就是指在聚集的時間復雜性、空間復雜性與查詢速度及性能之間取得動態的平衡。當用戶的分析查詢相對穩定時,通過優化可以找出最優或接近最優的聚集策略;聚集策略并不是一成不變的,還要根據用戶需求的變化不斷的進行調整以滿足用戶新的需求。
構成聚集優化質量目標的質量要素及其質量屬性如表4.1和4.2所示。
在數據倉庫的設計開發階段,如果想獲得較好的聚集物化方案,需要分析所有用戶和應用的需求,研究實際使用中需要哪些維度、粒度層次的匯總信息,從而確定 所有可能涉及的聚集和估算使用的頻度。但在數據倉庫創建的初期,進行這種需求分析顯然是比較困難或不太現實,且很多情況下可能并不準確,所以采用系統缺省 的聚集物化方案,有時不失為一種
| 表4.1?維與指標的取舍原則 | ? | |||
| 元素 | 策略 | 原則條件 | ? | |
| 維 | 放棄 | 長期不使用;不屬于主題主鍵 | ? | |
| 維粒度 | 放棄 | 長期不使用;不影響上層的快速聚集生成;不影響其它層的鉆取操作 | ? | |
| 增加 | 高頻度鉆取到的層次 | ? | ||
| 指標 | 放棄 | 長期不使用,不屬于任何一個復合指標的因子 | ? | |
| 復合指標 | 放棄 | 長期不使用 | ? | |
| 增加 | 高頻度計算的新的復合指標 | ? | ||
| ? 表4.2?數據聚集優化的質量要素 | ||||
| 質量要素 | 內容(質量屬性) | |||
| 數據對象 | 維對象(聚集方案、維成員、限制條件、時間) | |||
| 指標對象(指標名、指標運算、限制條件) | ||||
| 訪問日志 | 操作日期、操作時間、操作類型、維數據對象、特殊維數據對象、指標數據對象、響應時間、用戶名稱 ? | |||
| 響應敏捷率 | 數據對象OLAP操作響應時間/(標準響應時間+數據對象OLAP操作響應時間/) | |||
| 數據查詢率 | 數據對象被查詢次數/OLAP操作總次數 | |||
| 數據下鉆率 | 數據對象的下鉆次數/OLAP操作總次數 | |||
| 數據歸并率 | 數據對象的歸并次數/OLAP操作總次數 | |||
| 指標復合率 | 指標復合運算次數/OLAP操作總次數 | |||
簡單易行的方法,而將聚集優化放到系統運行的過程中,基于對系統運行情況的分析之上周期性的實施。具體實施步驟如下:
?建立初始聚集物化方案。
?確定并錄入與聚集優化的相關參數指標(包括:聚集關鍵度、應用需求度上限閥值、應用需求度下限閥值、聚集閥值、查詢閥值等)。
?啟動/周期性觸發聚集監測進程,采集系統運行記錄。
?系統日志分析和用戶需求分析。在對系統日志分析的基礎上,按照維和粒度層次的取舍原則和應用需求度的判斷流程,確定哪些聚集需要物化,哪些可以刪除,哪些聚集需要經過進一步判斷。
?建立有向聚集關系表,獲取各聚集權重。
?交替執行物化選擇算法和聚集路徑的優化算法,在滿足用戶期望值和系統性能要求的基礎上,確定哪些聚集需要物化,確定哪些聚集無需物化,而轉為查詢關系,實現聚集方案的總代價最小。
?根據優化算法處理后得到的物化聚集方案集合和最優路徑,重新調整數據倉庫的聚集。
5 Mondrian中的聚集實現
圖5.1?一個星型模式
開源項目Mondrian是一個用JAVA寫成的OLAP引擎。它用MDX語言實現查詢,從關系數據庫中讀取數據,然后經過Java API用多維的方式對結果進行展示;它通過模式Schema實現關系數據模式到多維數據模式的映射。Mondrian不僅能進行數據聚集,建立多維度的分析和查詢,同時還提供切片、切塊、下鉆、上卷和旋轉等數據分析功能。
5.1?聚集表的定義與創建
在Mondrian中,聚集表依賴于事實表,并且依賴關系定義在多維模式中。給定如圖5.1所示的星型模式,其中事實表Sales上典型的一個聚集表agg_1的定義如圖5.2所示。
Mondrian能夠根據實際的查詢決定是從事實表還是從聚集表中獲取數據。
一個事實表可以有0到多個聚集表,一個聚集表只能對應于一個事實表。聚集表從事實表的1到多個維度對其度量進行匯總。
每一維上都可以采取兩種方式實現聚集:
(1)?維的“舍棄”,即舍棄星型模式的某一維,聚集表在該維上實現數據的完全匯總;
(2)?維的“折疊”,即將展開的星型模式的某一維折疊到聚集表中,通過將其部分屬性包含進聚集表從而實現在該維上數據的部分匯總。如在上述聚集表agg_1中,維Customer被舍棄掉了,而維Product則被折疊到其中。
?
每一個聚集表都以獨立關系表的形式被創建,如圖5.3所示。沒有必要創建所有的聚集表。選擇創建哪些聚集表類似與選擇哪些列建立索引,取決于應用需求和經驗。
| sales_fact_1997 product_id time_id customer_id promotion_id store_id store_sales store_cost unit_sales | CREATE TABLE agg_l_05_sales_fact_1997 ( ??product_id INTEGER NOT NULL, ??customer_id INTEGER NOT NULL, ??promotion_id INTEGER NOT NULL, ??store_id INTEGER NOT NULL, ??store_sales DECIMAL(10,4) NOT NULL, ??store_cost DECIMAL(10,4) NOT NULL, ??unit_sales DECIMAL(10,4) NOT NULL, ??fact_count INTEGER NOT NULL); ? CREATE INDEX i_sls_97_cust_id ON agg_l_05_sales_fact_1997 (customer_id); CREATE INDEX i_sls_97_prod_id ON agg_l_05_sales_fact_1997 (product_id); CREATE INDEX i_sls_97_promo_id ON agg_l_05_sales_fact_1997 (promotion_id); CREATE INDEX i_sls_97_store_id ON agg_l_05_sales_fact_1997 (store_id); | INSERT INTO agg_l_05_sales_fact_1997 ( ??product_id, ??customer_id, ??promotion_id, ??store_id, ??store_sales, ??store_cost, ??unit_sales, ??fact_count) SELECT ??product_id, ??customer_id, ??promotion_id, ??store_id, ??SUM(store_sales) AS store_sales, ??SUM(store_cost) AS store_cost, ??SUM(unit_sales) AS unit_sales, ??COUNT(*) AS fact_count FROM ??sales_fact_1997 GROUP BY ??product_id, ??customer_id, promotion_id, store_id; ? |
轉載于:https://www.cnblogs.com/iammatthew/archive/2010/08/19/1803884.html
總結
以上是生活随笔為你收集整理的数据聚集技术在mondrian中的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell中循环执行某个进程获取返回值,
- 下一篇: python123百钱买百鸡_求解百钱买