• 多维数据库中的高效计算机制是什么?


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

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

    总 结

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

  • 相关阅读:
    English语法_介词 - on
    Hive 剖析
    11个在线免费调整图像大小而不会降低质量工具
    Springboot之SpringMVC与MyBatis(二)异步迭代商品管理
    openpnp - SlotSchultzFeeder source code bugfix
    04. 模仿stm32驱动开发
    Nacos 集群搭建
    Layui快速入门之第二节布局容器(固定宽度与完整宽度)
    比Linus更厉害的程序员,这家伙一定是穿越回来的!
    MySQL中的视图、索引以及事务的简单使用
  • 原文地址:https://blog.csdn.net/YUANIAN2020/article/details/126876380