OLAP
OLAP
是 OnLine Analytical Processing
的缩写,即联机分析处理。OLAP
对业务数据执行多维分析,并提供复杂计算、趋势分析和复杂数据建模的能力。OLAP
主要用于支持企业决策管理分析,是许多商务智能(BI)应用程序背后的技术。OLAP
使最终用户可以对多个维度的数据进行即席分析,从而获取他们所需知识,以便更好地制定决策。OLAP
技术已被定义为实现 “ 快速访问共享的多维信息 ” 的能力。业务其实是一个多维活动。企业通过考虑许多变量来跟踪其业务活动,在电子表格上跟踪这些变量时,将它们设置在x
轴 和 y
轴上。
例如,可以在一年的时间内按月跟踪销售额,其中可以在y轴上显示销售指标,而在x轴上可以显示月份。而要分析业务的健康状况并计划未来的活动,必须连续跟踪许多变量组或参数。
例如,一个业务至少要考虑以下方面:客户,地点,期间,销售人员和产品。这些维度构成了公司计划,分析和报告活动的基础。它们共同代表了“整个”业务状况,为所有业务计划、分析和报告活动奠定了基础。
OLAP
的起源OLAP
这个名词最早是在1993年,由被称为 “ 关系数据库之父 ” 的Edgar F. Codd在他的白皮书《Providing OLAP to User-Analysts: An IT Mandate》
中首次提出的。在这个白皮书中,他为OLAP
产品建立了12
条评估规则:
多维概念视图(Multidimensional Conceptual View):
在用户分析师看来,企业相关数据天然是多维的。 例如,可以按地区,产品,时间段或方案(例如实际,预算或预测)查看利润。多维数据模型使用户能够更直接,更直观地处理数据,包括“分片和分块”。透明性准则(Transparency):
OLAP应该是开放系统体系结构的一部分,该体系结构可以嵌入到用户期望的任何位置,而不会影响宿主工具的功能。不应把OLAP工具的数据源暴露给用户,数据源可能是同构的或异构的。存取能力推测(Accessibility):
OLAP工具应该能够应用自己的逻辑结构来访问异构数据源,并执行向用户呈现连贯视图所需的任何转换。工具(而不是用户)应关注物理数据的来源。稳定的报表性能(Consistent Reporting Performance):
随着维度数量的增加,OLAP工具的性能不会受到显著影响。客户/服务器架构(Client-Server Architecture):
OLAP工具的服务器组件应该足够通用,各种客户端可以轻松地连接它。服务器应该能够在不同的数据库之间映射和合并数据。维的等同性准则(Generic Dimensionalityc):
每个数据维度的结构和操作能力都应相同。动态的稀疏矩阵处理准则(Dynamic Sparse Matrix Handling):
OLAP服务器的物理结构应具有最佳的稀疏矩阵处理。多用户支持能力准则(Multi-User Support):
OLAP工具必须提供并发检索和更新访问,完整性和安全性。非受限的跨维操作(Unrestricted Cross-dimensional Operations):
计算设施必须允许跨任意数量的数据维度进行计算和数据处理,并且不得限制数据单元之间的任何关系。直观的数据操作(Intuitive Data Manipulation):
合并路径中固有的数据操作,例如向下钻取或缩小,应通过对分析模型单元的直接操作来完成,而不需要使用菜单或跨用户界面多次行程。灵活的报告生成(Flexible Reporting):
报告工具应以用户想要查看的任何方式显示信息。不受限的维度和聚合层次(Unlimited Dimensions and Aggregation Levels)
OLAP
的发展历史虽然OLAP的概念是在1993年才提出来的,但是支持OLAP相关产品的发展历史,最早可追溯到1975年
立方体(Cube):
由维度构建出来的多维空间,包含了所有要分析的基础数据,所有的聚合数据操作都在立方体上进行。这里所说的立方其实就是多维模型中间的事实表(Fact Table),它会引用所有相关维的维主键作为自身的联合主键,加上度量(Measure)和计算度量(Calculated Measure)就组成了立方的结构。维度(Dimension):
维度是描述与业务主题相关的一组属性,单个属性或属性集合可以构成一个维。如时间、地理位置、年龄和性别等都是维度。维度可以理解为立方体的一个轴。要注意的是有一个特殊的维度,即度量值维度。维的层次(Level of Dimension):
一个维往往可以具有多个层次,例如时间维度分为年、季度、月和日等层次,地区维可以是国家、地区、省、市等层次。这里的层次表示数据细化程度,对应概念分层。后面介绍的上卷操作就是由低层概念映射到高层概念。概念分层除了可以根据概念的全序和偏序关系确定外,还可以通过对数据进行离散化和分组实现。维的成员(Member of Dimension):
构成维度的基本单位,若维是多层次的,则不同的层次的取值构成一个维成员。部分维层次同样可以构成维度成员,例如“某年某季度”、“某季某月”等都可以是时间维的成员。度量(Measure):
表示事实在某一个维成员上的取值。度量是用于描述事件的数字尺度,例如开发部门汉族男性有39人,就表示在部门、民族、性别三个维度上,企业人数的事实度量。计算度量是通过度量计算得到的。事实表(Fact Table):
存放度量值的表,同时存放了维表的外键。所有的分析用的数据最终都是来自与事实表。维表(Dimension table):
一个维度对应一个或者多个维表。一个维度对应一个维表时数据的组织方式就是采用的星型模式,对应多个维表时就是采用雪花模式。雪花模式是对星型模式的规范化。简言之,维表是对维度的描述。OLAP的操作是查询
,也就是数据库的 SELECT 操作为主,但是查询可以很复杂,比如基于关系数据库的查询可以多表关联,可以使用COUNT、SUM、AVG 等聚合函数。OLAP 正是基于多维模型定义了一些常见的面向分析的操作类型是这些操作显得更加直观。
OLAP的多维分析操作包括:钻取(Drill-down)、上卷(Roll-up)、切片(Slice)、切块(Dice)以及旋转(Pivot)
,下面还是以数据立方体为例来逐一解释下:
在维的不同层次间的变化,从上层降到下一层,或者说是将汇总数据拆分到更细节的数据,
比如通过对2010年第二季度的总销售数据进行钻取来查看第二季度4、5、6每个月的消费数据,
如下图;当然也可以钻取北京市来查看朝阳区、海淀区、大兴……这些区的销售数据。
钻取的逆操作,即从细粒度数据向高层的聚合,如将北京、上海和深圳的销售数据进行汇总来查看京沪深地区的销售数据,如下图。
选择维中特定的值进行分析,比如只选择书籍产品的销售数据。
与切片类似,只是将单个特定值变成多个特定值,比如选择书籍和服装的销售数据。
即维的位置的互换,就像是二维表的行列转换,如图中通过旋转实现产品维和地域维的互换。
OLAP
的分类按数据存储方式(建模类型)分类,可分为 MOLAP、ROLAP、HOLAP
等。
MOLAP:Multidimensional (多维的 )OLAP
OLAP
是OLAP
的经典形式。MOLAP
将数据存储在优化的多维数组中,而不是关系数据库中。
维的属性值被映射成多维数组的下标值或下标的范围,而度量数据作为多维数组的值存储在数组的单元中。
由于MOLAP
采用了新的存储结构,从物理层实现,因此又称为物理OLAP(PhysicalOLAP
)。
一些MOLAP
工具要求对数据进行预计算和存储,这样的MOLAP
工具通常利用被称为 “数据立方体” 的预先计算的数据集。
数据立方体
包含给定范围的问题的所有可能答案。因此,它们对查询的响应非常快。另一方面,根据预计算的程度,更新可能需要很长时间。预计算也可能导致所谓的数据爆炸。
ROLAP:Relational (关系型) OLAP
。
ROLAP
将分析用的多维数据存储在关系数据库中。这种方式依赖SQL
语言实现传统OLAP
的切片和切块功能,本质上,切片和切块等动作都等同于在SQL
语句中添加“ WHERE
”子句。
ROLAP
工具不使用预先计算的多维数据集,而是对标准关系数据库及其表进行查询,以获取回答问题所需的数据。
ROLAP
工具具有询问任何问题的能力,因为该方法(SQL
)不仅限于多维数据集的内容。
尽管ROLAP
使用关系数据库作为底层存储,但这些数据库一般要针对ROLAP
进行相应优化,比如并行存储、并行查询、并行数据管理、基于成本的查询优化、位图索引、SQL
的OLAP
扩展(cube,rollup
)等等。
专为OLTP
设计的数据库不能像ROLAP
数据库一样正常工作。
ROLAP
主要通过一些软件工具或中间软件实现,物理层仍采用关系数据库的存储结构,因此称为虚拟OLAP(VirtualOLAP)
。
HOLAP:Hybrid(混合型) OLAP
。
HOLAP
被为了使用一种 OLAP 工具解决 MOLAP和ROLAP 两者的缺点而提出的
。
HOLAP工具通过允许同时使用多维数据库(MDDB)和关系数据库(RDBMS)作为数据存储来弥合这两种产品的技术差距
。
HOLAP允许模型设计者决定将哪些数据存储在MDDB中,哪些存储在RDBMS中
, 例如,将大量详单数据存储在关系表中,而预先计算的聚合数据存储在多维数据集中。
目前整个行业对于“混合OLAP”的还没有达成明确的共识。
它是基于Web浏览器的技术。
三层体系结构
,由客户端,中间件和数据库服务器组成
。客户端方面的投资大大减少,并且增强了连接数据的可访问性
。DOLAP代表桌面分析处理
。MOLAP是一种无线功能或移动设备。
对比项 | MOLAP | ROLAP |
---|---|---|
存储方式 | 专为OLAP设计和优化的存储,支持多维索引和缓存。 | 沿用现有的关系数据库的技术。 |
查询性能 | 具有较高的查询性能,响应速度快。 | 响应速度一般比MOLAP慢。 |
数据装载 | 数据装载速度慢。 | 加载速度通常比MOLAP加载要快得多。 |
维数限制 | 需要进行预计算,可能导致数据爆炸,维数有限制。 | 存储空间耗费小,维数没有限制。 |
访问接口 | 缺乏数据模型和数据访问的标准接口。 | 可以通过SQL实现详细数据与汇总数据的查询。 并且可以由任何SQL报告工具访问。 |
冗余存储 | MOLAP方法引入了数据冗余。 | 没有冗余数据。可与数据仓库共享同一份数据。 |
计算支撑 | 支持高性能的决策支持计算。 | 由于依赖数据库来执行计算,因此专用功能上有更多限制。 |
操作维护 | 维护困难 | 管理简便 |
两者设计的目标是完全不同的:
OLTP(On-Line Transaction Processing)
,联机事务处理,一般用于业务系统。OLTP对事务性处理的要求非常高,一般都是高可用的在线系统,主要基于传统的关系型数据库
。其上的应用,一般以小的事务以及小的查询为主
。评估其系统的时候,一般看其每秒执行的Transaction以及SQL的数量。在这样的系统中,单个数据库每秒处理的Transaction(增、删、改)往往达到几百上千个,Select查询语句的执行量每秒几千甚至几万个
。OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作。
典型的OLTP系统有电子商务系统、银行交易系统、证券交易系统等。OLAP
,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。一般用于分析系统。强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。其上的应用。一般以大数据量的查询为主,修改和删除的操作较少
。在这样的系统中,SQL语句的执行量不是考核指标,因为一条语句的执行时间可能会很长,读取的数据也非常多。所以,评估其系统的时候,往往是看系统的吞吐量、复杂查询响应时间、数据装载性能等。磁盘子系统的吞吐量则往往取决于磁盘的个数,这个时候,Cache基本是没有效果的,数据库的读写类型基本上是db file scattered read与direct path read/write。应尽量采用个数比较多的磁盘以及比较大的带宽,如4Gb的光纤接口。OLTP | OLAP | |
---|---|---|
用户 | 操作人员 | 数据分析师、业务分析师、决策人员、高管 |
目的 | 操作处理,支持基本业务运行 | 发现和分析问题,支持决策 |
设计 | 面向应用,如银行业、零售业 | 面向主题,如销售、库存 |
特点 | 处理大量的小交易 | 使用复杂查询处理大量数据 |
数据内容 | 当前的、最新的业务交易数据 | 历史的、聚集的、统一的多维数据 |
查询类型 | 简单的、标准化的查询 | 复杂查询 |
数据操作 | 频繁的增、删、改操作;读取数据量不大 | 很少修改和删除操作;以读为主,读取数据量大。 |
时间要求 | 实时性要求高,通常是毫秒级 | 时间要求不严格,根据数据查询量,可以是秒级、分钟级甚至小时级 |
空间要求 | 通常较小,MB到GB级 | 由于要聚合大量数据,通常较大,GB到PB级 |
模型设计 | 为了保证数据修改的原子性,通常是规范化的数据模型,至少满足第三范式。 | 为了查询性能,通常是非规范化的数据模型 |
存储格式 | 修改操作频繁,通常是行存储 | 查询数据量大,通常是列式存储 |
主要应用 | 数据库 | 数据仓库 |
Cache决定了很多语句不需要从磁盘子系统获得数据,所以,Web cache与Oracle data buffer对OLTP系统是很重要的。另外,在索引使用方面,语句越简单越好,同时因为并发量很高,批量更新时要分批快速提交,以避免阻塞的发生。 这样执行计划也稳定 . 所以需要注意以下几点:
OLTP 系统是一个数据块变化非常频繁,SQL 语句提交非常频繁的系统。对于数据块来说,应尽可能让数据块保存在内存当中,对于SQL来说,尽可能使用变量绑定技术来达到SQL重用,减少物理I/O 和重复的SQL解析,从而极大的改善数据库的性能。这里影响性能除了绑定变量,还有可能是热快(hot block)。 当一个块被多个用户同时读取时,Oracle为了维护数据的一致性,需要使用Latch来串行化用户的操作。当一个用户获得了latch后,其他用户就只能等待,获取这个数据块的用户越多,等待就越明显。这就是热快的问题。 这种热快可能是数据块,也可能是回滚端块。对于数据块来讲,通常是数据库的数据分布不均匀导致,如果是索引的数据块,可以考虑创建反向索引来达到重新分布数据的目的,对于回滚段数据块,可以适当多增加几个回滚段来避免这种争用。
分区技术
在OLAP系统中的重要性主要体现在数据库管理上,比如数据库加载,可以通过分区交换的方式实现,备份可以通过备份分区表空间实现,删除数据可以通过分区进行删除,至于分区在性能上的影响,它可以使得一些大表的扫描变得很快(只扫描单个分区)。另外,如果分区结合并行的话,也可以使得整个表的扫描会变得很快。总之,分区主要的功能是管理上的方便性,它并不能绝对保证查询性能的提高,有时候分区会带来性能上的提高,有时候会降低。
并行技术
除了与分区技术结合外,在Oracle 10g中,与RAC结合实现多节点的同时扫描,效果也非常不错,可把一个任务,如select的全表扫描,平均地分派到多个RAC的节点上去。
在OLAP系统中,不需要使用绑定(BIND)变量,因为整个系统的执行量很小,分析时间对于执行时间来说,可以忽略,而且可避免出现错误的执行计划。但是OLAP中可以大量使用位图索引,物化视图,对于大的事务,尽量寻求速度上的优化,没有必要像OLTP要求快速提交,甚至要刻意减慢执行的速度。
绑定变量真正的用途是在OLTP系统中,这个系统通常有这样的特点,用户并发数很大,用户的请求十分密集,并且这些请求的SQL 大多数是可以重复使用的。
对于OLAP系统来说,绝大多数时候数据库上运行着的是报表作业,执行基本上是聚合类的SQL 操作,比如group by,这时候,把优化器模式设置为all_rows是恰当的。 而对于一些分页操作比较多的网站类数据库,设置为first_rows会更好一些。 但有时候对于OLAP 系统,我们又有分页的情况下,我们可以考虑在每条SQL 中用hint。 如:
Select a.* from table a;
分开设计与优化
在设计上要特别注意,如在高可用的OLTP环境中,不要盲目地把OLAP的技术拿过来用。
如分区技术,假设不是大范围地使用分区关键字,而采用其它的字段作为where条件,那么,如果是本地索引,将不得不扫描多个索引,而性能变得更为低下。如果是全局索引,又失去分区的意义。
并行技术也是如此,一般在完成大型任务时才使用,如在实际生活中,翻译一本书,可以先安排多个人,每个人翻译不同的章节,这样可以提高翻译速度。如果只是翻译一页书,也去分配不同的人翻译不同的行,再组合起来,就没必要了,因为在分配工作的时间里,一个人或许早就翻译完了。
位图索引也是一样,如果用在OLTP环境中,很容易造成阻塞与死锁。但是,在OLAP环境中,可能会因为其特有的特性,提高OLAP的查询速度。MV也是基本一样,包括触发器等,在DML频繁的OLTP系统上,很容易成为瓶颈,甚至是Library Cache等待,而在OLAP环境上,则可能会因为使用恰当而提高查询速度。
对于OLAP系统,在内存上可优化的余地很小,增加CPU 处理速度和磁盘I/O 速度是最直接的提高数据库性能的方法,当然这也意味着系统成本的增加。
比如我们要对几亿条或者几十亿条数据进行聚合处理,这种海量的数据,全部放在内存中操作是很难的,同时也没有必要,因为这些数据快很少重用,缓存起来也没有实际意义,而且还会造成物理I/O相当大。 所以这种系统的瓶颈往往是磁盘I/O上面的。
对于OLAP系统,SQL 的优化非常重要,因为它的数据量很大,做全表扫描和索引对性能上来说差异是非常大的。
数据仓库建设好以后,用户就可以编写SQL语句对其进行访问并对其中数据进行分析。但每次查询都要编写SQL语句的话,未免太麻烦,而且对维度建模数据进行分析的SQL代码套路比较固定。于是,便有了OLAP工具,它专用于维度建模数据的分析。在规范化数据仓库中OLAP工具和数据仓库的关系大致是这样的:
这种情况下,OLAP不允许访问中心数据库。一方面中心数据库是采取规范化建模的,而OLAP只支持对维度建模数据的分析;另一方面规范化数据仓库的中心数据库本身就不允许上层开发人员访问。
数据仓库的建模方式有多种:
ER模型,全称为实体联系模型、实体关系模型或实体联系模式图(ERD)(英语:Entity-relationship model)由美籍华裔计算机科学家陈品山发明,是概念数据模型的高层描述所使用的数据模型或模式图。 [1]
ER模型常用于信息系统设计中;比如它们在概念结构设计阶段用来描述信息需求和/或要存储在数据库中的信息的类型。但是数据建模技术可以用来描述特定论域(就是感兴趣的区域)的任何本体(就是对使用的术语和它们的联系的概述和分类)。在基于数据库的信息系统设计的情况下,在后面的阶段(通常叫做逻辑设计),概念模型要映射到逻辑模型如关系模型上;它依次要在物理设计期间映射到物理模型上。注意,有时这两个阶段被一起称为“物理设计”。
实体联系模式图(ERD)有一些约定。本文的余下部分描述经典概念,并且主要与概念建模有关。有一些概念更加典型的在逻辑和物理数据库设计中采用,包括信息工程、IDEF1x(ICAM DEFinition Language)和空间建模。
Data Vault
是一种数据仓库建模方法,最早由Dan Linstedt在20世纪90年代提出,主要应用于企业级数据仓库建模。Data Vault模型主要用于存储来自多个业务系统的完整的历史数据
。它不区分数据在业务层面的准确与否,装载数据也不做验证和清洗,因此,Data Vault模型可用于跟踪所有数据的来源
。Anchor模型
是对Data Vault模型做了进一步规范化处理
,设计初衷是设计一个高度可扩展的模型,其核心思想是所有的扩展只是添加而不是修改
,因此将模型规范到6NF,基本上变成了k-v结构化模型。
前面三种模型主要致力将各个业务系统中的数据整合到统一的数据仓库中,并进行一致性处理,提供满足第三范式或更高范式的数据模型和原子数据。这种数据仓库被称为CIF(Corporate Information Factory,企业信息工厂)架构下的企业数据仓库
。这种数据仓库架构是数据仓库之父Inmon所推崇的。但由于使用了规范化模型,这使得对这些原子数据进行查询变得很困难,这种架构并不能很好地直接用于支撑分析决策。为了更好的支持分析,在这种架构下,通常需要在数据仓库的基础上,按主题建立一些数据子集,也就是数据集市。这些数据集市通常采用维度模型,OLAP工具就可以基于数据集市而工作。数据集市通常就是基于OLAP系统而构建。
维度建模从分析决策的需求出发构建模型,为分析需求服务,因此它重点关注用户如何更快速的完成需求分析,同时具有较好的大规模复杂查询的响应性能
。其典型的代表是星形模型,以及在一些特殊场景下使用雪花模型。
维度模型另一位数据仓库领域的大师Kimball提出的,是目前数据仓库领域最流行的建模方式。维度模型可以很好地支撑分析决策需求,同时还有较好的大规模复杂查询的响应性能。维度模型可以直接使用OLAP工具与其对接。Kimball所推崇的数据仓库架构如下,基于这种架构建立的数据仓库,可以直接提供OLAP能力。这样建立的数据仓库本身也就成为了一个OLAP系统。
最流行的数据仓库概念是多维数据模型。这种模型可以以星型模式,雪花模式,或事实星座模式的形式存在。
星型模式(Star schema):
雪花模式(Snowflake schema):
事实星座(Fact constellations):
BI是Business Intelligence的英文缩写,中文解释为商务智能,是利用数据提高决策质量的技术集合,是从大量的数据中钻取信息与知识的过程。OLAP和BI常常在一起出现,OLAP是BI工具的一种底层技术。BI工具通常可以对接OLAP系统,但不限于此,也可以直接与其他数据库、存储系统对接。在维度建模数据仓库中,OLAP/BI工具和数据仓库的关系则是这样的:
Ad hoc是一个拉丁文常用短语,意思是“特设的、特定目的的(地)、临时的、专案的”。即席查询(Ad Hoc Queries)是指用户根据自己的需求动态创建的查询,与预定义查询相反。
即席查询对数据模型没有要求,只要能提供动态查询的能力即可;而OLAP系统,一般要求数据模型是多维数据模型。对于ROLAP系统,通常都能提供即席查询能力,二者之间差别很小,所以经常混用。