OLAP 简介(下) (数据仓库基础)
?
五、联机分析处理的实现方式 ????? 其中,前端展示联机分析需要将所有数据下载到客户机上,然后在客户机上进行数据结构/报表格式重组,使用户能在本机实现动态分析。该方式比较灵活,然而它能够支持的数据量非常有限,严重地影响了使用的范围和效率。因此,随着时间的推移,这种方式已退居次要地位,在此不作讨论。 ????? 以下就ROLAP和MOLAP的具体实施方法进行讨论: ????? 1、关系型联机分析处理的具体实施方法: ????? 顾名思义,关系型联机分析处理是以关系型数据库为基础的。唯一特别之处在于联机分析处理中的数据结构组织的方式。 ????? 让我们考察一个例子,假设我们要进行产品销售的财务分析,分析的角度包括时间、产品类别、市场分布、实际发生与预算四方面内容,分析的财务指标包括:销售额、销售支出、毛利(=销售额-销售支出)、费用、纯利(=毛利-费用)等内容,则我们可以建立如下的数据结构: ?????? 该数据结构的中心是主表,里面包含了所有分析维度的外键,以及所有的财务指标,可计算推导的财务指标不计在内,我们称之为事实表(Fact Table)。周围的表分别是对应于各个分析角度的维表(Dimension Table),每个维表除了主键以外,还包含了描述和分类信息。无论原来的业务数据的数据结构为何,只要原业务数据能够整理成为以上模式,则无论业务人员据此提出任何问题,都可以用SQL语句进行表连接或汇总(table join and group by)实现数据查询和解答。(当然,有一些现成的ROLAP前端分析工具是可以自动根据以上模型生成SQL语句的)。这种模式被称为星型模式(Star-Schema),可应用于不同的联机分析处理应用中。 ????? 以下是另一个采用星型模式的例子,分析的角度和指标截然不同,但数据结构模式一样。我们看到的不是表的数据,而是表的结构。在联机分析处理的数据模型设计中,这种表达方式更为常见: ?????? 有时候,维表的定义会变得复杂,例如对产品维,既要按产品种类进行划分,对某些特殊商品,又要另外进行品牌划分,商品品牌和产品种类划分方法并不一样。因此,单张维表不是理想的解决方案,可以采用以下方式,这种数据模型实际上是星型结构的拓展,我们称之为雪花型模式(snow-flake schema). 无论采用星型模式还是雪花型模式,关系型联机分析处理都具有以下特点: ????? · 数据结构和组织模式需要预先设计和建立; ????? 可以采取对常用汇总数据建立汇总表,对不常用的汇总数据进行Group by 操作,这样来取得性能和管理复杂度之间的均衡。 ????? 2、多维联机分析处理的具体实施方法: ????? 多维联机分析处理实际上是用多维数组的方式对关系型数据表进行处理。下图是ROLAP与MOLAP的对比: ????? 图中左边是ROLAP方式,右边是MOLAP方式,两者对应的是同一个三维模型。MOLAP首先对事实表中的所有外键进行排序,并将排序后的具体指标数值一一写进虚拟的多维立方体中。当然,虚拟的多维立方体只是为了便于理解而构想的,MOLAP实际的数据存储放在数据文件(Data File)中,其数据放置的顺序与虚拟的多维立方体按x,y,z坐标展开的顺序是一致的(如上图)。同时,为了数据查找的方便,MOLAP需要预先建立维度的索引,这个索引被放置在MOLAP的概要文件(Outline)中。 ????? 概要文件是MOLAP的核心,相当于ROLAP的数据模型设计。概要文件包括所有维的定义(包括复杂的维度结构)以及各个层次的数据汇总关系(例如在时间维,日汇总至月,月汇总至季,季汇总至年),这些定义往往从关系型维表中直接引入即可。概要文件也包括分析指标的定义,因此可以在概要文件中包含丰富的衍生指标,这些衍生指标由基础指标计算推导出来(例如ROLAP例子1中的纯利和毛利)。概要文件的结构如下图所示: ?????? 一旦概要文件定义好,MOLAP系统可以自动安排数据存储的方式和进行数据查询。从MOLAP的数据文件与ROLAP的事实表的对比可以看出,MOLAP的数据文件完全不需要纪录维度的外键,在维度比较多的情况下,这种数据存储方式大量地节省了空间。 ????? 但是,如果数据相当稀疏,虚拟的多维立方体中很多数值为空时,MOLAP的数据文件需要对相关的位置留空,而ROLAP的事实表却不会存储这些纪录。为了有效地解决这种情况,MOLAP采用了稀疏维和密集维相结合的处理方式,如下图。 ?????? 上图的背景是某些客户只通过某些分销渠道才购买,但是只要该客户存在,他在各个月和各个地区内均有消费(例如,华南IBM只通过熊猫国旅定购南航机票,但在华南四省在每个月均有机票订购)。则时间和地区维是密集维,客户和分销渠道是稀疏维,MOLAP将稀疏维建成索引文件(Index File),密集维所对应的数值仍然保留在数据文件中,索引文件不存储空纪录。这样保持了对空间的合理利用。我们也可以看到,如果所有维都是稀疏维,则MOLAP的索引文件就退化成ROLAP的事实表, 两者没有区别了。 ????? 在实际应用中,不可能所有分析的维度都是密集的,也绝少存在所有分析的维度都是稀疏的,因此稀疏维和密集维并用的模式几乎主导了所有的MOLAP应用。而稀疏维和密集维的定义全部集中在概要文件中,因此,只要预先定义好概要文件,所有的数据分布就自动确定了。 ????? 在这种模式中,密集维的组合组成了的数据块(Data Block),每个数据块是I/O读写的基础单位(如上图),所有的数据块组成了数据文件。稀疏维的组合组成了索引文件,索引文件的每一个数据纪录的末尾都带有一个指针,指向要读写的数据块。因此,进行数据查询时,系统先搜索索引文件纪录,然后直接调用指针指向的数据块进行I/O读写(如果该数据块尚未驻留内存),将相应数据块调入内存后,根据密集维的数据放置顺序直接计算出要查询的数据距离数据块头的偏移量,直接提取数据下传到客户端。因此,MOLAP 方式基本上是索引搜索与直接寻址的查询方式相结合,比起ROLAP的表/索引搜索和表连接方式,速度要快得多。 ????? 多维联机分析处理有以下特点: ????? · 需要预先定义概要文件; ????? 3、其它考虑因素 ????? 联机分析处理其他要素包括假设分析(What-if),复杂计算,数据评估等等。这些因素对用户的分析效用至关重要,但是与ROLAP和MOLAP的核心工作原理的不一定有很紧密的关系,事实上,ROLAP和MOLAP都可以在以上三方面有所建树,只不过实现的方法迥异。因此,这些因素更取决于各个厂商为他们的产品提供的外延功能。对于像IBM的DB2 OLAP Server这样一个成熟的产品来说,这三方面均有独特的优势: ????? 假设分析 ????? 假设分析提出了类似于以下的问题:"如果产品降价5%,而运费增加8%,对不同地区的分销商的进货成本会有什么影响?"这些问题常用于销售预测、费用预算分配、奖金制度确定等等。据此,用户可以分析出哪些角度、哪些因素的变化将对企业产生重要影响;并且,用户可以灵活调节自己手中掌握的资源(例如费用预算等),将它用到最有效的地方中去。 ????? 复杂计算 ????? 分析人员往往需要分析复杂的衍生数据,诸如:同期对比、期初/期末余额、百分比份额计算、资源分配(按从顶向下的结构图逐级分配)、移动平均、均方差等等。对这些要求,DB2 OLAP Server提供丰富的功能函数以便用户使用。因为只有在无需编程的环境下,商业用户才能更好地灵活利用这些功能进行复杂的真实世界模拟。 ????? 数据评估 ????? 数据评估包括两方面内容,有效性评估和商业意义评估。在有效性评估方面,数据抽取、清洗和转换的规则的定义是至关重要的。而合理的数据模型设计能有效防止无效数据的进入。例如在ROLAP中,如果维表没有采用范式设计(normalise design),可能会接受如下的维表:
|