论文部分内容阅读
随着数据规模和用户数量的增加,日趋多样化的业务需求和日益复杂的混合事务与分析负载(Hybrid Transaction/Analytical Processing,HTAP)对数据库系统的事务吞吐量和分析型查询延迟提出了更高的要求。目前并没有公认针对HTAP负载的最优解决方案,但是基于日志合并树(Log-Structured Merge-Tree,LSM-tree)构建的事务处理系统已经被证明了高效的事务处理能力(例如阿里巴巴的Ocean Base),因此在可扩展的事务处理系统上构建分析型查询能力来响应HTAP负载逐渐成为了研究的热点问题。物化视图通过预计算和缓存计算结果能有效降低查询时延,是分析大规模数据的重要手段。视图对外提供查询时,为了保持视图的内容与基表一致,由基表更新导致的视图更新必然会引入额外的开销。为了在可扩展的事务处理系统上高效地维护视图,如何在这种新型架构下设计视图的存储和维护流程、如何在保证视图查询收益下最小化事务处理引入的额外成本、如何优化系统核心资源的开销等都成为了亟待解决的问题。本文针对这些挑战,围绕可扩展事务处理系统的架构、事务处理过程、IO资源等角度设计了一系列的优化方法,并且从根本上降低了视图的维护代价。本文主要工作和贡献如下:(1)本文结合新型分布式LSM-tree架构特点提出了增量视图维护方案:数据规模的急剧膨胀促使纵向扩展(Scale Up)的传统单机数据库架构向横向扩展(Scale Out)的新型分布式数据架构转变。分布式LSM-tree架构是横向扩展的一种新型方案,能够提供可扩展的事务处理能力,但是对于这种新型架构,目前仍然缺少物化视图维护相关的研究工作。本文总结了分布式LSM-tree的架构特点和实现视图的设计要素,提出了一种将视图维护与事务处理分离的异步维护方法,填补了这一领域的空白。本文在保证一致性的基础上,面向不同的负载特征提出了具体的视图维护策略。针对多表连接视图的性能问题,本文设计并实现了基于多个两表连接的视图维护流程,从而能够根据基表更新直接定位到视图中需要相应进行修改的记录,有效降低了视图维护的代价和对事务处理的影响。(2)本文对高通量事务负载下的增量视图维护进行了优化:当前的视图更新方法通常将每个单独操作或单行日志作为计算的切入点,使得优化方式仅能着眼于单行操作或同一基表的若干行操作。高通量的事务负载下,视图维护对事务处理的影响被放大,视图维护性能需要进一步优化。本文从包含若干操作的整个事务的角度,组合多个基表操作共同生成视图的增量,大大降低了视图维护开销。事实上,在OLTP(Online Transaction Processing)负载中,一个事务往往包含多个表的执行逻辑,隐含了各个表中数据的相关性,并且这往往也是OLAP(Online Analytical Processing)负载同时关注的。本文剖析了事务之间可用于视图维护的逻辑信息,将事务中共同更新的基表组成了一个分片,通过组合这些基表的操作直接得到整个分片的增量。相比传统基于单行操作计算视图增量的方式,以事务为粒度的视图维护过程通过批量进行多表的增量计算,极大地改善了多表连接物化视图的效率。本文还进一步提出了两种优化方案:通过优化增量计算的表达式来减少计算开销;通过避免无效的基表访问来从根本上降低视图维护代价。(3)本文对视图维护的核心IO资源开销进行了优化:针对混合负载下事务与查询访问的数据经常重叠的特点,本文进一步着眼于优化事务处理、查询和视图维护总体的IO开销。当基表发生更新时,本文不对视图进行同步更新而是仅记录下维护视图的任务,这些任务通过复用后续事务和查询的IO来完成。本文设计并实现了一个支持共享IO的多表连接视图的维护方案。通过构造视图关系图来维护基表之间的连接关系,事务执行不仅为基表生成增量记录,还根据其连接表生成相关的维护任务。因此,后续事务或查询可以在不增加IO成本的情况下完成这些任务从而有效降低维护代价。另外,基于多版本实现的增量计算方式也保证了视图与基表在异步更新下的一致性。综上所述,本文深入研究了混合负载下的异步增量视图维护策略,在不同场景下设计实现并优化了视图的存储结构和维护方案。首先,针对目前被广泛使用的分布式LSM-tree架构数据库,本文首次提出并设计实现了高效的增量视图维护方法。然后,本文研究了将事务作为整体来加速视图增量计算的策略,并通过分析形式化的增量计算表达式,进一步进行了优化。最后,本文针对更普遍场景下视图维护时的IO消耗问题,将事务处理和分析查询的IO资源服务于视图维护过程,从根本上降低了视图维护的代价。大量的实验验证了本文方法的有效性。在未来,选择维护哪些视图来整体响应分析负载、如何结合机器学习策略指导异步视图维护任务的执行、以及在混合负载下,如何进行物化视图的推荐等都值得进一步的研究。