一种基于共识算法的HTAP数据库系统转让专利

申请号 : CN202010654486.6

文献号 : CN111858759B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘奇黄东旭崔秋方祝和

申请人 : 平凯星辰(北京)科技有限公司

摘要 :

本发明公开了一种基于共识算法的HTAP数据库系统,该HTAP数据库系统包括行列混存的分布式存储系统和分布式SQL执行引擎;所述行列混存的分布式存储系统包括行存库和列存库,所述列存库中存储的数据是通过在共识算法中引入的学习者异步地从所述行存库中复制并且转换格式而来;所述分布式SQL执行引擎,用于接收客户端发送的事务型请求和/或分析型请求,并在执行所述事务型请求和/或分析型请求时选择访问所述行存库和/或所述列存库;本发明保证了事务型请求和分析型请求的隔离性,实现负载隔离,保证了数据的新鲜性和一致性,同时保证了系统的高可扩展性和高可用性。

权利要求 :

1.一种基于共识算法的HTAP数据库系统,其特征在于,所述HTAP数据库系统包括行列混存的分布式存储系统和分布式SQL执行引擎;

所述行列混存的分布式存储系统包括行存库和列存库,所述列存库中存储的数据是通过在共识算法中引入的学习者异步地从所述行存库中复制并且转换格式而来;

所述分布式SQL执行引擎,用于接收客户端发送的事务型请求和/或分析型请求,并在执行所述事务型请求和/或分析型请求时选择访问所述行存库和/或列存库,事务型请求和分析型请求访问不同的列存库。

2.根据权利要求1所述的HTAP数据库系统,其特征在于,所述行存库包括分块和共识组,所述列存库包括分片和学习者;

所述分片和所述学习者存储列存格式的数据,所述列存格式的数据是所述共识组中引入的学习者按照复制状态机机制对所述行存库中对应的分块数据进行异步复制后,在本地复制状态机中转换格式得到的。

3.根据权利要求2所述的HTAP数据库系统,其特征在于,所述共识组包括分块的至少三个副本,所述副本是采用共识算法按照复制状态机机制将分块中的数据进行多数派复制得到的,所述副本以行存格式存储数据。

4.根据权利要求2所述的HTAP数据库系统,其特征在于,所述列存库中的一个所述分片对应所述行存库中的一个所述分块或多个连续的所述分块;

所述列存库中的一个学习者对应所述行存库中的一个共识组或多个连续的共识组;

所述列存库中的一个分片被配置为所述列存库中的一个学习者或多个学习者。

5.根据权利要求4所述的HTAP数据库系统,其特征在于,所述分块是行存库中的表数据按照范围分区的方式进行切分得到的,所述分片是列存库中的表数据按照范围分区的方式进行切分得到的。

6.根据权利要求5所述的HTAP数据库系统,其特征在于,所述范围分区的方式包括:若分块的数据量或访问量大于预设范围的最大值,则切分该分块,且切分后各分块的数据量或访问量大于预设范围的最小值;

若分块的数据量或访问量小于预设范围的最小值,则将该分块与和该分块连续的分块合并,且合并后分块的数据量或访问量小于预设范围的最大值。

7.根据权利要求1所述的HTAP数据库系统,其特征在于,所述分布式SQL执行引擎,在执行所述事务型请求时访问执行代价小的所述行存库和/或所述列存库,在执行所述分析型请求时访问执行代价小的所述列存库和/或所述行存库。

8.根据权利要求7所述的HTAP数据库系统,其特征在于,所述分布式SQL执行引擎在执行所述分析型请求时访问所述行存库中预设数据量的数据。

9.根据权利要求1所述的HTAP数据库系统,其特征在于,所述列存库响应的分析型请求的数量多于事务型请求的数量,所述行存库响应的事务型请求的数量多于分析型请求的数量;

所述列存库响应的分析型请求的数量多于所述行存库响应的分析型请求的数量,所述行存库响应的事务型请求的数量多于所述列存库响应的事务型请求的数量。

说明书 :

一种基于共识算法的HTAP数据库系统

技术领域

