一种面向分布式内存数据库查询引擎的数据分发方法与流程

文档序号:11251056阅读:1272来源:国知局
一种面向分布式内存数据库查询引擎的数据分发方法与流程

本发明涉及数据库数据处理领域,具体地,涉及一种面向分布式内存数据库查询引擎的数据分发方法。



背景技术:

数据库查询引擎负责执行数据查询任务的部分,接收用户的查询请求,向用户返回查询结果,屏蔽具体的查询执行过程。查询引擎对外提供标准sql的查询接口,向用户返回与传统数据库系统相同组织形式的查询结果,可向上适配任意满足sql标准的客户端或中间件。同时向下适配满足该查询引擎协议的列式存储系统。

数据库查询引擎其主要承担的职责或功能如下:

1、解析用户的sql查询语句,生成查询计划;

2、基于规则和代价对查询计划进行优化,使之具有最小的预估执行代价;

3、与数据存储系统交互,执行查询计划,获取数据;

4、根据查询条件进行数据的计算和合并;

5、生成最终查询结果,返回给用户。

目前主流分布式内存数据库查询引擎的中间数据切分方式是固定的,但也因此限制了算子的扩展方式。如果算子的扩展方式被限制,则会导致任务并行度降低。因为sql查询语句在查询引擎中会转换为一个dag物理计划,如果在任务推进过程中数据无法二次切分,随着任务的推进,后继任务数目会越来越少,并行度必然大大降低。

综上所述,本申请发明人在实现本申请发明技术方案的过程中,发现上述技术至少存在如下技术问题:

在现有技术中,现有的分布式内存数据库查询引擎存在限制了算子的扩展方式导致任务并行度降低的技术问题。



技术实现要素:

本发明提供了一种面向分布式内存数据库查询引擎的数据分发方法,解决了现有的分布式内存数据库查询引擎存在限制了算子的扩展方式导致任务并行度降低的技术问题,提高了任务并行度的技术效果。

为解决上述技术问题,本申请提供了一种面向分布式内存数据库查询引擎的数据分发方法,所述方法包括:

数据库查询引擎中的前置算子计算完成后,数据库查询引擎对计算完成后的数据进行切分,然后将切分后的数据分发给数据库查询引擎中的后继算子。

本发明是一种面向分布式内存数据库的数据分发方法。切片方式及分发策略相当于mapreduce或者spark任务中,中间数据如何分发shuffle。

进一步的,前置算子中计算完成后的数据切分后按照一个前置算子分区对应一个后继算子分区的方式分发给后继算子,或前置算子中计算完成后的数据按照多个前置算子分区对应一个后继算子分区的方式分发给后继算子。

进一步的,前置算子分区按照特定的哈希(hash)函数将切分后的数据分发给后继算子分区。

进一步的,前置算子包括:一元算子、二元算子、无前置算子。

进一步的,当前置算子为getcolumn算子时:

getcolumn算子为物理执行计划中的第一个算子,只需要获取这一列的数据。因此我们不需要设置十分复杂的数据分布方式,只需要指定分片数(默认分片数等于存储引擎中该列数据的分片数即slice数),然后按照轮询调度(roundrobin)的方式和存储引擎中该列数据的分片数slice对应起来。

进一步的,当前置算子为filter算子时:

filter算子是对行号rowid进行处理,我们可以指定filter算子按照哈希散列hashdistribution的方式进行处理。hash函数为fhash=rowid%filter_num。这样就保证了左右算子相同的rowid分布到相同的filter的算子中,而且数据不需要重复传输。

进一步的,当前置算子为join算子时:

由于join算子是olap(海量数据联机分析处理业务)中的核心算子,所以我们对join算子提出了多种优化策略。

分布式内存数据库系统的元数据负责收集数据库存储引擎的数据分布信息,为每张表的每个列生成数据直方图统计信息。join算子执行过程中需要判断前置输入来源于大表还是小表,大小表根据数据直方图元数据信息界定。

如果前置算子中某个表是小表,采用将小表数据转发至存放大表数据节点ordereddistribution的方案,分发shuffle过程简单,而且增加的数据传输量也不大,这种方案具有明显的优势。然后join算子内部采用内部采用hashjoin进行连接操作join。

如果前置算子并没有明显的大小表关系。采用哈希散列hashdistribution的方案,hash函数为。然后内部采用排序合并连接sortmergejoin算法。

本方案所提出的数据分发策略,指的是前置算子计算完成后,选取最佳的切分方式对数据进行切分,然后将结果通过最佳分发方法发送给下一个物理算子。通过该数据分发策略,可以避免后继任务数目的减少,大大提高了并行度,从而使得数据库查询引擎在计算过程中始终可以充分利用物理资源。

本申请提供的一个或多个技术方案,至少具有如下技术效果或优点:

