mondrian的个人总结
1. OLAP的作用和功能
OLAP(On-Line Analysis Processing)在線分析處理是一種共享多維信息的快速分析技術(shù);OLAP利用多維數(shù)據(jù)庫技術(shù)使用戶從不同角度觀察數(shù)據(jù),它用于支持復(fù)雜的分析操作,側(cè)重于對(duì)管理人員的決策支持,可以滿足分析人員快速、靈活地進(jìn)行大數(shù)據(jù)復(fù)量的復(fù)雜查詢的要求,并且以一種直觀、易懂的形式呈現(xiàn)查詢結(jié)果,輔助決策。
OLAP用了多維分析的技術(shù)。盡管關(guān)系型數(shù)據(jù)庫所存儲(chǔ)的所有數(shù)據(jù)都是以行和列的形式存在的,但一個(gè)多維數(shù)據(jù)庫還是可以看做一個(gè)由軸(axes)和單元(cell)所組成的立方。借助這個(gè)立方,OLAP可以完成鉆取、切片、切塊、旋轉(zhuǎn)等操作。所謂的鉆取操作就是改變維的層次,變化分析的粒度。Drill-up是將低層次的數(shù)據(jù)概括到高層次的匯總數(shù)據(jù)或者說是減少維度;Drill-up則是相反,是將匯總的數(shù)據(jù)深入到細(xì)節(jié),或說是增加新維。切片和切面操作是在一部分維上選定值后,關(guān)心度量數(shù)據(jù)在剩余維上的分布。如果剩余的維只有兩個(gè),則是切片;如果有三個(gè)或以上,則是切塊。旋轉(zhuǎn)操作即是變換維的方向,即在表格中重新安排維的放(例如行列互換)。
那么這個(gè)立方是以什么形式存儲(chǔ)在關(guān)系數(shù)據(jù)庫中的呢?它通常對(duì)應(yīng)一個(gè)星型模型或者雪花模型。所謂的星型模型,它是由若干個(gè)事實(shí)表和若干個(gè)維表組成,事實(shí)表包括所有分析維度的外鍵和一個(gè)度量,維表對(duì)應(yīng)于各個(gè)分析的角度,它除了主鍵以外還包含描述和分類信息。雪花模型是對(duì)星型模型的擴(kuò)展。它對(duì)星型模型的維表進(jìn)一步層次化,原有的各維表可能被擴(kuò)展為小的事實(shí)表,形成一些局部的“層次”區(qū)域,這些被分解的表都連接到主維度表而不是事實(shí)表。
2. Mondrian的選型依據(jù)
Mondrian是一個(gè)OLAP的服務(wù)引擎,而且是一個(gè)ROLAP引擎。它本身不管理數(shù)據(jù)的儲(chǔ)存,這是由關(guān)系數(shù)據(jù)庫來做的,它使用JDBC讀取數(shù)據(jù),因此,不管數(shù)據(jù)存儲(chǔ)于普通關(guān)系數(shù)據(jù)庫,或是數(shù)據(jù)集市、數(shù)據(jù)倉庫,只要能用JDBC訪問就可以。
Mondrian主要功能就是對(duì)數(shù)據(jù)量極大的數(shù)據(jù)表和相關(guān)聯(lián)的多個(gè)維度表進(jìn)行查詢、匯總、軸變換以及上卷、下鉆等操作,查詢可以非常復(fù)雜,如果沒有Mondrian引擎這是很難完成的。
Mondrian完成多維度的查詢、匯總等相關(guān)操作是通過書寫相應(yīng)的MDX語句來完成的。MDX是多維數(shù)據(jù)庫的查詢語言,這已成為一個(gè)標(biāo)準(zhǔn),就跟SQL是關(guān)系數(shù)據(jù)庫的查詢語言類似。然后,Mondrian會(huì)解析MDX語句,轉(zhuǎn)化成SQL來查詢關(guān)系數(shù)據(jù)庫,這個(gè)查詢可能是多條的。本質(zhì)是mondrian就是一個(gè)解釋器,將MDX語句解釋為SQL語句來完成相關(guān)查詢。
Mondrian的相關(guān)測(cè)試:
當(dāng)數(shù)據(jù)量為1億時(shí),刷新立方所需花費(fèi)的時(shí)間為33052.0毫秒。所謂的刷新是立方操作就是后臺(tái)數(shù)據(jù)庫中對(duì)表進(jìn)行了相關(guān)增刪改查操作,程序調(diào)用了刷新立方函數(shù)的過程。它會(huì)清除Mondrian緩存,重新刷新schem文件。此外,當(dāng)數(shù)據(jù)量為一億時(shí),初次查詢和刷新立方操作所產(chǎn)生的資源消耗數(shù)據(jù)如下:1.服務(wù)器CUP:占用比率大概150%;2.服務(wù)器端mysql 內(nèi)存占用不是很大 3%;3.測(cè)試端程序(即客戶端)占用內(nèi)存大概61296K。其他mondrian相關(guān)的測(cè)試結(jié)果如下圖所示。
3. Mondrian的整體架構(gòu)
(1)表現(xiàn)層(thepresentation layer)
Jpivot表現(xiàn)層或者通過Java API進(jìn)行查詢結(jié)果的展示。
(2)維度層(thedimensional layer)
維度層用來解析、驗(yàn)證和執(zhí)行MDX查詢要求。一個(gè)MDX查詢要通過幾個(gè)階段來完成:首先是計(jì)算坐標(biāo)軸(axes),再者計(jì)算坐標(biāo)軸axes中cell的值。
?為了提高效率,維度層把要求查詢的單元成批發(fā)送到集合層,查詢轉(zhuǎn)換器接受操作現(xiàn)有查詢的請(qǐng)求,而不是對(duì)每個(gè)請(qǐng)求都建立一個(gè)MDX 聲明。
(3)集合層(the starlayer)
集合層負(fù)責(zé)維護(hù)和創(chuàng)建集合緩存,一個(gè)集合是在內(nèi)存中緩存一組單元值,這些單元值由一組維的值來確定。
維度層對(duì)這些單元發(fā)出查詢請(qǐng)求,如果所查詢的單元值不在緩存中,則集合管理器(aggregation manager)會(huì)向存儲(chǔ)層發(fā)出查詢請(qǐng)求。
(4)存儲(chǔ)層(the storagelayer)
存儲(chǔ)層是一個(gè)關(guān)系型數(shù)據(jù)庫(RDBMS)。它負(fù)責(zé)創(chuàng)建集合的單元數(shù)據(jù),和提供維表的成員。
Mondrian系統(tǒng)由四個(gè)層組成,從最終用戶到數(shù)據(jù)中心,順序?yàn)? 表現(xiàn)層(the presentation layer)、維度層(the dimensional layer)、集合層(the star layer)和存儲(chǔ)層(the storage layer)。
4. 定義報(bào)文的JSON格式:
{"consumption":"nts_sample","region": [{"province":"江蘇","city":"南京","district":"玄武","building":"1號(hào)建筑","area":"1號(hào)區(qū)域"},{"province":"湖南","city": "長(zhǎng)沙","district":"雨花","building":"1號(hào)建筑","area":"1號(hào)區(qū)域"}],"time": [{"year":"2015","quater":"1","month":"1","day":"2","hour":"0","minute":"0"},{"year":"2015","quater":"2","month":"5","day":"2","hour":"0","minute":"0"}],"category": [{"categorytype": "動(dòng)力"},{"categorytype": "照明"}],"org": [{"group":"天溯","company":"研發(fā)中心","branch":"系統(tǒng)軟件部","department":"企業(yè)組"},{"group":"天溯","company":"研發(fā)中心","branch":"產(chǎn)品部","department": "UCD"}]}其中consumption表示能源的消耗值,value對(duì)應(yīng)于事實(shí)表中的度量字段的取值;region對(duì)應(yīng)于地區(qū)維度,它是一個(gè)一維數(shù)組,查詢的地區(qū)可以是零到多個(gè),地區(qū)下面存在省、市、地區(qū)、樓宇、區(qū)域這5個(gè)層次(level);time對(duì)應(yīng)于時(shí)間維度,查詢的時(shí)間可以是零到多個(gè),也是一個(gè)一維數(shù)組,時(shí)間下面存在年、季度、月、日、時(shí)、分等層次;因?yàn)閏lass是java的關(guān)鍵字,所以用category來表示設(shè)備的一維數(shù)組,查詢的設(shè)備可以是零到多個(gè),它下面存在設(shè)備類型這一層次;org表示單位的一維數(shù)組,查詢的單位可以是零到多個(gè),org下面存在組織、公司、部門、職位這幾個(gè)層次。
5.? 具體調(diào)用的方法
首先是解析報(bào)文的函數(shù),此處采用了java的開源框架fastjson,fastjson是效率最高的json解析器和生成器,通過它可以方便的完成json與java對(duì)象之間的相互轉(zhuǎn)換。
/*** 解析報(bào)文函數(shù)** @paramString jsonStr* 接受的報(bào)文格式* @returnEway* 對(duì)數(shù)據(jù)倉庫封裝的一層數(shù)據(jù)結(jié)構(gòu)*/publicstatic Eway parseJson(StringjsonStr) {//反序列化操作Ewayeway = JSON.parseObject(jsonStr, Eway.class);//將接受的報(bào)文值存入封裝好的數(shù)據(jù)結(jié)構(gòu)之中eway.setComsumption(eway.getComsumption());eway.setRegion(eway.getRegion());eway.setTime(eway.getTime());return eway;}QueryExcute函數(shù)是對(duì)MDX查詢語句的簡(jiǎn)單封裝,用戶無需關(guān)心細(xì)節(jié)的MDX語句,只需傳入待查詢的參數(shù),后臺(tái)程序以拼接字符串的形式,完成相關(guān)MDX語句的生成。
?
/*** 多維數(shù)據(jù)庫的查詢函數(shù)* @param measures* 度量* @param axis0* 維度1* @param axis1* 維度2* @return* MDX執(zhí)行語句*/public static StringQueryExcute(String measures, String axis0, String axis1) {String Query ="select {[Measures].[" + measures + "]} ONCOLUMNS,{[region.default].[" + axis0 + "]} ON ROWS from [ntsdw] where[time.default].[" + axis1 + "]";return Query;}?? PrintResult函數(shù)是完成的MDX查詢,并打印輸出結(jié)果集。它與JDBC類似。首先是通過Mondrian.OLAP包下的Connection對(duì)象獲取連接,連接必須指明引擎的名稱,連接數(shù)據(jù)庫的名稱及用戶名和密碼,對(duì)應(yīng)的邏輯模型;然后調(diào)用connection的parseQuery方法來解析查詢語句;最后將查詢的結(jié)果保存到一個(gè)result對(duì)象之中,以流的形式在控制臺(tái)打印輸出。
/*** 打印輸出 多維數(shù)據(jù)庫查詢結(jié)果的函數(shù)* 1.獲取連接;* 2.執(zhí)行查詢語句;* 3.將查詢的結(jié)果保存到result之中;* 4.打印輸出。*/@SuppressWarnings("deprecation")public static voidPrintResult(){Connection connection =DriverManager.getConnection("Provider=mondrian;Jdbc=jdbc:mysql://192.168.20.230/nts_eway_ee?user=root&password=iamnts;Catalog=E:/ntsdw.xml;",null);String jsonStr ="{\"comsumption\":\"nts_sample\",\"region\":[{\"province\": \"江蘇\"}],\"time\":[{\"year\": \"2015\"}]}";Ewayeway=parseJson(jsonStr); Stringmeasures=eway.getComsumption();Stringaxis0=eway.getRegion().get(0).getProvince();Stringaxis1=eway.getTime().get(0).getYear();Query query =connection.parseQuery(QueryExcute(measures,axis0,axis1));Result result =connection.execute(query);PrintWriter pw = newPrintWriter(System.out);result.print(pw);pw.flush();}總結(jié)
以上是生活随笔為你收集整理的mondrian的个人总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021 owasp top10
- 下一篇: 课表查询系统java数据库_教务管理系统