商立方体(Quotient Cube)的概念由Laks Lakshmanan等提出[LPH02],主要是为了解决立方体压缩过程中立方体单元间上卷和下钻逻辑关系的丢失问题。在商立方体中,所有的单元被划分为若干类,在同一类中的单元具有相同的聚集值。类的划分不仅仅是满足聚集值相同这个条件,同时也满足一些额外的条件。这些条件的限制,使得商立方体可以保留下数据立方体的语义结构。因此,每个类只需保存下某些能够代表本类中所有单元属性的单元,即可实现数据量的压缩。
4.1 商立方体的分类商立方体的主要思想是分类,它采用了一种单元分类方法,称为“覆盖”分类法[LPH02]。该方法与聚集函数类型无关,也就是说,数据立方体上的任一单元,无论它的度量值的聚集函数是哪种操作,这个单元都会被商立方体算法划分到同一类中。
假设基表中的一条元组t,在数据立方体网格中,信捷职称论文写作发表网,t能够通过某一存在的路径,上卷到单元c,则称c覆盖(cover)t。c的覆盖集(cover set)定义为:c所覆盖的所有基表中的元组。例如,在图2.1中,单元(*, B, M1)的覆盖集是{(GZ, B, M1), (SZ, B, M1)}。
对于单元c和单元d,当c和d的覆盖集是相等的时候,它们被称为覆盖相等。例如,图2.1中的(*, B, M1)和(*, *, M1),它们的覆盖集都是{(GZ, B, M1), (SZ, B, M1)},因此这两个单元是覆盖相等的。
商立方体的分类方法就是将覆盖相等的单元分为同一类。在同一类单元中,有个上界(upper bound)的概念。上界就是在该类中最小的元素,也就是说,上界是无法下钻到同类单元中其他任何一个单元的。使用覆盖相等方法产生的商立方体分类,每个类有且只有一个上界,且同类的单元具有相同的聚集值[LPZ03]。
表4.1所示是对于图2.1中的数据立方体进行商立方体分类和各类的上界。
类别
类中单元
上界
1
(*,*,*):60
(*,*,*):60
2
(GZ,*,*):35
(GZ,*,*):35
3
(*,*,M1):45, (*,B,*):45, (*,B,M1):45
(*,B,M1):45
4
(*,F,*):15, (*,*,M2):15, (GZ,F,*):15
(GZ,*,M2):15, (*,F,M2):15, (GZ,F,M2):15
(GZ,F,M2);15
5
(GZ,B,*):20, (GZ,*,M1):20, (GZ,B,M1):20
(GZ,B,M1):20
6
(SZ,*,*):25, (SZ,*,M1):25, (SZ,B,*):25, (SZ,B,M1):25
(SZ,B,M1):25
表4.1 商立方体分类和上界集
4.2 商立方体的预计算算法商立方体的预计算算法的主要目的就是将单元分类和找出这些类的上界。为了加快预计算的速度,本文中的预计算程序使用到了映射处理。也就是将在原始数据某一维上不相等的数值,根据它们出现的顺序,映射成正整数。例如表2.1中的第2维{B, F, B},通过映射,B将映射成1,F将映射成2,第3个B因为之前已经出现,所以不必重新映射。映射后,对于数值为“*”的维度,则把它看作是0。
在将基表完成映射并完全载入内存的时候,便开始进入商立方体预计算算法的主体部分,一个深度优先算法(DFS)。在DFS中,完成了以下一些工作:找出覆盖相等的单元、找出类的上界并跳转到这些上界、根据基表分区来进行立方体计算。
对于某单元c,DFS是按照以下步骤来找出c所在类的上界ubc的:根据上界的定义,可以知道ubc与c比较的话,在c中不是“*”的维度的值与ubc相应维度的值是相同的。对于c在基表上的覆盖集Bc,任意一个维度i,且c在i维上的值为“*”,假设一个固定值xi出现在所有Bc中的所有元组的第i维中,则ubc的第i维元素就是xi。如果不存在这样xi,则第i维上的元素就是“*”。DFS的大体流程如下表所示:
DFS (cl, bPos, ePos, d)
(1) 计算cl的上界集ucl;
(2) 如果存在j<d使得cl[j]=*而ucl[j]!=*,返回(已经存在ucl,不用再次计算);
(3) 否则,计算元组cl的聚合值,写进内存变量;
(4) 用临时元组tmpucl存储上界集ucl;
(5) 对所有d<j<n使得ucl[j]=*进行以下操作:对从bPos到ePos元组在维度j上排序,对j维度上的每一个值x,让ucl[j]=x;Posb为j维度值为x的第一个元组,Pose为j维度值为x的最后一个元组,递归调用DFS(ucl,Posb,Pose,j);每次j值改变之后,ulc=tmpucl;
(6) 返回;
表4.2 DFS算法
预计算算法最终的输出结果所有类的上界和类的度量值,它们存放在(维度数+1)×2个文件中。假设原始数据的维度是d,则会产生d+1个存放上界的文件,另外d+1个文件则存放相应的度量值。具有同样多个“*”的上界被归为同一层,它们都存放在同一个文件中,且该文件只存放同一层的上界,它们相应的度量值也存在相应层次的度量值文件中。例如:全部都是“*”的单元是第0层,没有“*”的单元则是第d层,依此类推。
4.3 商立方体的查询算法商立方体的查询其实就是查找出