一篇带你了解OLTP vs. OLAP

大数据 数据仓库
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

背景

随着大数据技术在各行各业的深入应用,对于海量数据的分析需求也愈加凸显,OLAP技术也逐渐走入人们的视野,OLTP和OLAP看起来相似,但指的是不同类型的数据库系统。它们都是在线处理系统。本文将介绍一下二者的区别

OLTP

介绍

OLTP,也叫联机事务处理(Online Transaction Processing),表示事务性非常高的系统,一般都是高可用的在线系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的Transaction以及Execute SQL的数量。在这样的系统中,单个数据库每秒处理的Transaction往往超过几百个,或者是几千个,Select 语句的执行量每秒几千甚至几万个。典型的OLTP系统有电子商务系统、银行、证券等,如美国eBay的业务数据库,关系型数据库(mysql、PostgreSQL、DB2、Oracle...)就是很典型的OLTP数据库。

特点

  • 支持大量并发用户定期添加和修改数据。
  • 反映随时变化的单位状态,但不保存其历史记录。
  • 包含大量数据,其中包括用于验证事务的大量数据。
  • 可以进行优化以对事务活动做出响应。
  • 提供用于支持单位日常运营的技术基础结构。
  • 个别事务能够很快地完成,并且只需访问相对较少的数据。
  • 实时性要求高。
  • 交易一般是确定的,所以OLTP是对确定性的数据进行存取。
  • 并发性要求高并且严格的要求事务的完整、安全性。

OLTP系统

数据库设计要求

  • 良好的数据存储:对于 OLTP 系统,输入/输出瓶颈是一个尤为关心的问题,原因在于修改整个数据库中数据的用户很多。确定数据的可能访问模式,并将经常访问的数据放在一起。在此过程中,可辅以文件组和 RAID系统
  • 支持高并发:在事务期间,避免用户交互。无论何时,只要有可能,就通过执行单个存储过程来处理整个事务。在事务内对表的引用顺序可能会影响并发性。将对经常访问的表的引用置于事务的末尾,以便将控制锁的持续时间减至最短。
  • 数据备份:OLTP 系统一般要求故障率要极地,为达到此目的,停机时间要保持最小。尽管 Microsoft SQL Server 2000 可以在数据库正在使用时对其进行备份,但是应将备份过程安排在活动不频繁时进行,以使对用户的影响减至最小。
  • 数据库高度规范化:尽可能减少冗余信息以提高更新的速度,从而提高并发性。减少数据还可以提高备份的速度,因为只需要备份更少的数据。
  • 减少历史或聚合数据:可以将很少引用的数据归档到单独的数据库中,或者从经常更新的表中移出,这将保持表尽可能地小,从而缩短备份时间,改善查询性能。
  • 合理利用索引:避免对经常更新的表进行过多的索引,应该保持索引范围应较窄。

OLAP

介绍

OLAP(On-line Analytical Processing,联机分析处理)是在基于数据仓库多维模型的基础上实现的面向分析的各类操作的集合,60年代,关系数据库之父E.F.Codd提出了关系模型,促进了联机事务处理(OLTP)的发展(数据以表格的形式而非文件方式存储)。1993年,E.F.Codd提出了OLAP概念,认为OLTP已不能满足终端用户对数据库查询分析的需要,OLAP的优势是基于数据仓库面向主题、集成的、保留历史及不可变更的数据存储,以及多维模型多视角多层次的数据组织形式,如果脱离了这两点,OLAP将不复存在,也就没有优势可言。在实际的商业分析中,OLAP联机分析更多的是指对数据分析的一种解决方案。目前大数据业内非常流行的开源OLAP引擎Hive、SparkSQL、FlinkSQL、Clickhouse、Elasticsearch、Druid、Kylin、Presto、Impala分等,但是可以说目前没有一个引擎能在数据量,灵活程度和性能上做到完美,用户需要根据自己的需求进行选型。

特点

  • 快速性:用户对OLAP的快速反应能力有很高的要求。系统应能在5秒内对用户的大部分分析要求做出反应。
  • 可分析性:OLAP系统应能处理与应用有关的任何逻辑分析和统计分析。
  • 多维性:多维性是OLAP的关键属性。系统必须提供对数据的多维视图和分析,包括对层次维和多重层次维的完全支持。
  • 信息性:不论数据量有多大,也不管数据存储在何处,OLAP系统应能及时获得信息,并且管理大容量信息。

分类

