YichengGu 2016-03-25
OLAP工具通常使用数据立方体和多维数据模型,对汇总数据提供灵活的访问。例如:数据立方体能够存放多个数据维上的预计算的度量。用户可以提出数据上的OLAP查询,也可以以多维方式,通过诸如下钻或上卷这样的OLAP操作类探查数据。
一、数据立方体计算:基本概念
为了提升OLAP查询效率,我们采用了完全立方体物化(预计算)与部分立方体物化。下面比较了这些策略。
1、立方体物化:完全立方体、冰山立方体、闭立方体和立方体外壳
例如:维A、B、C和聚集度量M的3-D数据立方体。通常使用的度量包括count(),sum(),min(),max()。数据立方体是方体的格,每个方体代表一个group-by。基本方体是数据立方体中泛化程度最低的方体。泛化程度最高的方体是顶点方体。为了在数据立方体中下钻,我们从顶点方体的格向下移动;对于上卷,我们从基本方体向上移动。
基本方体的单元是基本单元。非基本方体的单元是聚集单元。
为了确保快速查询OLAP,有时预计算完全立方体。然而,完全立方体的计算复杂度是维数的指数,即2的n次方。如果考虑到每个维的概念分层,那么方体的个数更多。这样预计算完全立方体可能需要海量空间。尽管如此,完全立方体计算的算法仍然是重要的。单个立方体可以存放在辅助存储上,在需要时访问。或者,可以使用这样的算法计算较小的立方体,包含给定维集合的一个子集,或者某些维的可能值的一个较小的领域。在这种情况下,较小的立方体是给定维子集或维值的完全立方体。探索计算数据立方体的所有方体的可伸缩方法。这些方法必须考虑可用于计算方体的内存容量的限制、计算的数据立方体的总体大小,以及计算所需要的时间。
部分物化提供了存储空间和OLAP响应时间之间的折中。不是计算完全立方体,而是计算数据立方体的方体的一个子集,或者计算由各种方体的单元子集组成的子立方体。
在许多情况下,相当多的立方体空间可能被大量具有很低度量的单元所占据。这是因为立方体单元在多维空间中的分布常常是相当稀疏的。例如:一个顾客一次在一个商店可能只买少量商品。这样的事件将产生少量非空单元,而剩下其他大部分立方体单元为空。在这种情况下,仅物化其度量值大于某个最小阀值的立方体单元是有用的。例如:仅仅希望物化其sales>$100。这样能够节省时间和磁盘空间,而且还能够导致更聚焦的分析。这种部分物化的立方体称为冰山立方体。这种最小阀值称为最小支持度阀值,或简称为最小支持度。
为了系统的压缩数据立方体,需要引入闭覆盖的概念。一个单元c是闭单元,如果不存在单元d,使得d与c的特殊化(即d通过将c中的*值用非*值替换得到),并且d与c具有相同的度量值。闭立方体是一个仅由闭单元组成的数据立方体。
部分物化的另一种策略是只要预计算涉及少数维的方体。这些方体形成对应大的数据立方体的立方体外壳。在附加的维组合上的查询必须临时计算。例如,可以预计算n维数据立方体中具有3个或更少维的所有方体,产生大小为3的立方体外壳。然而,这仍然会计算大量的方体,特别是当n很大时。或者,可以基于方体的兴趣度,选择只预计算立方体外壳的部分或片段,这种就外壳片段方法。
二、数据立方体计算的一般策略
一般而言,有两种基本数据结构用于存储方体。关系OLAP(ROLAP)的实现使用关系表,而多维数据组用于多维OLAP(MOLAP)。尽管ROLAP和MOLAP可能使用不同的立方体计算技术,但是某些优化“技巧”可以在不同的数据表示之间共享。
三、 数据立方体计算方法
完全或部分数据立方体的预计算可以大幅度降低响应时间,提高联机分析处理的性能。但是,这种计算是一个挑战,因为它可能需要大量时间和存储空间。数据立方体有效计算方法有:多路数据聚焦方法、BUC方法从顶点方体向下计算冰山立方体、Star-Cubing方法,从顶向下和从底向上的计算、壳片段立方体方法,它为有效的高维OLAP计算壳片段。
1、多路数组聚集方法使用多维数组作为基本的数据结构,计算完全数据立方体。他是一种使用数组直接寻址的典型MOLAP方法,其中维值通过位置或对应数组位置的下标访问。
2、BUC从顶点方体向下计算冰山立方体
BUC是一种计算稀疏冰山立方体的算法。从顶点方体向下到基本方体构造冰山立方体。这使得BUC可以分担数据划分开销,这种处理次序也使得BUC在构造立方体的使用先验性质进行剪枝。
BUC聚集整个输入并输出结果总数。对于每个维d,输入在d上划分。由Partition()返回,dataCount包含维d的每个不同值的元组总数。d的每个不同值形成自己的分区。行8对每个分区迭代。行10检查分区的最小支持度。也就是说,如果该分区中的元组数满足最小支持度,则该分区称为递归调用BUC的输入关系,在维d+1到numDims上的划分计算冰山立方体。采用sql实现:compute cube iceberg_cube as select A,B,C,D,Count(*) from R cube by A,B,C,D having count(*) >=3。BUC是如何构造维ABC和D的冰山立方体,其中最小支持度计算为3.假设维A有4个不同值a1,a2,a3,a4;B有4个不同值b1,b2,b3,b4;C有2个不同值c1,c2;而D有2个不同值d1,d2。如果将每个分组看成一个划分,则必须计算满足最小支持度(即具有3个元素)的分组属性的每个组合。
在搜索满足冰山条件的元组时,BUC使用先验证性质节省搜索时间。从维A的值a1开始,聚集a1分区,为a的分组创建一个元组,对应于单元(a1,*,*,*)。假设(a1,*,*,*)满足最小支持度,此时在a1的分区上进行递归调用。BUC在维B上划分a1的分区。它检查(a1,b1,*,*)的计数,看他是否满足最小支持度,并在(a1,b1,*,*)上递归,从c1开始对c上划分。建设(a1,b1,c1,*)的单元计数是2,不满足最小支持度,则它的任何后代也不能满足。因此,BUC减掉对(a1,b1,c1,*)的进一步探查。节省大量处理时间。
3、为快速高速OLAP预计算壳片段
数据立方体有利于多维空间的快速OLAP。然而,高维完全数据立方体需要海量存储空间和不切实际的计算时间。冰山立方体提供了一个更可行的替代方案,正如我们已经看到的,冰山条件用来指定计算完全立方体单元的一个子集。然而,尽管冰山立方体比对应的完全立方体小,并且需要较少的计算时间,但是它还不是最终的解。
第一,冰山立方体本身的计算和存储开销可能仍然很高。第二,很难确定合适的冰山阀值,该阀值设的太低将导致巨大的立方体,设置太高可能无法用于更多有意义的应用。第三、冰山立方体不能增量的更新,一旦一个聚集单元低于冰山阀值,他就被剪枝,他的度量值就丢失。任何增量更新都需从头重新计算。
外壳片段方法遵循版联机计算策略。它涉及两个算法:一个计算外壳片段立方体,而另一个用立方体片段处理查询。外壳片段方法能够处理维度非常高的数据库,并且可以快速联机计算小的局部立方体。他利用信息检索和基于web的信息系统中很流行的倒排索引结构。其基本思想如下:给定一个高维数据集,把维划分成互不相交的维片段,把每个片段转换成排序索引表示,然后构造立方体外壳片段,并保持与立方体单元相关联的倒排索引。使用预计算的立方体外壳片段,可以联机动态的组装和计算所需要的数据立方体的方体单元。这可以通过倒排索引上的集合交操作有效的完成。
通过原生JS,点击事件,鼠标按下、鼠标抬起和鼠标移动事件,实现3d立方体的拖动旋转,并将旋转角度实时的反应至界面上显示。<input type="text" class="xNum" value="&