数据蒋堂 | 多维分析预汇总的方案探讨

作者:蒋步星

来源:数据蒋堂

本文共1300字,建议阅读6分钟。 本文与你探讨多维分析初始状态时该预先汇总哪些组合。

我们在《多维分析预汇总的存储容量》中计算过,如果想做到O(1)的复杂度,至少要考虑界面用到的各种维度组合,这在维度总量稍多一点时就不可行了。

这样,我们就只能放弃O(1)复杂度的期望了,不把每种可能出现的维度组合都预汇总出来,只能预汇总部分维度组合。在查询时,对于已经有预汇总的数据则可以直接返回,而如果碰到没有预汇总的维度组合时,则仍然从原始CUBE遍历聚合出来,这时的计算复杂度要么O(1)要么O(n)。

还可以做得更聪明一点:从某个已有的中间CUBE聚合。比如,如果保存了维度组合[A,B,C]的预汇总数据,那么维度组合[A,B]或[B,C]的查询就可以从这个中间CUBE再聚合出来了,而不必从原始CUBE聚合,计算量将会大大降低。有时可能会有多个中间CUBE都能聚合出目标查询,比如组合[A,B,C]和[B,C,D]都可以再聚合出组合[B,C],这时优先选择数据量较小的那个中间CUBE即可。

那么,我们怎么知道在初始状态时该预先汇总哪些组合呢?

可以动态生成这些组合。在查询时,无法从现有中间CUBE聚合出来的组合只能从原始CUBE聚合,我们可以在聚合完成后将结果保存起来作为一个新的中间CUBE。发现新组合时第一次访问会有延迟感,以后基于这个组合的查询或者可由该组合聚合出来的查询就都可以较快返回了。

其实,也不是只要能从现有中间CUBE聚合出来的组合就总是临时聚合。多维分析性能优化的目标是前端反应速度,如果中间CUBE仍然很大,那么再聚合也会比较慢,这时候,这些再聚合的结果也可以作为一些新的中间CUBE保存起来。

另外,在过程中我们还可以记录每个中间CUBE的使用频率,在空间总量限制下,删除那些使用率较低的中间CUBE,从而更有效地利用有限的空间。

经过这些处理后,我们虽然无法完全做到O(1)复杂度,但常常也能把计算性能从全量硬遍历提高几十倍甚至上百倍,这对于大多数多维分析场景已经足够了。


我们还在《多维分析预汇总的功能盲区》中说过几种情况无法通过预汇总来提高性能。其中非常规聚合和组合聚合本质上仍然是个数据量的问题,而对于临时产生的条件测度和时间段统计,就不是数据量的问题了,我们无法预测用户使用时才输入的参数,也就不可能把所有参数对应的数据都事先预汇总出来。

理论上还可以使用上面的办法:碰到新的参数就计算并保存下来。但与维度组合不同的是,测度参数常常是连续量,其取值及组合情况不可枚举,重复利用的可能性不大。

预汇总对于条件测度确实难有好的效果,不过,对于时间段统计,还是有点招的。我们可以将数据按更高的时间维度层次预汇总,在查询时就可以减少遍历计算量。

假如原始CUBE是按日存储的数据,那么我们可以按月把数据先做好汇总成中间CUBE,当需要针对一个时间段统计时,可以将时间段跨过的整月数据从中间CUBE中遍历,再加上时间段两头那两段不构成整月的日期的数据,即可以获得查询目标。这样,可以将长时间段统计的计算量减少十倍甚至更多。

比如,我们要查询1月22日到9月8日区间的某种统计值,而我们事先已经按月做过预汇总。那么我们只要基于预汇总数据计算2月到8月的聚合值,再使用原始CUBE计算1月22日到1月31日和9月1日到9月8日的聚合值,涉及的计算量是7(2月-8月)+10(1月22日-1月31日)+8(9月1日-9月8日)=25,而如果使用原始数据聚合,其计算量是223(从1月22日到9月8日的天数),几乎减少了10倍。

专栏作者简介

润乾软件创始人、首席科学家

