多维数据库中的高效计算机制
多维分析技术是战略执行的利器
随着交易的应用系统的普及,企业的用户对于数据分析的需求开始爆增,2000 年互联网开始发展,OLAP 的产品推出来,解决在大数据环境下做多维度数据分析的需求。MOLAP(多维在线分析处理)脱离的关系数据库的基础,面向业务深度、复杂的计算业务分析设计,实现的一种场景技术路线,有很多的用户、很多复杂的模型要进行计算,计算模型也经过专门的设计,更适合做业财分析的模型。
在多维数据库(MOLAP)中,多维即席分析和计算相辅相成,由于其数据的稀疏特性,在实现其计算引擎时,需要解决好稀疏计算的课题,以达到实时反馈的计算效率,满足包括模拟测算在内的高效运行。本文将介绍在元年多维数据库中,计算引擎是如何提高多维数据库的实时计算效率的。
高效计算机制基本原理
在多维数据库中,如下表中的数据:
表 1
其中“总销售额”是聚合项,其子项有三个,分别是“铅笔销售额”、“橡皮销售额”和“作业本销售额”。
当查询单元格【“1 月”,“总销售额”】时,需要将【“1 月”,“铅笔销售额”】、【“1 月”,“橡皮销售额”】、【“1 月”,“作业本销售额”】三个单元格的值相加计算得到。这需要进行两次加法计算。
而从表中数据可以看到,【“1 月”,“橡皮销售额”】、【“1 月”,“作业本销售额”】两个单元格是没有值的,也就是说在计算【“1 月”,“总销售额”】时没必要把它们两个再加一次,直接取【“1 月”,“铅笔销售额”】单元格的值就可以了。这样就可以减少两次加法计算,进而提高效率。
为了达到这种效果,我们在存储上表中的数据时,只存储有值的单元格【“1 月”,“铅笔销售额”】,而无值的【“1 月”,“橡皮销售额”】、【“1 月”,“作业本销售额”】单元格不存储。这样在计算【“1 月”,“总销售额”】时,只需遍历“1 月”下有值的单元格进行加法计算即可,也就不会有多余计算了。
公式计算的新挑战
上节讲到的聚合计算中,被聚合的单元格都是录入值,有值无值由录入人员决定。如果被聚合的都是用公式计算出来的单元格的话,会发生什么问题呢。如下表数据:
表 2
这个表中没有录入数据,但在这个表上有三个计算公式,如下:
【“铅笔销售额”】=【“铅笔销量”】*【“铅笔单价”】;
【“橡皮销售额”】=【“橡皮销量”】*【“橡皮单价”】;
【“作业本销售额”】=【“作业本销量”】*【“作业本单价”】;
其对应的各销量和单价数据都在下表中,这些是由用户录入的。
表 3
这时我们再计算【“1 月”,“总销售额”】时,只能是把【“1 月”,“铅笔销售额”】、【“1 月”,“橡皮销售额”】、【“1 月”,“作业本销售额”】三个单元格分别计算出来,然后再进行加法计算,得到【“1 月”,“总销售额”】的值。因为【“1 月”,“铅笔销售额”】、【“1 月”,“橡皮销售额”】、【“1 月”,“作业本销售额”】三个单元格是公式计算的单元格,这在进行计算前是不清楚其计算结果是否有效的。
很显然,根据销量和单价的数据表可以看出,【“1 月”,“橡皮销售额”】、【“1 月”,“作业本销售额”】是不需要计算的,因为没有其相关的销量和单价数据。
那么我们如何能够在计算【“1 月”,“总销售额”】时不进行不必要的【“1 月”,“橡皮销售额”】和【“1 月”,“作业本销售额”】两个单元格的计算呢?下面我们来给出解决方法。
元年专利技术成就高效计算
在表 2 中计算聚合单元格【“1 月”,“总销售额”】时,之所以需要把其三个子项单元格都计算一次,是因为三个子项单元格的值都是用公式计算出来的,没有办法提前知道这三个子项单元格是否能计算出有效值来。所以关键点就是要提供一种方法,能够在计算【“1 月”,“总销售额”】单元格时,知道只需要计算【“1 月”,“铅笔销售额”】单元格即可。
在元年多维数据库中,能够轻松处理这种情况。具体如何做呢?
首先,在用户为单元格【“1 月”,“铅笔销售额”】编写公式【“铅笔销售额”】=【“铅笔销量”】*【“铅笔单价”】后,会自动对这个公式进行分析,从而可以得到【“1 月”,“铅笔销售额”】单元格仅在【“1 月”,“铅笔销量”】和【“1 月”,“铅笔单价”】都有值的情况下,才能够计算出有效值。将这种单元格间的关系记录下来。
然后,当用户为【“1 月”,“铅笔销量”】和【“1 月”,“铅笔单价”】单元格都录入有效值后,根据上一步通过分析公式得到的计算关系,知道这时候【“1 月”,“铅笔销售额”】单元格就能够计算出有效值了,于是在数据库中自动为【“1 月”,“铅笔销售额”】加上标记,以表示获取此单元格的值时,可以通过公式计算出有效值,是需要计算的。
最后,在计算聚合单元格【“1 月”,“总销售额”】时,直接在数据中遍历有标记的子项单元格就可以了。这时就只需要计算【“1 月”,“铅笔销售额”】单元格,就可以得到【“1 月”,“总销售额”】的聚合值了。从而减少了两次不必要的计算。
在元年多维数据库中,当表 3 录入值后,表 2 将不会再是空表,而是会像表 4 一样,在能计算出有效值的单元格处打上标记,从而可以使得计算聚合单元格【“1 月”,“总销售额”】时,能够只进行一次有效公式计算,便能够得到正确的聚合值。
表 4
总 结
在元年多维数据库中,其实时计算引擎能够精确找到那些需要计算的单元格,不会导致无效的计算,从而使得计算引擎的效率大大提升。
本文重点介绍的是元年多维数据库中实现高效计算机制的基本原理,更多精彩内容可扫描下方二维码或点击阅读原文进行查看。
推荐阅读:
元年专利解析|元数据管理系统和使用其对模型对象进行建模的方法
版权声明: 本文为 InfoQ 作者【元年技术洞察】的原创文章。
原文链接:【http://xie.infoq.cn/article/2e577b8176d9ef16b51714ac7】。文章转载请联系作者。
评论