数据处理OLTP与OLAP的概念
在系统软件出现的初期,数据通常被保存在单个文件中进行管理,但随着业务的不断发展与系统数据处理逻辑的不断复杂,关系型数据库成为了主流的数据管理系统,例如Oracle、Mysql等,随后又出现了各式各样数据管理的解决方案,例如Elasticsearch、Redis、HBase等。然而,无论数据库管理系统如何更新与发展,涉及数据处理的核心术语与概念永远离不开这两个名词,即OLTP与OLAP。
===========================================================
首先我们先对OLTP和OLAP做个简单的介绍和比较
介绍:
OLTP,全称on-line transaction processing,即联机事务处理,是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易,强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作。
OLAP,全称on-Line Analytical Processing,联机分析处理,是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果,强调数据分析,强调SQL执行时长,强调磁盘I/O,强调分区等。
比较:
|
OLTP |
OLAP |
用户 |
操作人员 |
决策人员 |
功能 |
操作处理 |
分析决策 |
设计 |
面向业务 |
面向主题 |
存取 |
读/写数十条 |
读百万条 |
性能 |
较高 |
较低 |
事务 |
支持 |
不支持 |
体量 |
万级 |
亿级 |
===========================================================
接着来深入的了解一下它们的特性和使用场景
OLTP:
是一种以事务为核心的作业方式,一次的作业过程通常会涉及在数据库中执行插入、更新及删除的操作,但是操作的数据量比较小,可以即时地处理输入的数据,及时地响应,经常也被称为实时系统。典型的案例有用户在线转账、ATM交易、账单查询等。
特点:
- 多用户、高并发、响应快
- 事务性约束,过程数据量较小
- 并发处理严格遵循ACID要求
技术选型:
OLTP通常又分为关系型和非关系型数据库2种类型
关系型数据库常见的有Oracle、Mysql、PostgreSQL等,通常用于数据模型固定、结构化数据、复杂事务处理的场景,具有严格的ACID约束原则;
非关系型数据库常见的有Redis、MongoDB、Elasticsearch、Neo4j等,强项在于非结构化数据的处理,例如Redis适合K/V数据,MongoDB适合文档数据、Elasticsearch适合搜索数据、Neo4j适合图数据。
注:非关系型数据库具有较强的横向扩展性,服务节点可以动态扩展,保持服务的有效性。但是在复杂事务处理方面,表现不如关系型数据库。
OLAP:
是一种通过多维分析进行数据分析提供智能决策的技术,基于数据仓库,与商务智能、数据挖掘联系紧密,提供对数据不同视角的分析与查看,重点在于分析与报告,不在于实时在线业务的处理。典型的应用场景有销售报告、市场趋势预测等。
特点:
1)数据查询量及存储量大
2)没有事务性约束,但计算相对复杂
3)数据更新并不频繁,不用严格遵循ACID要求
4)不面向具体的业务处理,而面向业务分析与挖掘
技术选型:
OLAP通常又分为MOLAP、ROLAP和HOLAP 3种类型
MOLAP常见的有Kylin,它会对原始数据进行预计算得到用户可能需要的所有结果,将其存储到优化过的多维数组存储中。
优势:
查询时无需进行复杂计算,且以数组形式可以进行高效的免索引数据访问,用户发起的查询均能够稳定地快速响应,此类结果集是高度结构化的,可以进行压缩/编码来减少存储占用空间。
劣势:
因为需要进行预计算,需要花去很多时间,每次写入增量数据后均要进行全量预计算,需要支持仅对增量数据进行迭代计算,如果业务发生需求变更,原有的实例就无法再次使用,只能重新进行建模和预计算。
ROLAP常见的有ClickHouse、Spark,它无需进行预计算,直接在构成多维数据模型的事实表和维度表上进行计算。
优势:
增量数据导入后,也无需进行重新计算,用户有新的查询需求时只需写好正确的SQL语句既能完成获取所需的结果。
劣势:
在数据体量巨大的场景下,用户提交SQL后,获取查询结果所需的时间无法准确预知,可能秒回,也可能需要花费数十分钟甚至数小时。
HOLAP其实是想将MOLAP和ROLAP的优点进行互补,H表示混合型(Hybrid),即对于查询频繁而稳定但又耗时的那些SQL,通过预计算来提速;对于较快的查询、发生次数较少或新的查询需求,像ROLAP一样直接通过SQL操作事实表和维度表,但至今还没有开源的产品出现,但相信未来HOLAP可能会得到进一步发展,并获得更大规模的使用。
===========================================================
总结:通过以上的介绍可以发现,不管是OLTP还是OLAP,没有一个数据处理系统是能够满足各种场景的需求的,因此我们需要结合不同的业务场景来选择适合的数据处理技术,并从规模、性能、灵活这三个方面根据系统设计进行取舍。