OLAP 是一种让用户可以从不同视角方便快捷地分析数据的计算方法。主流的 OLAP 可以分为3类:多维OLAP ( Multi-dimensional OLAP )、关系型OLAP ( Relational OLAP ) 和混合OLAP ( Hybrid OLAP ) 三大类。

  • 多维OLAP ( MOLAP,Multi-dimensional OLAP ):MOLAP基于直接支持多维数据和操作的本机逻辑模型。数据物理上存储在多维数组中, 并且使用定位技术来访问它们。MOLAP的典型代表是:Druid 和 Kylin。MOLAP一般会根据用户定义的数据维度、度量(也可以叫指标)在数据写入时生成预聚合数据;Query查询到来时,实际上查询的是预聚合的数据而不是原始明细数据,在查询模式相对固定的场景中,这种优化提速很明显。优点性能高,支持复杂的跨维计算与多用户读写,缺点:难以达到TB 级,缺乏数据模型和数据访问的标准
  • 关系型OLAP ( ROLAP,Relational OLAP ):关系OLAP(ROLAP)是中间服务器, 它们位于关系后端服务器和用户前端工具之间,其使用关系或扩展关系DBMS来保存和处理仓库数据, 并使用OLAP中间件来提供丢失的数据。ROLAP的典型代表是:Presto,Impala,GreenPlum,Clickhouse,Elasticsearch,Hive,Spark SQL,Flink SQL。优点:没有大小限制,可以通过SQL实现详细数据与概要数据的存储,缺点:不支持有关预计算的读写操作,无法完成维之间的计算。
  • 混合OLAP ( HOLAP,Hybrid OLAP ):混合 OLAP,是 MOLAP 和 ROLAP 的一种融合。当查询聚合性数据的时候,使用MOLAP 技术;当查询明细数据时,使用 ROLAP 技术。在给定使用场景的前提下,以达到查询性能的最优化,混合 OLAP的优势在于其很好的结合了MOLAP和ROLAP的优势之处,劣势恰恰在于其由于集成了MOLAP和ROLAP,本身的体系结构会非常复杂

OLAP系统

OLAP数据层次划分

  • 维度(Dimension):是用户观察数据的特定角度,是问题的一类属性,属性集合构成一个维度(时间维、地理维等)
  • 维度的层次(Level):用户观察数据的某个特定角度(即某个维度)还可能存在细节程度不同的各个描述方面(时间维包括日期、月份、季度、年)
  • 维度的成员(Member):即维度的一个取值,是数据项在某个维度中位置的描述,如“某年某月某日”是在时间维度上的位置描述
  • 度量(Measure):多维数组的取值。

OLAP多维数据结构

  • 超立方结构(Hypercube):超立方结构指用三维或更多的维数来描述一个对象,每个维彼此垂直。数据的测量值发生在维的交叉点上,数据空间的各个部分都有相同的维属性。(收缩超立方结构。这种结构的数据密度更大,数据的维数更少,并可加入额外的分析维)。
  • 多立方结构(Multicube):即将超立方结构变为子立方结构。面向某一特定应用对维进行分割, 它具有很强的灵活性,提高了数据(特别是稀疏数据)的分析效率。

OLAP多维数据分析

  • 切片和切块(Slice and Dice):在多维数据结构中,按二维进行切片,按三维进行切块,可得到所需要的数据。如在“城市、产品、时间”三维立方体中进行切块和切片,可得到各城市、各产品的销售情况。
  • 钻取(Drill):钻取包含向下钻取(Drill-down)和向上钻取(Drill-up)/上卷(Roll-up)操作, 钻取的深度与维所划分的层次相对应。
  • 旋转(Rotate)/转轴(Pivot):通过旋转可以得到不同视角的数据。

总结

OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。 OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。 OLTP系统最容易出现瓶颈的地方就是CPU与磁盘。 OLTP适用于数据量少,DML频繁,并行事务处理多的场景。OLAP适用数据量大,DML少。

责任编辑:姜华 来源: 今日头条
相关推荐

2022-02-23 09:36:11

GoRuby编程语言

2022-02-22 08:15:59

微服务架构单体架构

2021-05-20 06:57:16

RabbitMQ开源消息

2022-02-18 10:13:07

SolrElasticSea开源

2023-01-03 18:32:32

2021-06-30 00:20:12

Hangfire.NET平台

2021-07-28 10:02:54

建造者模式代码

2023-05-12 08:19:12

Netty程序框架

2021-07-14 08:24:23

TCPIP 通信协议

2021-08-11 07:02:21

npm包管理器工具

2021-11-16 14:09:58

Containerd Dockerk8s

2021-12-15 11:52:34

GPLLinuxGNU

2021-11-24 08:51:32

Node.js监听函数

2021-11-08 08:42:44

CentOS Supervisor运维

2021-08-02 06:34:55

Redis删除策略开源

2020-03-27 11:14:18

IONIOJava

2021-07-08 06:30:03

Linux CPULinux 系统

2021-01-29 18:41:16

JavaScript函数语法

2021-08-14 10:01:43

Python条件语句Python基础

2020-11-10 10:48:10

JavaScript属性对象
点赞
收藏

51CTO技术栈公众号