一、数据立方体的基本概念
数据立方体是多维数据库的基本结构,并作为在多维数据库上定义的所有操作符的输入输出基本单位。将它定义为一个四元组<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 的就可以不予考虑,这样可以大大减少计算时间,节省空间,但又不影响分析和做出决策。