根据本方案提出的数据切片方式,可以自由指定后继任务的个数,从而避免了后继任务并行度降低的情况。在对查询引擎进行性能测试过程中发现,相对于传统分布式内存数据库的数据切分方案,本方案对每一个任务都进行了针对性的数据切分方式和分发方式的选择。避免了在查询引擎中由于任务数量不断减少而导致的并行度降低的问题,满足了分布式内存数据库查询引擎在计算过程中始终可以充分利用物理资源的需求。

附图说明

此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定;

图1是本申请中的一对一分发方式示意图;

图2是本申请中的多对一分发方式示意图;

图3是本申请中的join算子中对数据的哈希分发方式示意图;

图4是本申请中的join算子中对数据的范围分发方式示意图;

图5是本申请中的getcolumn算子中对数据的轮询调度分发方式示意图;

图6是本申请中的filter算子对行号的哈希分发方式示意图;

图7是本申请中的join算子在前置算子有明显的大小表关系时的分发策略示意图;

图8是本申请中join算子在前置算子没有明显的大小表关系时的分发策略示意图。

具体实施方式

本发明提供了一种面向分布式内存数据库查询引擎的数据分发方法,解决了现有的分布式内存数据库查询引擎存在限制了算子的扩展方式导致任务并行度降低的技术问题,提高了任务并行度的技术效果。

为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在相互不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述范围内的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。

请参考图1,本申请提供了一种面向分布式内存数据库查询引擎的数据分发方法,所述方法包括:

数据库查询引擎中的前置算子计算完成后,数据库查询引擎对计算完成后的数据进行切分,然后将切分后的数据分发给数据库查询引擎中的后继算子。

根据不同算子面临的不同情况提出了多种数据分片方式,主要包含以下三种:

1.singledistribution:

前置算子分区采取一对一,或者多对一的方式将数据发送给后继算子分区,请参考图1-图2。

2.hashdistribution:

前置算子分区将数据按照特定的hash函数将数据分发给后继算子分区。这种方式的优点是灵活,只需要知道后继算子的分区数,就能确定某条数据需要发送给哪个分区,请参考图3。

3.ordereddistribution:

ordereddistribution可以理解成是hashdistribution的一种特例,只是hash函数为按照值范围映射,请参考图4。

查询引擎中涉及到的物理算子按照前置算子的个数可以分为:一元算子,二元算子,无前置算子。下面列举出其中以上各类中的主要算子:无前置算子:getcolumn算子、一元算子:order算子、二元算子:filter算子、join算子。

因为一元算子不会导致后续任务数量减少,所以下面列举getcolumn算子、filter算子、join算子利用本数据切片策略后的具体执行流程。

getcolumn算子:

请参考图5,getcolumn算子为物理执行计划中的第一个算子,只需要获取这一列的数据。因此我们不需要设置十分复杂的数据分布方式,只需要指定分片数(默认分片数等于slice数),然后按照roundrobin的方式和slice对应起来。

filter算子:

请参考图6,filter算子是对rowid进行处理,我们可以指定filter算子按照hashdistribution的方式进行处理。hash函数为fhash=rowed%filter_num。这样就保证了左右算子相同的rowid分布到相同的filter的算子中,而且数据不需要重复传输。

join算子:

由于join算子是olap中的核心算子,所以我们对join算子提出了多种优化策略。

系统的元数据负责收集数据库存储引擎收集数据分布情况,为每张表的每个列生成数据直方图统计信息。join算子执行过程中需要判断前置输入来源于大表还是小表,大小表根据数据直方图元数据信息界定。

请参考图7,如果前置算子中某个表是小表,采用ordereddistribution的方案,shuffle过程简单,而且增加的数据传输量也不大,这种方案具有明显的优势。然后join算子内部采用hashjoin进行join。

请参考图8,如果前置算子并没有明显的大小表关系。采用hashdistribution的方案,hash函数为fhash=value%join_num。然后内部采用sortmergejoin算法。

本发明是一种面向分布式内存数据库的数据分发方法。切片方式及分发策略相当于mapreduce或者spark任务中,中间数据如何shuffle。

方案所提出的数据切分策略,指的是前置算子计算完成后,选取最佳的切分方式对数据进行切分,然后将结果发送给下一个物理算子。

方案中对每一个任务都进行了针对性的数据切分方式和分发方式的选择。避免了在查询引擎中由于任务数量不断减少而导致的并行度降低的问题,满足了分布式内存数据库查询引擎在计算过程中始终可以充分利用物理资源的需求。

上述本申请实施例中的技术方案,至少具有如下的技术效果或优点:

根据本方案提出的数据切片方式,可以自由指定后继任务的个数,从而避免了后继任务并行度降低的情况。在对查询引擎进行性能测试过程中发现,相对于传统分布式内存数据库的数据切分方案,本方案对每一个任务都进行了针对性的数据切分方式和分发方式的选择。避免了在查询引擎中由于任务数量不断减少而导致的并行度降低的问题,满足了分布式内存数据库查询引擎在计算过程中始终可以充分利用物理资源的需求。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1