时间:2022-12-20 14:30:02 | 来源:信息时代
时间:2022-12-20 14:30:02 来源:信息时代
多维数组 : 维和变量的组合表示,是多维数据模型的一种数据存储形式。其中,变量是从现实系统中抽象出来的,用于描述数据的实际意义,即描述数据“是什么”(人数、单价、销售额等)。变量都有一定的取值范围,比如“人数”的取值范围是“大于等于零的整数”。取值范围实际上是具体问题对变量的约束。一个多维数组可以表示为:(维1,维2,…,维n,变量),比如: 商品销售数据是按时间、地区和产品组织起来的三维立方体,加上变量“销售额”,就组成了一个多维数组(时间,地区,产品,销售额)。
数据单元(单元格)是多维数组的取值。当多维数组的各个维都选中一个维成员,这些维成员的组合就唯一确定了一个变量的值,比如: (2004年3月, 昆明, 笔记本电脑, 80000)。
在RDBMS中,数据总是以关系表的方式来组织。在多维数据模型中,数据将以多维方式来组织,并以多维数组方式来存储。通过“维”,多维数组直观地表达了客观世界中的“一对多”、“多对多”的关系。比如,企业各个产品在各个地区销售量的关系在多维表中能够直观地表现出来。
而在关系数据库中,“多对多”的关系总是转化成多个“一对多”的关系,这种转化有利于数据的一致性和规范化,这符合事务处理系统的需求,但是这种方式并不能直观地反映人们对事物的感知。
除了直观上的差异,同多维数组相比,对于同样的数据,关系表需要更多的表项和存储空间。对于需要处理大量数据的OLAP来说,应当选择对存储容量需求较小的方式——多维数组。
在OLAP中需要使用多种综合层次的数据,因此对数据进行聚合(求和)处理是非常普遍的,如果使用关系表求和,比如求所有产品在东北区的总销量,需要首先选择各种产品在东北区销售的相关条目,然后求和,这样大大增加了系统的响应时间,对于大数据量的处理,这个问题将更加严重。
如果使用多维数组进行求和,由于多维数组本身就是按照维度组织的,因此只需将东北对应的一列求和即可。同理,如果要统计各个产品的总销售量,只需将多维表中的横向条目相加即可。利用多维数组还可以进行多个层次的求和。如将冰箱的销售总和同彩电的销售总和相加,就可得到这两个产品的总销售量。至此,可以看出多维数组在进行多层次数据统计上的优越性。
在实际OLAP系统中,可采用“空间换时间”的技术。
若对关系表也采用“空间换时间”技术,即将决策分析人员所需的综合数据都预先统计出来,存放在数据库中。例如,可以在关系数据库的表中加上一行总和的记录。在这张关系表中,由于预先对产品在各地区的销售量进行了求和(综合),查询时就不用再进行计算了。如果所求的所有总和都已经被综合的话,只要读取单个记录就可以回答按产品(或按地区)求和的问题了。这样处理似乎可以得到快速一致的查询响应。但事实上,“总和”项破坏了关系表中列定义的统一语义,例如地区列中的值表示的是地区名称,而“总和”就成为一个例外。查询时用户必须了解这种约定。
综上所述,多维数组的优势不仅在于多维概念表达清晰,占用存储少,更重要的是它有着高速的综合速度。在多维数组中,数据可以直接按行或列累加,并且由于多维数组中不像关系表那样重复的出现产品和地区信息,因此其统计速度远远超过RDBMS,数据库记录数越多,其效果越明显。