在最新一届国际数据库顶级会议 ACM SIGMOD 2022 上,来自清华大学的李国良和张超两位老师发表了一篇论文:《HTAP Database: What is New and What is Next》,并做了 《HTAP Database:A Tutorial》 的专项报告。这几期学术分享会的文章,StoneDB将系统地梳理一下两位老师的报告,带读者了解 HTAP 的发展现状和未来趋势。
在第一期分享中:StoneDB:深度干货!一篇Paper带您读懂HTAP | StoneDB学术分享会第①期 我们已经把HTAP产生的背景和现有的HTAP数据库及其技术栈做了一个简单的介绍,这一期,我们将着重讲一讲报告中对HTAP关键技术的解读。
在正式开始前,先给上期简单收个尾,报告中提到 HTAP 数据库除了以下四种:
- Primary Row Store + InMemory Column Store
- Distributed Row Store + Column Store Replica
- Disk Row Store + Distributed Column Store
- Primary Column Store + Delta Row Store
还补充了3种,感兴趣的读者可以自行了解:
- Row-based HTAP systems:如 Hyper(Row)、BatchDB等
- Column-based HTAP systems:如 Caldera、RateupDB等
- Spark-based HTAP systems:如 Splice Machine、Wildfire等
下面进入正文,本篇报告中主要介绍了HTAP的五大类关键技术,分别是:
- Transaction Processing(事务处理技术)
- Analytical Processing(查询分析技术)
- Data Synchronization(数据同步技术)
- Query Optimization(查询优化技术)
- Resource Scheduling(资源调度技术)
Overview of HTAP Techniques
这些关键技术被最先进的 HTAP 数据库采用。然而,它们在各种指标上各有利弊,例如效率、可扩展性和数据新鲜度。
An Overview of HTAP Techniques
Part1 事务处理 (TP) 技术
HTAP 数据库中的 OLTP 工作负载是通过行存储处理的,但不同的架构会导致不同的 TP 技术。它主要由两种类型组成。
1. 使用内存增量更新的单机事务处理
Standalone Transaction Processing with In-Memory Delta Update 关键技术点:
- 通过MVCC协议进行单机事务处理
- 通过内存增量更新进行insert/delete/update操作
相关数据库:Oracle、SQL Server和SAP HANA等 Standalone TP for insert/delete/update operations
上面这张图介绍了单机事务处理执行insert/delete/operations操作的一个逻辑过程,总体上是借助 MVCC+logging,它依赖于 MVCC 协议和日志记录技术来处理事务。具体来说,每个插入首先写入日志和行存储,然后附加到内存中的增量存储。更新创建具有新生命周期的行的新版本,即开始时间戳和结束时间戳,即旧版本在删除位图中被标记为删除行。因此,事务处理是高效的,因为 DML 操作是在内存中执行的。请注意,某些方法可能会将数据写入行存储 或增量行存储 ,并且它们可能仅在事务提交时写入日志。 一般有三种方式来实现内存增量存储,分别是:Heaptable(堆表)、Index organized table(索引组织表) 和 L1 cache(一级缓存),具体区别如下表: Three implementations for an in-memory delta store
三者主要的区别在于插入(insertion)速度、查询(lookup)速度和容量(capacity)大小上。
2. 使用日志回放的分布式事务处理
Distributed Transaction Processing with Log Replay
关键技术点:
- Two-Phase Commit(2PC)`+Paxos 用于分布式TP和数据复制
- 使用Log replay(日志回放)更新行存储和列存储
相关数据库:F1 Lightning 注:这里有稍有不同的分布式TP方案,就是采用主从复制(Master-slave replication)的方式实现HTAP,比如 Singlestore。 如上图所示,这种主从复制的方式下,主节点处理事务,然后将日志复制到从节点再做分析。
另外就是通过 2PC+Raft+logging,它依赖于分布式架构。