??? 由于項目需要,今天開始接觸OLAP(Online Analytics Process, 聯(lián)機分析處理)。說到OLAP,不能不用窮人通用的Mondrian。Mondrian官方網(wǎng)站(http://mondrian.pentaho.org/)給出的定義是 Mondrian is an OLAP server written in Java. It enables you to interactively analyze very large datasets stored in SQL databases without writing SQL.
???? 說白了,Mondrian是一個OpenSource的基于關(guān)系數(shù)據(jù)庫的分析服務(wù)器,遵循MDX、XML/A和JOLAP標準。
·架構(gòu)
??
??Mondrian從架構(gòu)上可以分為四個層次:表現(xiàn)層、計算層、聚合層、存儲層。
??計算層:分析、驗證、執(zhí)行MDX語句,?先計算坐標軸,然后再計算每個單元格的值,從效率上的考慮,計算層批量從聚合層獲取單元格數(shù)據(jù)集合。
??聚合層:聚合層中緩存了多維查詢結(jié)果,即單元格的數(shù)據(jù)集合,如果計算層所需要的數(shù)據(jù)不在緩存中,從存儲層中進行查詢獲取數(shù)據(jù)并緩存。
??存儲層:采用關(guān)系數(shù)據(jù)庫實現(xiàn),一般采用星型模型構(gòu)建,提供維表、事實表和聚合表。
??系統(tǒng)部署結(jié)構(gòu)上,可以分三層結(jié)構(gòu)分開部署,將表現(xiàn)層部署在一臺機器上,計算層和聚合層部署在第二臺,存儲層部署在第三臺。
·存儲和聚合
??根據(jù)OLAP服務(wù)器數(shù)據(jù)存儲技術(shù),可以分為ROLAP和MOLAP,Mondrian采用ROLAP技術(shù)。
??在ROLAP的多維模型組織和存儲數(shù)據(jù)中,比較常用的方式是星型模式,由一個事實表和一組維度表組成。維度必須預先確定,可以是一般的星型架構(gòu),也可以是比較特殊的父子架構(gòu)、雪花架構(gòu)等。在ORACLE數(shù)據(jù)庫中,我們能夠按照維度進行預先的統(tǒng)計、分類、排序,創(chuàng)建大量的實體化視圖。對于沒有實體化視圖類似功能的數(shù)據(jù)庫,我們也可以創(chuàng)建大量的臨時聚合表,這樣當用戶進行比較高級的分析的時候,不用訪問數(shù)據(jù)量龐大的基礎(chǔ)事實表,只需要在我們已經(jīng)形成的實體化視圖或聚合表上作進一步的聚合就可以了,這樣能夠大大提高查詢分析的效率,并且減少占用的系統(tǒng)資源。
??在使用聚合表方面有一個關(guān)鍵的技術(shù)稱之為"聚合感知"技術(shù),只有OLAP引擎必須能夠根據(jù)多維查詢中的維度信息,從適當?shù)木酆媳碇刑崛?shù)據(jù),否則聚合表形同虛設(shè)。另外在多維模型設(shè)計中,設(shè)計正確的聚合表也是很關(guān)鍵的。不恰當?shù)脑O(shè)計導致將聚合表的不能滿足多維查詢的需求,每次從事實表取數(shù)據(jù),開銷是非常大的。
??Mondrian采用關(guān)系數(shù)據(jù)庫存儲事實表,其本身不具有"聚合感知"的技術(shù),當需要從比較明細的事實表中匯總數(shù)據(jù)時,性能就比較差了。但是如果關(guān)系數(shù)據(jù)庫能夠支持實體化視圖或其他聚合技術(shù),那么就可以利用關(guān)系數(shù)據(jù)庫的技術(shù)透明的提高系統(tǒng)性能。我們可以利用Oracle實體化視圖來提高Mondrian的效率。?
·初次使用
?? 從SourceForge上下載了mondrian-2.3.2.8944版(http://sourceforge.net/project/showfiles.php?group_id=35302),解壓得到了里面的demo war包,自己搭建環(huán)境使用了一下Mondrian。下面的截圖是我運行得到的結(jié)果:

??? 關(guān)于具體如何使用,請關(guān)注我的下一篇文章 :-)
PS:? 歷史上的Mondrian
??? Mondrian,蒙得里安·皮特,1872-1944荷蘭畫家,作品以交錯的三原色為基色的垂直線條和平面為特點,他的著作包括新造型主義(1920年),對抽象藝術(shù)的發(fā)展曾經(jīng)產(chǎn)生很深影響。
? 以下為這位藝術(shù)家的幾幅作品:



