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