定义
HTAP能同时提供OLTP和OLAP的混合关系型数据库,我们称之为HTAP(Hybrid transac- tion and analysis processing)。广义的HTAP数据库,能够在关系数据模型上进行OLTP时具有强一致性保证,并且融合了分布式能力从而同时具有高扩展性 [5]。狭义的HTAP数据库指的是采用行列混存或者行列转化技术来同时支持事务能力和分析功能。 以Oracle为例,最初的设计面向OLTP服务,而随着OLAP日趋发展,最近发布的Oracle版本开始同时支持OLAP服务,所以成为了广义上的HTAP数据库(如图 1所示)。而是否属于狭义HTAP的概念,需要根据其支持的存储技术、行列转换、查询处理技术等综合决定。
特性
- 支持关系数据模型,并且可以支持标准SQL查询语言。
- 可以支持OLTP服务,保证事务处理的强一致性ACID。
- 可以支持OLAP服务,具有与非关系型数据库相媲美的扩展性和高效性。
- 具有分布式数据管理能力,包括采用备份机制保证容错性,采用Raft算法或Pixos算法,确保一致性等。
目前支持HTAP的数据库系统架构主要包括:
- 行存为主,内存列存为辅:以行存为主支持数据的增删改查,以列存为辅(内存中行转列)来支持复杂分析。其主要难点在于选择哪些数据转为列存、如何用行存和列存回答查 询。代表系统为Oracle。
- 主机行存,备机内存列存:主机采用行存,备机通过log复制转为内存列存提供分析能力。代表系统为MySQL HeatWave。
- 多副本行列共存。通过多副本进行存储, 主采用行存, 副本采用列存。代表性系统为TiDB。
- 列存为主,行存为辅。以列存为主,增量数据通过delta表定期转为列存。
实现HTAP的技术主要包括:行列转换技术、行列共存的查询优化技术、行列共存的事务处理技术等。
评测标准
CH-Benchmark:CH-Benchmark融合了TPC-C和TPC-H两种基准。它整合两种数据模式,选取典型OLAP+OLTP操作,来创建新基准。
单机HTAP数据库
单机HTAP数据库一般是通过一台主机同时支持行存和列存,内存中进行行转列,从而支持HTAP。而一写多读数据库则是通过日志将主机数据传递给备机,备机将其转为列存,从而支持HTAP。
目前的HTAP的业界代表是MySQL HeatWave。其基于原有的MySQL数据库提供负责事务处理,紧密集成的Heatwave云服务以基于内存的分布式列存引擎用于加速复杂查询。此外,分析型查询由系统查询引擎基于代价估计后决定是否下推到内存列引擎中执行,常被访问的热数 据将会留在内存中,不常使用的冷数据将会被压缩后持久化到外存中。MySQL的事务更新定期
(如200ms的间隔)向内存中的分布式列存同步,保证数据分析的新鲜度。一个新的特性是其 能够利用结合Autopilot服务利用机器学习技术自动优化行列混存,包括如何压缩列存,如何选择列到内存,以及何时将行存同步到列存等。
集中式HTAP数据库
传统的Oracle数据库支持广义的HTAP,即同时支持交易和分析,并通过In-Memory支持行列共存。Oracle通过内存行转列技术来支持OLAP。目 前DB2、SQL Server、MySQL等也推出通过内存行转列来支持HTAP。
集中式HTAP数据库业界代表包括Oracle、DB2、SQL Server。Oracle在自己原生的行存上集成了基于内存的列存储。行存储通过缓存进行数据的更新、点查询和短范围查询。列存储 可通过压缩编码和SIMD等技术进行查询加速。同时,最新的更新数据会被记录到作为增量行 存储的堆表中,以便列存储访问最新数据。IBM DB2 在原有行存的基础上结合BLU内存加速器针对HTAP负载进行优化。基于行存的DB2关系数据库支持全ACID特性,并可通过内存优化 写操作。其增加的BLU加速器基于列存设计,也同时面向内存优化,并能够通过基于频率的 字典压缩数据,单指令、多数据(Single-Instruction, Multiple Data,SIMD)等技术提升分析性能。特别地,DB2的更新操作可通过基于内存的增量缓冲区快速同步到BLU的列存中。SQL Server通过建立列存索引在内存表上的方式来加速分析型查询。本质上,在内存中的列存索引也是一种形式的列存,因为它包含了该列的所有数据。SQL Server在原有的基于磁盘的行存引擎基础上集成了基于内存的Hekaton行引擎和基于内存的Apollo列引擎。其基于内存的行存引 擎不仅可以处理事务操作,还会将最新的更新保留在内存表的尾部作为增量行存储,这样列存 也能够同时访问增量最新数据。SQL Server的列索引分为聚集列索引和非聚集列索引。聚集列索引包含了所指向内存表的所有列数据,非聚集列索引只包含部分列数据。列索引将行数据 以100万为一个单位分为组后,分段进行压缩索引。所有列分段和压缩字典的元数据被写入磁盘 中进行保存,元数据可以帮助所有分段组成一个完整列。被频繁使用的列索引会被放入内存中 以减少磁盘I/O, 不频繁使用的列索引放到外存中。
分布式HTAP数据库
一种是以内存型主列存为基础结合增量行存支持HTAP。主列存主要处理OLAP类分析查询,增量行存负责OLTP类事务操作,并直接将更新数据定期合并到主列存中。此类系统因为 以列存为主,所以OLAP的性能很高,且增量行存直接与列存连接,数据分析的新鲜度也很高。但其缺点也很明显,就是OLTP处理性能中等,扩展性也不高,负载隔离性很低。分布式HTAP数据库业界代表性系统是SAP HANA。它的主列存可通过压缩,向量执行和OLAP多维分析等技术进行查询加速。另外,其利用CPU的多级缓存机制优化事务处理。其中L1缓存用于做针对行的写操作,然后数据会同时写到Redo日志里进行持久化;L2缓存用于做数据的批量导入,然后将数据转换成列个格式并合并到列式主存中。最后列主存用于查询加速与数据的持久化。
另外一种是以分布式架构支持混合事务与分析处理。其分布式行存为主存储,列存为行存的副本,主节点在处理事务时写入日志,并异步式地向其他节点发送最新日志,通过分布式协议进行事务处理。其中,有部分节点会被选为列存节点,负责加速复杂查询。特别地,只有行存节点参与事务协议,列存节点不参与分布式事务,只有当事务成功提交后将最新日 志复制到本地,将行数据转换成列数据后写入持久存储。由于事务和查询分别在行存节点和 列存节点上处理,此类系统具有高度负载隔离性。另外,由于完全基于分布式架构,此类系 统面向OLTP和OLAP的扩展性都很高。然而,由于数据同步需要分布式地以日志传送,因而 其数据分析的新鲜度偏低。分布式HTAP数据库业界代表性系统是TiDB。其基于Raft日志回放技术在Follower节点上建立行存的同时向Learner节点异步地存储一个列存副本。通过建立一个增量列式树,系统可定期将更新合并到列存副本中,保持数据的一致性。TiDB的SQL引擎 针对分布式行存储通过两阶段提交2PC的方式实现了可重复读的事务隔离级别。除此之外,其 还能基于压缩后的列存副本进行查询加速。TiDB实现了一个基于代价模型的查询优化器。根 据代价估计,系统可决定查询计划在行存,或列存,或行列混合执行,即查询的部分操作在 行引擎操作,部分操作在列引擎操作,然后结果通过合并后统一返回给用户。类似的系统还 有Singlestore,一个基于MemSQL原内核开发的内存型分布式数据库,其基于原基于行存的分 布式架构,在部分节点持久化时写入列存副本,用于加速查询。稍有不同的是,Singlestore采 用主备分布式架构,不采用分布式事务处理,而是利用主节点处理完事务后,同步到其他副节点。
云原生HTAP数据库
云原生HTAP数据库也是通过计算存储分离来提升HTAP数据库的弹性。目前Oracle和MySQL提供了云服务的HTAP数据库版本。
如何鉴别HTAP数据库
HTAP数据库目的是同时支持OLTP和OLAP查询,因此鉴别方法是构造同时需要OLTP和OLAP的需求来进行评测(例如混合TPC-C和TPC-H)。