[0001] 本发明涉及数据库领域,具体涉及一种基于共识算法的HTAP数据库系统。

背景技术

[0002] 传统数据库无法同时应对互联网应用中大数据的高并发事务、快速分析和海量数据管理的挑战,因此它分为联机事务处理(On‑Line Transactional Processing,简称为
OLTP)系统和联机分析处理(On‑Line Analytical Processing,简称为OLAP)系统。OLTP系
统支持高并发事务,并且保证高可用性、事务一致性以及高可扩展性;OLAP系统快速分析数
据,但是所分析的并非实时数据。然而新鲜数据蕴含更高的商业价值,这就要求同时处理高
并发事务以及实时分析数据,也就是支持混合事务/分析型处理(Hybrid Transactional/
Analytical Processing,简称为HTAP)。HTAP系统能够实时分析从事务处理产生的数据,并
且同时具有OLTP和OLAP系统的上述优点。
[0003] 相关技术中的做法是通过提取‑转化‑加载(Extract‑Transform‑Load,简称为ETL)过程将OLTP和OLAP系统连接到一起,通过ETL过程,OLTP系统定期地将最新的一批数据
导入到OLAP系统中进行分析。然而这个ETL过程通常耗费几个小时甚至几天的时间,不能保
证实时分析;同时多个系统之间缺乏全局一致性模型,并且维护多个系统引入更高的维护
和管理成本。
[0004] 为了保证数据新鲜性,一些内存数据库(例如HyPer、SAP HANA和MemSQL)允许读取本地事务处理的最新数据,但是这些内存数据库不能同时提供OLTP和OLAP的高性能,因为
OLAP严重影响OLTP的性能,影响程度可以通过CH‑benCHmark这种HTAP测试集进行评估。已
有文献表明,通过运行CH‑benCHmark测试,HyPer处理OLTP负载的峰值至少降低五倍,而SAP 
HANA的OLTP能力峰值至少降低三倍,因为OLTP和OLAP同时访问同一个副本数据,不可避免
竞争资源。
[0005] 为了避免资源竞争,数据库系统不得不为OLTP和OLAP负载提供不同的数据副本。多个副本配置到不同的机器,从而隔离OLTP和OLAP负载的干扰。然而实时维护多个副本的
一致性是一个必须解决的问题。BatchDB和SAP HANA ATR通过主从复制的方式将OLTP主副
本的事务日志复制到OLAP从副本上,从而维护副本数据一致性。但是这种定制的复制方式
容易遇到数据不一致的异常,并且没有考虑系统的可用性和可扩展性。

发明内容

