OLTP与OLAP
数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
- OLTP:系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
- OLAP:系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。
OLTP与OLAP之间的比较:
OLTP | OLAP | |
---|---|---|
用户 | 操作人员,低层管理人员 | 决策人员,高级管理人员 |
功能 | 日常操作处理 | 分析决策 |
DB 设计 | 面向应用 | 面向主题 |
数据 | 当前的, 最新的细节的, 二维的分立的 | 历史的, 聚集的, 多维的集成的, 统一的 |
存取 | 读/写数十条记录 | 读上百万条记录 |
工作单位 | 简单的事务 | 复杂的查询 |
用户数 | 上千个 | 上百个 |
DB 大小 | 100MB-GB | 100GB-TB |
时间要求 | 具有实时性 | 对时间的要求不严格 |
主要应用 | 数据库 | 数据仓库 |
oltp数据 | olap数据 |
---|---|
原始数据 | 导出数据 |
细节性数据 | 综合性和提炼性数据 |
当前值数据 | 历史数据 |
可更新 | 不可更新,但周期性刷新 |
一次处理的数据量小 | 一次处理的数据量大 |
面向应用,事务驱动 | 面向分析,分析驱动 |
面向操作人员,支持日常操作 | 面向决策人员,支持管理需要 |
HTAP
数据库系统一般可以按照负载类型分成操作型数据库(Operational Support System)和决策型数据库(Decision Support System)。操作型数据库主要用于应对日常流水类业务,主要是面向消费者类的业务;决策型数据库主要应对的是企业报表类,可视化等统计类业务,主要面向企业类的业务。
针对两类系统的数据管理和系统设计方式都有很大差异。 (1)对OLTP的数据模型采用基本的约束E-R图模型,而OLAP的数据模型则需要采用特殊的“星型模型”,数据立方等数据仓库相关的技术。 (2)对OLTP的数据存储通常采用行式组织,而OLAP采用列式组织。 (3)OLTP的业务通常对实时要求比OLAP高很多。 (4)传统的数据库,为了同时支持两类业务。通常采用两个数据源, 分别对两套系统进行优化设计。
OLTP的数据定期会通过etl(提取,转换,加载)工具把数据同步导入OLAP系统中。这就涉及到数据源滞后的问题。 OLAP的数据滞后,导致分析出来的结果时效性不够,对决策支持类系统的要求不够。比如说,双11期间,用户购物的行为和推荐系统的推荐结果之间的时间差越短,越有可能提高销量。
HTAP是混合 OLTP 和 OLAP 业务同时处理的系统,2014年Garnter公司给出了严格的定义:混合事务/分析处理(HTAP)是一种新兴的应用体系结构,它打破了事务处理和分析之间的“墙”。它支持更多的信息和“实时业务”的决策。
直接在单一数据源上不加区分的处理TP和AP的方案,目前还不能有效实现。
当前的方案是进行一个折中。采用快照的方式,分开处理OLTP和OLAP请求。让OLAP的请求在OLTP的最新的一致性快照上执行。同时对外暴露一套接口,从而从逻辑来看是一套系统。虽然内部是分开处理OLTP和OLAP的。
这种折衷方案,重要的一点,就是保证快照是尽可能的保持“新”,快照不能太过滞后OLTP的数据。这就需要系统频繁的做快照操作。
目前两种流行的方案,一个是采用linux的系统快照能力,提供HTAP服务的方案,比如Hyper数据库系统。另一种是类似hana的方案,定期生成增量数据,然后合并到AP系统。如下图。