Page 378 - 《软件学报》2024年第6期
P. 378
2954 软件学报 2024 年第 35 卷第 6 期
AP 端的存储引擎. 这种方案类似 ETL 式的物理隔离, 试图避免两者之间的资源冲突. 但 AP 端对新鲜数据的需求
与 TP 端的高吞吐 (大量数据更新) 制约了两个存储引擎的数据一致性. 故而, 如何实现在完全解耦的存储下实现
高效的数据同步是一个核心挑战.
针对这 3 种资源隔离方案引入的版本同步和追踪的挑战, HTAP 数据库系统需要设计有效的数据共享方式, 如
为了解决逻辑隔离的挑战, 数据追踪时往往对存储格式进行转化; 为了解决缓存隔离的挑战, 数据版本追踪时需要
对齐不一致的版本; 为了解决存储隔离的挑战, 数据同步时可以阶段性同步数据. 基于对现有 HTAP 数据库系统
的数据共享方式的总结, 本文从 TP 端到 AP 端的数据生产、同步、追踪的整个生命周期出发, 归纳了不同的数据
共享模型, 其约束了 AP 端访问 TP 端产生的数据版本的模式. 进一步, 我们探讨了数据共享模型下的主流优化手段.
1.3 相关工作
随着 HTAP 数据库系统的发展, 出现了一批综述类工作对其技术进行概括和总结. Özcan 等人 [30] 从实现的角
度整理了 HTAP 数据库系统的发展历史, 并着重分析、比较了不同的存储架构, 包括行列混存和分离式两套存储
的具体实现方式. Hieber 等人 [31] 则以分布式架构为中心, 总结了 HTAP 数据库系统的设计要点和具体实现, 讨论
分布式场景下的并发控制、故障恢复、垃圾回收等问题. 另一方面, Psaroudakis 等人 [32] 、Raza 等人 [22] 主要分析
w i (K) 表示在某一时刻事务
了吞吐性能和新鲜度之间的相互影响, 前者设计了针对 HTAP 数据库系统的混合评测负载, 并通过实验定量分析
其对彼此的影响, 后者在实验的基础上, 进一步讨论资源隔离问题, 并给出一套资源调度算法. 张超等人 [33,34] 根据
存储结构对 HTAP 数据库系统进行分类, 总结了 HTAP 不同于 OLTP/OLAP 数据库系统在诸如内存与磁盘的行/
列存异构存储设计、查询优化、资源调度等技术上的关键要点, 并对比了近 10 年内典型的支持行列共存的
HTAP 数据库系统, 深入地分析了 HTAP 数据库系统的实现技术及不同设计的优劣. 而本文侧重于对不同一致性
模型下数据共享方式的分析, 旨在为不同应用场景下性能稳定的 HTAP 数据库系统研发提供思路. 文献 [35] 也展
望了机器学习技术在面向 HTAP 数据库系统中存储模型自动化选取、混合负载资源调度等方向上的未来应用. 这
些工作都从设计架构和实现效果两个方面综述 HTAP 数据库系统, 但都缺乏对 HTAP 数据库系统如何在天然的
架构选择下, 实现有效的数据共享策略的总结和分析.
1.4 论文结构
本文第 2 节从一致性模型的角度出发, 定义了数据共享模型, 归纳 HTAP 数据库系统在不同一致性级别下的
数据共享模型实现机制和实现特征, 随后围绕业界主流的十余款 HTAP 数据库系统, 进行数据共享模型方案的案
例分析. 第 3 节概述了现阶段 HTAP 数据库系统为了提高数据共享时版本同步、追踪、回收的效率和减少对应开
销所提出的优化方案. 第 4 节基于对数据共享模型的归纳, 分析并展望了 HTAP 数据库系统未来可能的优化方向.
2 HTAP 数据库系统数据共享模型
2.1 数据共享模型
数据版本是 TP 任务和 AP 任务数据共享的基础, 系统中事务每次写入产生的新数据会被唯一标识, 该标识文
中统一称为版本标识号. 为了深入剖析 HTAP 数据库系统数据共享模型, 本节首先给出数据版本的定义; 进一步,
根据 TP 端版本更新操作和 AP 端版本读取操作在版本标识号上存在的关系, 给出 3 类数据共享模型的定义. 其实
例如图 2 所示. 注意, 为了介绍简单, 示例中每个事务仅包含一个数据库访问操作, 即写或读, 每个事务均只访问数
x . 在图 2 w i r(K) 则表示在某一时刻读
据项 中, T i 针对数据项 x 写入/修改的值为 K ;
数据项 x 的值为 K , 这一结果是 w i 对应事务 T i 所写入/修改的值.
定义 1 (版本更新操作). 版本更新操作 w 是已提交事务 T 对数据库的修改操作. 基于事务的原子性, 操作 w 的
执行时间点为事务 T 的提交时间, 记为 w.t .
例 1: 如图 2 所示, TP 客户端 A 共发起两次版本更新操作, 即 w 1 w 3 , 分别对应事务 T 1 , T 3 将数据项 x 修改
,
为 2 和 0, 其执行时间点分别为 w 1 .t = t1 w 3 .t = t5 .
,
定义 2 (版本更新序列). 版本更新序列 S n 是执行时间点小于等于 w n .t 的全部版本更新操作构成的线性序列,