[0006] 本发明的主要目的在于提供一种基于共识算法的HTAP数据库系统,以解决现有数据库系统无法同时满足支持负载隔离、数据新鲜性、数据一致性、高可用性和可扩展性。
[0007] 为了实现上述目的,根据本发明的第一方面,提供了一种基于共识算法的HTAP数据库系统,所述HTAP数据库系统包括行列混存的分布式存储系统和分布式SQL执行引擎;
[0008] 所述行列混存的分布式存储系统包括行存库和列存库,所述列存库中存储的数据是通过在共识算法中引入的学习者异步地从所述行存库中复制并且转换格式而来;
[0009] 所述分布式SQL执行引擎,用于接收客户端发送的事务型请求和/或分析型请求,并在执行所述事务型请求和/或分析型请求时选择访问所述行存库和/或列存库,事务型请
求和分析型请求访问不同的列存库。
[0010] 可选地,所述行存库包括分块和共识组,所述列存库包括分片和学习者;
[0011] 所述分片和所述学习者存储列存格式的数据,所述列存格式的数据是所述共识组中引入的学习者按照复制状态机机制对所述行存库中对应的分块数据进行异步复制后,在
本地复制状态机中转换格式得到的。
[0012] 进一步地,所述共识组包括分块的至少三个副本,所述副本是采用共识算法按照复制状态机机制将分块中的数据进行多数派复制得到的,所述副本以行存格式存储数据。
[0013] 进一步地,所述列存库中的一个所述分片对应所述行存库中的一个所述分块或多个连续的所述分块;
[0014] 所述列存库中的一个学习者对应所述行存库中的一个共识组或多个连续的共识组;
[0015] 所述列存库中的一个分片被配置为所述列存库中的一个学习者或多个学习者。
[0016] 进一步地,所述分块是行存库中的表数据按照范围分区的方式进行切分得到的,所述分片是列存库中的表数据按照范围分区的方式进行切分得到的。
[0017] 进一步地,所述范围分区的方式包括:
[0018] 若分块的数据量或访问量大于预设范围的最大值,则切分该分块,且切分后各分块的数据量或访问量大于预设范围的最小值;
[0019] 若分块的数据量或访问量小于预设范围的最小值,则将该分块与和该分块连续的分块合并,且合并后分块的数据量或访问量小于预设范围的最大值。
[0020] 可选地,所述分布式SQL执行引擎,在执行所述事务型请求时访问执行代价小的所述行存库和/或所述列存库,在执行所述分析型请求时访问执行代价小的所述列存库和/或
所述行存库。
[0021] 进一步地,所述分布式SQL执行引擎在执行所述事务型请求时访问与分析型请求不同的列存库。
[0022] 进一步地,所述分布式SQL执行引擎在执行所述分析型请求时访问所述行存库中预设数据量的数据。
[0023] 可选地,所述列存库响应的分析型请求的数量多于事务型请求的数量,所述行存库响应的事务型请求的数量多于分析型请求的数量;
[0024] 所述列存库响应的分析型请求的数量多于所述行存库响应的分析型请求的数量,所述行存库响应的事务型请求的数量多于所述列存库响应的事务型请求的数量。
[0025] 本发明所提供的基于共识算法的HTAP数据库系统包括行列混存的分布式存储系统和分布式SQL执行引擎,所述行列混存的分布式存储系统包括行存库和列存库,所述列存
库中存储的数据是通过在共识算法中引入的学习者异步地从所述行存库中复制并且转换
格式而来;所述分布式SQL执行引擎用于接收客户端发送的事务型请求和/或分析型请求,
并将所述事务型请求调度至所述行存库,将所述分析型请求调度至所述列存库;通过引入
和行存库所存数据相同的列存库,然后将事务型请求和分析型请求调度到不同机器上执
行,达到了负载隔离的目的。

附图说明

[0026] 为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的
附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动
的前提下,还可以根据这些附图获得其他的附图。
[0027] 图1为本发明实施例提供的HTAP数据库系统架构图;
[0028] 图2为本发明实施例提供的复制机制图;
[0029] 图3为本发明实施例提供的分布式存储逻辑关系图。

具体实施方式

