数据立方体 解密

本文探讨了数据立方体在处理多维数据集时的优化方法,特别是如何利用数据的稀疏性减少存储空间和处理时的I/O消耗。通过实例解释了同基类的概念及其在减少存储需求中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据立方体和传统数据库的差别在于数据立方体即Cube把很多原来要用数据库的group by操作来达到的效果通过其独有的存储形式予以加速, 用户可以方便地下钻, 切面 看到各种聚合的数据的结果。

试想一下,如果一个cube拥有3个维度,为了计算在各个维度上的聚合,就要进行2^3次计算,如果有10个维度就要进行2^10次聚合计算,随着维度的增加,计算量也陡增。此外经过一次聚合后,得到的不是一个值而已,是一个少了若干维度的子cube,要将所有的cube存储起来会占用大量的磁盘空间。

所以完全预存所有可能的度量值显然是不可能的。

巧妙之处就在于利用数据的稀疏性。举个例子:

一幢楼有10层,每层有3个大间,每个大间有甲乙丙丁4个小隔间,现在把这幢楼当成数据立方体,度量值就是住的人数。

101甲有3人(一楼01室甲间),

103丙有2人,

202乙有4人,

203丁有2人,

302乙有1人,

然后从4楼往上,只有702甲住了2人。

有很多的空的房间就象征着稀疏。

这时我们会发现如果用户查询的4楼以上的人数数据,且未指明其他两个维度的话,其实只要返回一个702甲的人数就可以了。或者用户查询所有丙室的人数,也只要返回103丙有2人。仿佛103丙这一间小房间却在特定的聚合条件下覆盖了一大片区域。如果我们用符号“*”来表示All,那么103丙覆盖了:

(*,*,丙)

这样一个子cube。

用术语来说(*,*,丙)和(1,*,丙)和(*,3,丙)其实归根结底就是103丙,它们叫“同基类”。那么数据立方体在预存聚合值的时候就只要存同基类中的一个值就可以了,然后通过一定存储形式指明那些区域是属于这个同基类的就可以了,大幅减少了储存空间和Process时的IO消耗。


具体通过什么样的形式来指明同基类可以参考这篇论文:http://www.docin.com/p-49564349.html

再贴一片关于SSAS调优的文章: https://ask.hellobi.com/blog/liangyong/311



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱知菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值