一、數據立方體的基本概念
數據立方體是多維數據庫的基本結構,並作為在多維數據庫上定義的所有操作符的輸入輸出基本單位。將它定義為一個四元組<D,M,A,f>,這四個組件分別表示數據立方體的特征:
1. n 個維的集合D={d1 ,d2,。。。 ,dn },其中每個di 為從維域中抽取的維名。
2. K 個度量的集合M={ m1 ,m2,。。。 ,mn },其中每個mi 為從度量域中抽取的度量名。
3. 維名集合與度量名集合是不相交的,即D∩M=。
4. t 個屬性的集合A={a1, a2,。。。at},其中每個ai 為從維域中抽取的屬性名。
5. 一對多映射f:D→A,即每個維存在一個對應的屬性集合。與不同維對應的屬性集互不相交,即對所有i,j,i不等於j,f(di)∩f(dj)= 空。
在典型的OLAP 應用中,存在一個中心關系或數據集合,稱作事實表。事實表代表感興趣的事件或對象。事實表通常有幾個表示維的屬性和一個或多個度量屬性,這些度量屬性一般是用戶想要查詢到的一些值。下面給出例子來說明數據立方體的定義。表2.1 是一個數據庫中表示文件元數據的基本關系表Files,Owner、Type、Etime、Size 分別表示文件的所有者、類型、創建時間、大小,單位KB。
Files 關系:Files(Owner,Type,Etime,Size)是個事實表。維Owner、Type、Etime用來定義分類,Size 是度量屬性,它是向這個數據庫所提出的聚集查詢所需要的,用它來進行一定的分析。
現在用與基本關系表Files 相對應的元數據立方體來表示存儲系統中文件元數據的多維數據庫。元數據立方體具有如下的特征:
(1) 用戶關心是的文件大小這個度量,對於元數據立方體來說,M={文件大小}。
(2) 用戶習慣於用三維來分析文件,即文件所有者、類型、創建時間,也就是說用戶經常會提出這樣的問題,“用戶O1 在上周創建的文件的總大小是多少?”(用文件所有者和創建時間維詢問),或“在一定時間內,用戶O2 所創建的文本文件的總大小是多少?”(用全部三個維詢問)。於是對元數據立方體來說,D={文件所
有者,文件類型,創建時間}。
(3)創建時間維是用屬性日、月和年來描述的;文件所有者維是用john、xiaoguo、yy 來描述的;文件類型維是用doc、exe、txt 等來描述的。於是,對元數據立方體而言,A={john,xiaoguo,yy,doc,exe,txt,日,月,年}。
(4)在前面解釋的每一個維都用特定的屬性來描述,對元數據立方體而言,映射f 為:
f(文件所有者) = { john,xiaoguo,yy }
f(文件類型) = {doc、exe、txt}
f(創建時間) = {日,月,年}
可以注意到上面的三個屬性集合是互不相交的,因此元數據立方體滿足上述定義,如圖所示:
二、數據立方體的計算
數據立方體的全部或部分預計算可以大幅降低響應時間,提高查詢效率,提高聯機分析處理性能[18]。數據立方體的物化有三種策略:
1. 預先計算任何方體,即完全立方體物化(Full Materialization)[19]。一個n 維的數據立方體,有2n 種組合(Group by),即有2n 個方體。因此完全立方體物化就是聚集度量M 對n 個維的所有可能組合計算。完全物化優點:可以對提出的任何查詢快速響應,快速返回預計算好的結果,不用在線等待計算結果,提高交互性。缺點:完全物化時間復雜度是維度的指數,隨着維度的增大,將發生“維災”。計算代價非常大,而且消耗大量的存儲空間和系統資源,同時當它的數據源發生改變時,為了保持數據的一致性,需要重新的計算所有的方體。當立方體的維度比較高時,對完全物化策略的立方體進行更新維護將耗費大量的時間和系統資源。完全物化主要有多路數組聚集方法。
2. 不預先計算任何的方體(不物化,No Materialization),數據立方體中每一個方體都不對聚集度量M 進行預計算,相當於只提供一個多維的索引,這樣對於用戶提交的查詢,需要在線計算結果,響應時間較長。當總的數據量很大時,那查詢的結果集也會很大,在線計算將需要很長的時間,從而導致無法忍受的響應時間,在海量數據情況下,該策略是不可取的。
3. 部分物化(Partial Materialization)提供了存儲空間和響應時間的有效折衷。替代計算完全立方體,我們可以計算立方體的一個子集,或計算由各種方體的單元組成的子立方體。優點是節省了大量的計算時間和存儲空間;缺點是只能命中大部分查詢而且結果可能不太精確, 對於沒命中的查詢需要在線計算( onlinecomputation)。
完全立方體的每個單元記錄一個聚集值,通常使用諸如count、sum 等度量。對於方體中的許多單元,度量值將為0。當相對於存放在該方體中的非零值元組的數量,方體維的基數的乘積很大時,那么該方體是稀疏的。如果一個立方體包含許多稀疏方體,則稱該立方體是稀疏的。
在許多情況下,相當多的立方體空間可能被大量具有很低度量值的單元占據。這是因為立方體單元在多維空間中的分布常常是相當稀疏的。例如,某一類型的文件非常少,這樣的事件將產生少量非空單元,使得其他大部分立方體單元為空。在這種情況下僅物化其度量值大於某個最小閾值的方體(Group by)單元是很有用的。比如說,在上面Files 對就應的元數據立方體中,我們可能只希望物化其Size 100KB,這不僅能夠節省計算時間和空間,而且能夠導致更聚集的分析。對於未來的分析,不能夠滿足閾值的單元多半是微不足道的。這種部分物化的單元稱作冰山立方體(Iceberg Cube)[20,21,22],最小閾值稱作最小支持度閾值或簡稱最小支持度(min_sup)。
實際上,決策者或管理者可能對許多方體的單元不太感興趣或不感興趣。例如,“某個文件夾下文件的總大小是多少?”這樣的話文件小於100KB 的就可以不予考慮,這樣可以大大減少計算時間,節省空間,但又不影響分析和做出決策。