[0030] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是
本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人
员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范
围。
[0031] 需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用
的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具
有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的
过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清
楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0032] 在本发明中,术语“安装”、“设置”、“设有”、“连接”、“相连”、“套接”应做广义理解。例如,可以是固定连接,可拆卸连接,或整体式构造;可以是机械连接,或电连接;可以是直
接相连,或者是通过中间媒介间接相连,又或者是两个装置、元件或组成部分之间内部的连
通。对于本领域普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含
义。
[0033] 需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
[0034] 根据本发明实施例,提供一种基于共识算法的HTAP数据库系统,系统架构如图1所示,所述HTAP数据库系统包括行列混存的分布式存储系统和分布式SQL执行引擎;
[0035] 所述行列混存的分布式存储系统包括行存库和列存库,所述列存库中存储的数据是行存库所存储数据的子集;
[0036] 具体的,所述列存库中存储的数据可以根据实际需求被配置为和行存库所存储数据的内容相同或行存库所存储数据内容的一部分,且所述列存库和所述行存库所存储数据
的格式不同;在同一套HTAP数据库系统中同时具备行存库和列存库,可以避免不必要的ETL
过程,简化软件栈,节省维护和运维成本,降低复杂软件架构带来的技术风险,提升数据资
源的利用效率。
[0037] 所述分布式SQL执行引擎,用于接收客户端发送的事务型请求和/或分析型请求,并在执行事务型请求时访问所述行存库,在执行所述分析型请求时访问所述列存库。
[0038] 具体为,所述分布式SQL执行引擎接收客户端发送的事务型请求并将该事务型请求调度至行存库所在机器,接收客户端发送的分析型请求并将该分析型请求调度至列存库
所在机器,同时接收客户端发送的事务型请求和分析型请求并分别调度至行存库所在机器
和列存库所在机器;事务型请求包括读请求和写请求,分析型请求包括读请求,通过将不同
请求调度至不同库所在的机器上执行,以隔离所述事务型请求和所述分析型请求,保证
OLTP和OLAP查询的隔离性,实现资源隔离和负载隔离,同时保证OLTP和OLAP负载的写入和
读取效率。
[0039] 其中,所述行存库包括分块和共识组,所述列存库包括分片和学习者;
[0040] 所述分片和所述学习者存储列存格式的数据,所述列存格式的数据是所述共识组中引入的学习者按照复制状态机机制对所述行存库中对应的分块数据进行异步复制后,在
本地复制状态机中转换格式得到的。
[0041] 具体的,所述学习者为共识组按照复制状态机机制对所述行存库中的数据进行异步复制并将数据格式转换为列存之后得到的。共识组按照复制状态机机制,将行存库副本
中的日志异步复制到学习者,学习者将日志中行存格式的数据转化为列存格式的数据,并
将该列存格式的数据存储在复制状态机中。通过共识组的异步复制,将数据同步的耗时控
制在秒级,保证了数据的新鲜性。
[0042] 所述HTAP数据库系统包括行列混存的分布式存储系统和分布式SQL执行引擎,分布式存储系统包括行存库和列存库,行存库包括共识组,列存库包括学习者,且学习者中的
数据是通过异步复制共识组中的数据并转换数据格式后得到的;分布式SQL执行引擎将客
户端发送的数据查询请求调度至不同库所在的不同的机器,具体为,主要将事务型请求调
度到行存库所在的机器执行,并将分析型请求调度到列存库所在的机器执行。
[0043] 本发明实施例提供的复制机制如图2所示,通过共识模块采用共识算法进行多数派复制,将日志复制到副本1、副本2和副本3,各副本的日志顺序一致,并且日志应用到本地
之后,产生相同的结果;日志复制到一个共识组的大多数副本之后才能提交,并且返回给客
户端,已提交的数据可以被读请求读取,读写操作可以配置不同的隔离级别,例如快照隔
离;各副本中的复制状态机以行存格式存储数据,采用共识算法维护多副本一致性,保证了
系统的高可用性。共识组采用共识算法将一个副本通过共识模块按照复制状态机机制进行
异步复制,将日志中的行存格式的数据复制到学习者中,复制状态机将行存格式的数据转
化为列存格式的数据并存储。
[0044] 其中,所述共识组包括分块的至少三个副本,所述副本是采用共识算法按照复制状态机机制将分块中的数据进行多数派复制得到的,所述副本以行存格式存储数据。
[0045] 具体的,采用共识算法按照复制状态机机制,将每个分块中的数据多数派复制到至少三个副本,维护多副本一致性,保证了系统的高可用性。
[0046] 其中,所述列存库中的一个所述分片对应所述行存库中的一个所述分块或多个连续的所述分块;
[0047] 所述列存库中的一个学习者对应所述行存库中的一个共识组或多个连续的共识组;
[0048] 所述列存库中的一个分片被配置为所述列存库中的一个学习者或多个学习者。
[0049] 所述分块是行存库中的表数据按照范围分区的方式进行切分得到的,所述分片是列存库中的表数据按照范围分区的方式进行切分得到的。
[0050] 具体的,将行存库中的表数据切分成多个分块,保证了系统的高可扩展性。
[0051] 其中,所述范围分区的方式包括:
[0052] 若分块的数据量或访问量大于预设范围的最大值,则切分该分块,且切分后各分块的数据量或访问量大于预设范围的最小值;
[0053] 若分块的数据量或访问量小于预设范围的最小值,则将该分块与和该分块连续的分块合并,且合并后分块的数据量或访问量小于预设范围的最大值。
[0054] 具体的,分块的访问量包括访问该分块的数据查询请求的数量和数据查询请求访问该分块的数据量,所述数据量或访问量的预设范围可以根据系统负载进行设置或调整,
例如,将数据量的预设范围设为1MB‑1GB。
[0055] 本发明实施例提供的分布式存储逻辑关系如图3所示,将表数据划分为多个分块,保证系统的高可扩展性,每个分块采用共识算法按照复制状态机机制进行多数派复制,将
分块中的数据复制到至少三个副本,保证系统的高可用性,一个分块的所有副本构成共识
组,共识组按照复制状态机机制进行异步复制,将日志复制到分片和学习者并以列存格式
存储,分片进行日志回放,即分片解析出已经提交的行存数据,并将行存格式的数据转换成
列存格式的数据存放到本地,然后该列存格式的数据可以被读取。需要注意的是,本图为逻
辑关系图,图中分块和分片是表的逻辑概念,不代表表数据的具体存储位置,具体数据存储
在行存库和列存库中的不同副本和学习者。
[0056] 其中,所述分布式SQL执行引擎,还用于在执行所述事务型请求时访问所述列存库,在执行所述分析型请求时访问所述行存库。
[0057] 所述分布式SQL执行引擎采用两阶段提交的方式执行事务,并且支持乐观事务以及悲观事务。行存库主要用于物化事务型请求,所有的事务修改都物化到行存库中。对于访
问每张表的数据查询请求,行存库提供两种访问路径:行扫描和索引扫描,列存库提供一种
访问路径:列扫描,这三种不同的访问路径提供不同的顺序属性和代价,查询优化器可以选
择这三种访问路径,因此,同一个数据查询请求访问不同表时会采用不同的访问路径。
[0058] 具体的,所述分布式SQL执行引擎在执行所述事务型请求时访问与分析型请求不同的列存库;
[0059] 所述分布式SQL执行引擎在执行所述分析型请求时访问所述行存库中预设数据量的数据;
[0060] 所述分布式SQL执行引擎在执行的过程中将事务型请求和分析型请求调度到不同的机器上执行,它们分别访问行存库和列存库,这种资源隔离能够保证事务型请求和分析
型请求分别达到高性能,减少性能干扰。同时,在保证隔离性的前提下,事务型请求和分析
型请求可以同时访问行存库和列存库。事务型请求可以访问单独设置的列存库,所述单独
设置的列存库与分析型请求访问的列存库分隔开,以隔离对所述分析型请求的干扰;分析
型请求访问行存库时访问所述行存库中预设数据量的数据,该预设数据量的值较小,只会
涉及到小范围数据,并且可根据实际需求配置或调整预设数据量的值,使分析型请求访问
的数据量受到限制,以隔离对所述事务型请求的干扰。
[0061] 具体的,所述列存库响应的分析型请求的数量多于事务型请求的数量,所述行存库响应的事务型请求的数量多于分析型请求的数量;
[0062] 所述列存库响应的分析型请求的数量多于所述行存库响应的分析型请求的数量,所述行存库响应的事务型请求的数量多于所述列存库响应的事务型请求的数量。
[0063] 从以上的描述中,可以看出,本发明实现了如下技术效果:
[0064] 将行存库中的表数据切分成多个分块,保证了系统的高可扩展性;采用共识算法将每个分块中的数据多数派复制到至少三个副本,维护多副本一致性,保证了系统的高可
用性;在同一套HTAP数据库系统中同时具备行存库和列存库,可以避免不必要的ETL过程,
简化软件栈,节省维护和运维成本,降低复杂软件架构带来的技术风险,提升数据资源的利
用效率;共识组按照复制状态机机制将数据异步复制到学习者,耗时在秒级,保证了数据的
新鲜性;通过将不同请求调度至不同库所在的机器上执行,保证OLTP和OLAP查询的隔离性,
实现资源隔离和负载隔离,同时保证OLTP和OLAP负载的写入和读取效率。
[0065] 虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求
所限定的范围之内。