写点什么

多维数据库中的高效计算机制

  • 2022 年 9 月 30 日
    天津
  • 本文字数:2283 字

    阅读完需:约 7 分钟

多维分析技术是战略执行的利器


随着交易的应用系统的普及,企业的用户对于数据分析的需求开始爆增,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


总 结


在元年多维数据库中,其实时计算引擎能够精确找到那些需要计算的单元格,不会导致无效的计算,从而使得计算引擎的效率大大提升。


本文重点介绍的是元年多维数据库中实现高效计算机制的基本原理,更多精彩内容可扫描下方二维码或点击阅读原文进行查看。


推荐阅读:

元年专利解析|元数据管理系统和使用其对模型对象进行建模的方法

元年洞察|元年方舟数据中台打造企业数据能力组件中心

拓增量,谋共赢 | 元年发布ISV生态合作伙伴计划

元年洞察|PaaS平台应用趋势

一文读懂数字化转型中的数据存储


发布于: 刚刚阅读数: 4
用户头像

公众号:元年技术洞察 2022.08.05 加入

分享数字化前沿技术、创新实践,用数据和新技术助力企业数字化转型,打造数据驱动型企业。

评论

发布
暂无评论
多维数据库中的高效计算机制_智能多维数据库_元年技术洞察_InfoQ写作社区