清华大学计算机硕士,中国大数据产业生态联盟专家委员,著有《非线性报表模型原理》等,1989年,中国首个国际奥林匹克数学竞赛团体冠军成员,个人金牌;2000年,创立润乾公司;2004年,首次在润乾报表中提出非线性报表模型,完美解决了中国式复杂报表制表难题,目前该模型已经成为报表行业的标准;2014年,经过7年开发,润乾软件发布不依赖关系代数模型的计算引擎——集算器,有效地提高了复杂结构化大数据计算的开发和运算效率;2015年,润乾软件被福布斯中文网站评为“2015福布斯中国非上市潜力企业100强”;2016、2017年,荣获中国电子信息产业发展研究院评选的“中国软件和信息服务业十大领军人物”;2017年度中国数据大工匠、数据领域专业技术讲堂《数据蒋堂》创办者。

数据蒋堂

《数据蒋堂》的作者蒋步星,从事信息系统建设和数据处理长达20多年的时间。他丰富的工程经验与深厚的理论功底相互融合、创新思想与传统观念的相互碰撞,虚拟与现实的相互交织,产生出了一篇篇的沥血之作。此连载的内容涉及从数据呈现、采集到加工计算再到存储以及挖掘等各个方面。大可观数据世界之远景、小可看技术疑难之细节。针对数据领域一些技术难点,站在研发人员的角度从浅入深,进行全方位、360度无死角深度剖析;对于一些业内观点,站在技术人员角度阐述自己的思考和理解。蒋步星还会对大数据的发展,站在业内专家角度给予预测和推断。静下心来认真研读你会发现,《数据蒋堂》的文章,有的会让用户避免重复前人走过的弯路,有的会让攻城狮面对扎心的难题茅塞顿开,有的会为初入行业的读者提供一把开启数据世界的钥匙,有的甚至会让业内专家大跌眼镜,产生思想交锋。

本文分享自微信公众号 - 数据派THU(DatapiTHU)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习资料

Java程序员面试题大全系列之Java基础类库(一)

1、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

14220
来自专栏JavaEdge

基于Spark的机器学习实践 (六) - 基础统计模块

◆ Spark 的基础统计模块即MLlib组件中的Basic Statistics部分

18420
来自专栏考拉阅读前端团队

vue编写的移动端条件搜索条组件

15020
来自专栏亨利笔记

锯齿湖-最具商用价值的开源区块链项目:超级账本(4)

Sawtooth Lake(锯齿湖)是由超级账本联盟成员英特尔(Intel)公司发起的分布式账本平台试验项目,最初发布的时候称为intelledger,在进入超...

10520
来自专栏软件开发-青出于蓝

Springsecurity-oauth2之/oauth/token的处理

    Springsecurity-oauth2的版本是2.2.1.RELEASE.

99520
来自专栏诸葛青云的专栏

C语言奇淫技巧,字符串的三种表示方法,不会用不是合格的程序员

char c[12] = {'I','a','m','a','b','o','y','.'};

14800
来自专栏Jerry的SAP技术分享

推荐一个采用方便程序员在线动画学习常用算法的良心网站

假设我想学习冒泡排序算法,在搜索栏里输入sort,在结果列表里选择bubble sort:

11830
来自专栏软件开发-青出于蓝

Springboot中@Ehable**学习 原

    Springboot中使用EnableAutoConfiguration注解,如下所示:

11830
来自专栏亨利笔记

云中看链: 区块链 – 万物互联时代信任的基石 (二)

上期介绍了在互联网上传统的信任建立方式。然而传统的信任建立方式概况的说存在五个问题。第一个问题是成本高。要维持一个中心化的机构,开销很大。第二个问题是独立性、客...

7820
来自专栏亨利笔记

以太坊智能合约安全漏洞(2):溢出 | 赠书活动

和绝大多数编程语言一样,以太坊虚拟机(EVM)中的整数类型是有一定的范围的。例如,uint8 只能存储 [0,255] 范围内的数(无符号8位二进制数)。尝试将...

9410

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励