Olap理论基础

96
零度沸腾_yjz
2018.11.09 12:15* 字数 2668

OLTP和OlAP

数据处理大致可分为两大类:联机事务处理OLTP(On-Line Transaction Processing)和联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统关系型数据库的主要应用,侧重于基本的、日常的事务处理,比如银行系统。OLAP是数据仓库的主要应用,支持复杂的分析操作,侧重于决策支持,并且提供通俗易懂的查询结果。

OLTP重点在于事务处理,比如银行转账,AB两个账户操作要么都成功、要么都失败。OLTP的业务特点是数据量少、并行处理事务多、DML操作频繁、对响应速度要求高。对于OLTP常用的优化操作主要是Cache技术和B-tree索引技术。

OLAP重点是对数据的分析汇总,比如我们每天看的各种报表,是对前一天数据的各种汇总,并且从多个维度去分析。OLAP的业务特点是吞吐量非常高,并且需要多个大表进行聚合操作。对于OLAP常用的优化操作主要是分区技术和并行技术。

OLTP和OLAP对比
OLTP和OLAP对比

OLAP基础

联机分析处理(Online Analytical Processing,OLAP)技术是快速响应多维分析(Multidimensional Analytical,MDA)的一种解决方案。

多维分析

多维分析是一种数据的分析过程,在这个过程中会将数据分为两类:维度(dimensions)和度量/指标(metris/index)。维度是指数据的属性,比如“城市”就是一个维度,用于衡量各指标在各个城市的数据量,维度一般是用来作为约束条件的离散数值。指标是量化数据的衡量标准,比如“交易额”这个指标,用于表示商店实际的交易额。这时候“城市”维度+“交易额”指标就能给出各个城市的交易额分布了。

OLAP分类

常见的OLAP系统可以分为三类:ROLAP(Relational-OLAP,关系型联机分析处理)、MOLAP(Multidimensional-OLAP,多维联机分析模型)和HOLAP(Hybrid-OLAP,混合型联机分析处理)。

ROLAP

ROLAP的核心是关系型数据库,允许用户使用维度模型(见下面)进行数据分析,将维度值存储在维度表中,将度量值/指标存储在实时表中,然后通过关系型数据库使用SQL进行访问。ROLAP的一般使用模式是,根据用户的需求,对不同维度进行分析后,将数据存储到关系型数据库中。

MOLAP

MOLAP是OLAP的经典使用模式,但是使用人数上相较于ROLAP要少很多。MOLAP和ROLAP一样,二者都可以使用维度模型进行数据分析。与ROLAP不同的是,MOLAP不将数据存储在维度表或实时表中,而是对原始数据进行预计算(比如聚合操作),然后将数据存储在OLAP的cube(见下面 )中。

因为MOLAP不采用关系型数据库存储,所以必须采用特殊的存储手段,比如压缩、索引(如位图索引)以及缓存技术,这样使得MOLAP相较于ROLAP查询效率更高。

HOLAP

HOLAP是集成了ROLAP和MOLAP各自优势,即允许用户将数据(比如聚合数据)使用MOLAP进行存储,从而获得更快的查询效率。又允许用户使用ROLAP存储(比如明细数据,原始数据),使用户能够查看更细粒度的数据。

这样,HOLAP可以利用MOLAP存储热数据,使用ROLAP存储历史冷数据。目前业界研发和使用比较流行的就是HOLAP。

Data cube

Data cube(数据立方体)在数据库理论中定义为:RDBMS关系映射的一种抽象。简单说就是通过多个维度确定的一个空间,称为cube。比如x,y,z代表坐标轴中三轴,w代表由(x,y,z)所映射的数据集合,像(x,y,z)这样一个元组,我们就称为一个cube。

下图就是由Category、Time和Product这个三个维度组成的三维空间,三维空间所确定的一个立方体称为一个cube(注意整个立方体称为一个cube)。

cube
cube

数据立方体(Data Cube)只是OLAP多维分析的一个形象的说法,因为立方体只有三维,而多维模型是不限于三维的,之所以称为cube是因为这样我们可以是我们更容易理解cube的概念。

OLAP基本分析操作

OLAP帮助用户从多种角度分析多维数据,主要操作分为五种:上卷(roll-up)、下钻(drill-down)、切片(slice)、切块(dice)和旋转(pivot)。

