随着时代发展,商业智能(Business Intelligence, BI)这一种新的需求越来越重要,BI主要使用在线分析处理(OLAP)来分析数据,生成报告。现阶段的主要做法是ETL(Extract-Transform-Load),即通过周期性(如每天晚上)将 OLTP 数据库的变化提取出来(Extract),然后转换数据格式(Transform),再加载到数据仓库(Load)。这一做法存在以下问题:
- 存储占用过大: 数据存储两份,OLTP 一份,OLAP 一份。
- 数据过时: 数据处理周期通常较长(如一天一次),导致分析结果滞后。
- 操作复杂性: ETL 过程涉及大量数据转换和清洗,可能成为性能瓶颈。
将 OLTP 和 OLAP 系统整合为一个系统(即 One Size Fits All
)会导致性能下降,例如分析任务(OLAP)可能阻塞事务处理(OLTP)。因此,本文提出了一种内存数据库 Hyper
,实现高效的 HTAP(Hybrid Transactional and Analytical Processing)功能。主要特点:
- 一份数据,减少存储开销。
- 事务执行使用预编译的存储过程
- 和
H-STORE
类似,所有OLTP事务分区串行执行。 - 用一定的操作系统和硬件机制 (
fork
+COPY ON WRITE
)来生成一致性快照供OLAP查询- 为什么性能没有受到影响,主要还是利用了内存的随机访问和顺序访问成本差不多
- 支持事务ACID
接下来详细介绍具体的细节。
Fork + Copy On Write
fork
是操作系统中创建子进程的系统调用,新进程最初共享父进程的虚拟内存,但使用写时复制