OLTP、OLAP,如此熟悉却又如此陌生!
朋友们,如果您对数据库技术有所接触,可能会经常碰到OLTP和OLAP这两个名词。各类技术文章在描述某个数据库系统的性能时,经常会说数据库系统对OLTP的支持如何、对OLAP的支持如何等等。
如果您不了解两者的区别和联系,可能看起来一头雾水。甚至有些朋友把OLTP、OLAP与数据库等同起来,搞来搞去把自己都搞迷糊了。
OLTP和OLAP到底是什么?
OLTP和OLAP到底都是什么东东呢?别心急、且听我慢慢道来。
OLTP是Online Transaction Processing的缩写,其中文含义为:联机事务处理;OLAP是Online Analysis Processing的缩写,其中文含义为:联机分析处理。
上世纪60年代,关系数据库之父E.F.Codd提出了关系模型,造就了基于OLTP的传统关系型数据库的大发展;1993年,E.F.Codd认为传统OLTP已无法满足需求,又提出了多维数据库和多维分析的概念,即OLAP。
OLTP是传统关系型数据库的主要应用,侧重于数据即时性和基本事务处理;OLAP是数据仓库系统的主要应用,侧重于决策分析和数据展示。二者的区别和联系通过下图看起来会更清晰:
通过上述定义和图示,大家对OLTP和OLAP应该有了一些直观认识。一言以蔽之,二者均是有关数据处理的技术架构和标准,但侧重点不同,二者区别就如她们名称的区别一般,OLTP的核心在于事务、OLAP的核心在于分析。
联机事务处理OLTP的特点和应用场景
搞数据库的朋友都知道,我们选用某个数据库系统时,首先关注的是数据库数据处理的即时性(速度尽量的快速,近乎实时)、安全性(事务的强一致性)以及并发处理能力等,这些恰恰都是OLTP技术的基本要求。
OLTP的事务处理必须满足“ACID”,即原子性(Atomicity)、一致性(Consistency)、孤立性(Isolation)和持续性(Durability)。
在OLTP的场景中,我们要处理的数据量并不一定非常大,但应用的频率却非常高,数据处理存在非常频繁的小数据量读写类操作。故而,OLTP一般也称为“面向交易的处理系统”。
就以常用的银行转账为例,我们转账给朋友,在极短的时间内,转账就生效了,试想同时有多少人在做转账操作,而且即使转账失败了,我们的钱也不会被扣掉。这些恰恰体现了数据处理的即时性、事务强一致性和并发处理能力。
OLTP类型的业务,每次操作的数据量一般并不大,但会非常频繁。再比如每年双十一,京东和天猫都存在海量的数据交换,上百亿次的频繁数据处理、大量的数据并发,但我们也很少见京东或天猫出什么大问题,这充分说明京东和阿里数据库的OLTP性能非常棒。
我们常见的传统大型关系型数据库,包括PostgreSQL、MySQL、SQL Server、Oracle、DB2等,对OLTP的支持都是非常棒的。换言之,对OLTP的良好支持是传统关系型数据库的主要特色之一。
联机分析处理OLAP的特点和应用场景
联机分析处理OLAP是一种超高技术含量的软件技术,它使分析人员能够快速、一致、交互的从各个方面观察信息,以达到深入理解数据的目的。OLAP的特性可归结为FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析。
联机分析处理OLAP系统,是数据仓库的最主要应用。侧重于根据管理层的各种要求,对各类海量数据从不同角度、不同级别进行复杂查询和多维分析,并将结果以直观易懂的形式提供给管理层,为管理层提供决策支持。
OLAP使用的数据模型通常为多维数据模型,其基本多维分析操作有钻取(roll up和drill down)、切片(slice)和切块(dice)、以及旋转(pivot)、drill across、drill through等。下面的例图展示了几种常用的多维模型模式。
OLAP有多种实现方法,根据存储数据的方式不同,可分为ROLAP、MOLAP和HOLAP。一般我们将基于关系数据库的OLAP实现称之为ROLAP(Relational OLAP);将基于多维数组存储的OLAP称之为MOLAP(Multidimensional OLAP);将基于混合数据组织的OLAP实现称之为HOLAP(Hybrid OLAP)。
总之,OLAP通常使用多维谁模型,分析的数据对象一般是海量历史数据,操作主要为读取而非写入,分析的模式主要为汇总和聚集,对处理过程需要耗费的时间存在较大的宽容度(比如几十秒或数分钟)。这是与OLAP与OLTP的最主要区别。
朋友们,我们正处在数据大爆炸的新时代,十多年前,数据的计量标准偏重于兆、G单位;而当下,数据动辄上T(1T=1204G)、上P(1P=1024T)。数据的存储也从早期的侧重单服务器存储变为当下的分布式存储。
就像阿里、腾讯、华为等巨头,他们的数据存储节点分布在全世界,每个节点存储的数据都是海量级别。试想双十一过后,如果马云想看一下双十一当天某类产品在不同国家和区域的销售情况、以及刷单的统计,这可就麻烦了,要处理的数据可不是一张表几条数据、而是海量的分布式数据,这种应用是什么场景?显然,仅仅依靠传统关系型数据库的查询SQL是很难满足这种海量分析需求的。
所以,借用合适的OLAP工具实现OLAP业务就显得尤为重要。当下比较知名的开源OLAP工具主要包括:Impala、Presto、Spark SQL、Drill、Hawq、Druid、Pinot、Kylin等,其中Apache Kylin,麒麟,开发团队主要由国人组成,速度很有优势,在国内的应用也比较广泛。
Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
下图是Apache Kylin的系统架构图:
下图则是目前使用Kylin的国内外主要用户:
OLTP和OLAP对比分析
上面分别对OLTP和OLAP做了详细描述,相信大家对二者的区别有了一定的认知。下面通过一张对比表格将二者的主要区别罗列出来做一个总结。请参看下图:
从表中可以看出,OLTP和OLAP的区别还是很大的。OLTP侧重于基于事务的小数据量频繁读写;而OLAP侧重于基于查询的海量数据读取分析。如果您能够搞明白OLTP和OLAP的主要区别,那您以后再看到这类文章,就再也不会一头雾水了。
希望对您有所帮助!