上卷(Roll-up)

上卷表示沿着某一维度按照一定规则聚合的操作,也就是从细粒度数据向高层聚合。比如把江苏省、上海市、浙江省的数据进行汇总,可以看到江浙沪区的销售量。

image
image

下钻(Drill-down)

下钻和上卷正好相反,用于用户从以聚合的数据中找出它们所有关注的细节数据。也就是从聚合数据中,拆分更细粒度的数据。比如从全年销售量中,拆分出4、5、6月份数据查看。也可以对浙江省进行下钻,看浙江省下各个市的销售量。

image
image

切片(Slice)

切片表示从某个维度选择特定的维值,从OLAP cube中取出一个分片的过程。也就是选择特定的维值进行分析。比如商品中选择电子产品维值,来分析销售量。

image
image

切块(Dice)

切块表示通过选择维度的某些值(或者区间),从OLAP cube中抽取出子cube的过程。也就是分析区间维值或某批特定维值进行分析。比如选取一年中第一季度和第二季度销售数据进行分析。

image
image

旋转(Pivot)

旋转是指允许用户通过旋转OLAP cube,重新选择分析维度,它的表现形式为交换坐标轴的操作。比如将产品维和地域维进行互换。

image
image

从上面的操作来看,可以知道OLAP是基于数据仓库多维模型的基础上实现的面向分析的各类操作集合。OLAP上的操作主要以查询为主,也就是对应数据库中的SELECT操作,但是查询可以很复杂,比如进行多表关联,使用COUNT、SUM、AVG等聚合操作。OLAP正是基于多维模型定义了一些常见面向分析的操作类型,使这些操作显得更加直观。

维度模型

OLAP只是一个系统,接受数据处理数据,那么OLAP系统一般接收什么样的数据?

维度模型的概念出自于数据仓库,是数据仓库中一种数据建模的方法。维度模型主要由事实表和维表这两类表组成。

事实表用于存储度量值(指标),术语“事实”代表了一个度量值。比如交易额事实表中,在各个维度值的交点就可以得到一个度量值。维度值的列表定义了事实表的粒度,同时又确定了度量值的取值范围。事实表的一行对应一个度量值,事实表的所有度量值必须具有相同的粒度。

事实表有可能是半加性质或非加性质的。这个半加性质的含义就是指事实表度量值可以沿着某些子维度向父维度聚合,比如所有城市维度向上推,可以得到全国维度下的交易额。非加型事实表则完全不能相加,比如状态事实表,这种非加性事实表只能用于计数或者求平均值。

事实表中有两类数据, 一类是度量值,另一类就是维度值。所以在实时表中,一般只要有2个或以上的外关键字,外关键字用于连接到维度表的主关键字。如果事实表中的所有关键字都能分别与对应的维表中的关键字正确匹配,就可以说这些表满足引用完整性要求。事实表通过与之关联的维度表进行存取。

事实表
事实表

维度表是事实表不可分割的一部分,维度表用于存储数据属性,维度表一般包含了业务的文字组描述。每个维度表用单一关键字进行定义,主关键字是确保与事实表引用完整性的基础。维度表是进入事实表的入口,丰富的维度属性提供了丰富的分析切割能力。可以理解维度为用户提供的数据仓库的接口。

通过事实表和维度组成的维度模型,从形式上分为:星型模型和雪花模型。上面就是一个星型模型,一个实时表通过维度外键与多个属性表关联。而雪花模型可以看做是星型模型的扩展,表现形式是在维度表中,某个维度属性可能存在更细粒度的属性描述,也就是维度的层级关系。

参考链接

https://en.wikipedia.org/wiki/Online_analytical_processing

https://www.cnblogs.com/hhandbibi/p/7118740.html

https://www.cnblogs.com/andy6/p/6011959.html

https://www.cnblogs.com/mq0036/p/4155832.html

http://webdataanalysis.net/web-data-warehouse/multidimensional-data-model/

http://webdataanalysis.net/web-data-warehouse/data-warehouse-frame/

关注我

欢迎关注我的公众号,会定期推送优质技术文章,让我们一起进步、一起成长!
公众号搜索:data_tc
或直接扫码:🔽


欢迎关注我
技术人生