一种列式数据库处理方法及装置与流程

文档序号:16723993发布日期:2019-01-25 16:41阅读:193来源:国知局
一种列式数据库处理方法及装置与流程

本发明涉及数据分析领域,尤其涉及一种列式数据库处理方法及装置。



背景技术:

在数据分析领域的联机分析处理(Online Analytical Processing,简称OLAP)场景中,由于列式数据库比行式数据库更适用于该OLAP场景,使得列式数据库成为现今数据分析领域OLAP场景的最热门的数据库技术。列式数据库在进行数据存储时,通常是先将用户定义的数据表分成多列,每列单独形成一个文件。这样在进行大量数据分析时,列式数据库只需读取查询语句中的列就可以了,所以当数据量比较大的时候,处理的效率会比较高。

然而,发明人发现,列式数据库虽然存在上述的优点,但是当对数据库的数据进行处理时,由于列式数据库的算子(operator)一次是处理一列数据,需要数据在Cache多次的换入换出,使得缓存Cache利用率较低。并且当一列数据的大小超过Cache的大小时,会将列的数据库从Cache中写入内存,然后重新载入Cache中,这样增加了列式数据库处理数据的处理时间。因此,如何提高Cache的利用率,以及如何减少列式数据库处理数据的处理时间,是目前业界期待解决的问题。



技术实现要素:

本发明的实施例提供一种列式数据库处理方法及装置,能够提高Cache的利用率,并降低列式数据库处理数据的处理时间。

第一方面,提供一种列式数据库处理方法,包括:

获取列式数据库的数据库操作语句,并根据所述数据库操作语句生成第一执行图;

将所述第一执行图中的算子进行分组,生成至少一组分组信息,其中每组分组信息对应一个分组;

根据所述至少一组分组信息修改所述第一执行图的执行过程,生成第二执行图;

按照所述第二执行图处理所述列式数据库中的数据。

在第一方面的第一种可能的实现方式中,所述将所述第一执行图中的算子进行分组,生成至少一组分组信息,包括:

遍历所述第一执行图,依次判断所述第一执行图中的每个算子是否具备屏障特征;

若当前判断的算子具备屏障特征,则结束当前分组,生成所述当前分组的分组信息,并生成新的分组;

若所述当前判断的算子不具备屏障特征,则将所述当前判断的算子并入所述当前分组中;

其中,所述屏障特征为包含用户预选的特定操作,所述特定操作为以下操作中的任意一个:选择操作、多表输入操作、输出到多个算子操作。

结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述根据所述至少一组分组信息修改所述第一执行图的执行过程,生成第二执行图包括:

根据所述至少一组分组信息中的各分组信息分别修改所述每个分组信息对应的分组的执行过程;

将修改后的所述每个分组信息对应的分组的执行过程进行整合,生成所述第二执行图。

结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述分组信息包括算子信息列表,所述算子信息列表为所述分组内的各算子以及每个算子对应的算子类型的关系表,其中,所述算子类型为顺序算子、多趟算子或一般算子,所述一般算子是指除顺序算子、多趟算子以外的其他类型的算子。

结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述分组信息还包括分组标识;其中,若所述分组标识为顺序标识则表明所述分组信息对应分组中的算子均为顺序算子,若所述分组标识为多趟标识则表明所述分组信息对应分组中的算子包含多趟算子,若所述分组信息不包含分组标识则表明所述分组信息对应分组中的算子均为一般算子。

结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,所述根据所述至少一组分组信息中的各分组信息分别修改所述每个分组信息对应的分组的执行过程,包括:

若第一分组信息中的分组标识为顺序标识,则对所述列式数据库的每列数据进行分段处理,并通过所述第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理;

或者,

若所述第一分组信息中的分组标识为多趟标识,则调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子;

或者,

若所述第一分组信息中不包含分组标识,则不修改所述第一分组信息对应的分组的执行过程;

其中,所述第一分组信息为所述至少一组分组信息中的一个分组信息。

结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述若所述第一分组信息中的分组标识为多趟标识,则调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子,包括:

若所述第一分组信息中的分组标识为多趟标识,则根据所述第一分组的所有多趟算子从信息映射表中调用所述合并算子,并利用所述合并算子替换所述第一分组中的所有算子;其中,所述信息映射表为多趟算子与合并算子的映射关系表。

结合第一方面的第五种可能的实现方式或第六种可能的实现方式,在第七种可能的实现方式中,若所述合并算子为顺序算子,则

所述调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子之后,还包括:

对所述列式数据库的每列数据进行分段处理,并通过所述合并算子按照分段后每段数据的先后顺序依次进行处理。

结合第一方面的第四种可能的实现方式,在第八种可能的实现方式中,所述根据所述至少一组分组信息中的各分组信息分别修改所述每个分组信息对应的分组的执行过程,包括:

若所述第一分组信息中算子信息列表中的所有算子均为顺序算子,则对所述列式数据库的每列数据进行分段处理,并通过所述第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理;

或者,

若所述第一分组信息中算子信息列表中的算子包含多趟算子,则调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子;

或者,

若所述第一分组信息中算子信息列表中的算子为一般算子,则不修改所述第一分组信息对应的分组的执行过程;

其中,所述第一分组信息为所述至少一组分组信息中的一个分组信息。

第二方面,提供一种列式数据库处理装置,包括:

生成模块,用于获取列式数据库的数据库操作语句,并根据所述数据库操作语句生成第一执行图;

分组模块,用于将所述第一执行图中的算子进行分组,生成至少一组分组信息,其中每组分组信息对应一个分组;

处理模块,用于根据所述分组模块生成的至少一组分组信息修改所述第一执行图的执行过程,生成第二执行图;

执行模块,用于按照所述第二执行图处理所述列式数据库中的数据。

在第二方面的第一种可能的实现方式中,所述分组模块具体用于:遍历所述第一执行图,依次判断所述第一执行图中的每个算子是否具备屏障特征;若当前判断的算子具备屏障特征,则结束当前分组,生成所述当前分组的分组信息,并生成新的分组;若所述当前判断的算子不具备屏障特征,则将所述当前判断的算子并入所述当前分组中;

其中,所述屏障特征为包含用户预选的特定操作,所述特定操作为以下操作中的任意一个:选择操作、多表输入操作、输出到多个算子操作。

结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述处理模块包括:

处理单元,用于根据所述分组模块生成的所述至少一组分组信息中的各分组信息分别修改所述每个分组信息对应的分组的执行过程;

整合单元,用于将修改后的所述每个组分组信息对应的分组的执行过程进行整合,生成所述第二执行图。

结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述分组信息包括算子信息列表,所述算子信息列表为所述分组内的各算子以及每个算子对应的算子类型的关系表,其中,所述算子类型为顺序算子、多趟算子或一般算子,所述一般算子是指除顺序算子、多趟算子以外的其他类型的算子。

结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述分组信息还包括分组标识;其中,若所述分组标识为顺序标识则表明所述分组信息对应分组中的算子均为顺序算子,若所述分组标识为多趟标识则表明所述分组信息对应分组中的算子包含多趟算子,若所述分组信息不包含分组标识则表明所述分组信息对应分组中的算子均为一般算子。

根据第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述处理单元具体用于:

若第一分组信息中的分组标识为顺序标识,则对所述列式数据库的每列数据进行分段处理,并通过所述第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理;

或者,

若所述第一分组信息中的分组标识为多趟标识,则调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子;

或者,

若所述第一分组信息中不包含分组标识,则不修改所述第一分组信息对应的分组的执行过程;

其中,所述第一分组信息为所述至少一组分组信息中的一个分组信息。

结合第二方面的第五种可能的实现方式,在第六种可能的实现方式中,所述若所述第一分组信息中的分组标识为多趟标识,则调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子,具体为用于:

若所述第一分组信息中的分组标识为多趟标识或所述第一分组信息中算子信息列表中的算子包含多趟算子,则根据所述第一分组的所有多趟算子从信息映射表中调用所述合并算子,并利用所述合并算子替换所述第一分组中的所有算子;其中,所述信息映射表为多趟算子与合并算子的映射关系表。

结合第二方面的第五种可能的实现方式或第六种可能的实现方式,在第七种可能的实现方式中,若所述合并算子为顺序算子,则

所述处理单元,还用于在调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子之后,对所述列式数据库的每列数据进行分段处理,并通过所述合并算子按照分段后每段数据的先后顺序依次进行处理。

结合第二方面的第四种可能的实现方式,在第八种可能的实现方式中,所述处理单元具体用于:

若所述第一分组信息中算子信息列表中的所有算子均为顺序算子,则对所述列式数据库的每列数据进行分段处理,并通过所述第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理;

或者,

若所述第一分组信息中算子信息列表中的算子包含多趟算子,则调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子;

或者,

若所述第一分组信息中算子信息列表中的算子为一般算子,则不修改所述第一分组信息对应的分组的执行过程;

其中,所述第一分组信息为所述至少一组分组信息中的一个分组信息。

第三方面,提供一种列式数据库处理装置,包括处理器和存储器,所述存储器存储执行指令,当所述装置运行时,所述处理器与所述存储器之间通信,所述处理器执行所述执行指令使得所述装置执行如下方法:

获取列式数据库的数据库操作语句,并根据所述数据库操作语句生成第一执行图;

将所述第一执行图中的算子进行分组,生成至少一组分组信息,其中每组分组信息对应一个分组;

根据所述至少一组分组信息修改所述第一执行图的执行过程,生成第二执行图;

按照所述第二执行图处理所述列式数据库中的数据。

在第三方面的第一种可能的实现方式中,所述处理器执行的方法中,所述将所述第一执行图中的算子进行分组,生成至少一组分组信息,包括:遍历所述第一执行图,依次判断所述第一执行图中的每个算子是否具备屏障特征;若当前判断的算子具备屏障特征,则结束当前分组,生成所述当前分组的分组信息,将所述分组信息存入所述存储器,并生成新的分组;若所述当前判断的算子不具备屏障特征,则将所述当前判断的算子并入所述当前分组中;

其中,所述屏障特征为包含用户预选的特定操作,所述特定操作为以下操作中的任意一个:选择操作、多表输入操作、输出到多个算子操作。

结合第三方面或第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述处理器执行的所述方法中,所述根据所述至少一组分组信息修改所述第一执行图的执行过程,生成第二执行图包括:根据所述至少一组分组信息中的各分组信息分别修改所述每个分组信息对应的分组的执行过程;将修改后的所述每个分组信息对应的分组的执行过程进行整合,生成所述第二执行图。

结合第三方面的第二种可能的实现方式,在第三种可能的实现方式中,所述分组信息包括算子信息列表,所述算子信息列表为所述分组内的各算子以及每个算子对应的算子类型的关系表,其中,所述算子类型为顺序算子、多趟算子或一般算子,所述一般算子是指除顺序算子、多趟算子以外的其他类型的算子。

结合第三方面的第三种可能的实现方式,在第四种可能的实现方式中,所述分组信息还包括分组标识;其中,若所述分组标识为顺序标识则表明所述分组信息对应分组中的算子均为顺序算子,若所述分组标识为多趟标识则表明所述分组信息对应分组中的算子包含多趟算子,若所述分组信息不包含分组标识则表明所述分组信息对应分组中的算子均为一般算子。

结合第三方面的第四种可能的实现方式,在第五种可能的实现方式中,所述处理器执行的所述方法中,所述根据所述至少一组分组信息中的各分组信息分别修改所述每个分组信息对应的分组的执行过程,包括:

若第一分组信息中的分组标识为顺序标识,则对所述列式数据库的每列数据进行分段处理,并通过所述第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理;

或者,

若所述第一分组信息中的分组标识为多趟标识,则调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子;

或者,

若所述第一分组信息中不包含分组标识,则不修改所述第一分组信息对应的分组的执行过程;

其中,所述第一分组信息为所述至少一组分组信息中的一个分组信息。

结合第三方面的第五种可能的实现方式,在第六种可能的实现方式中,所述处理器执行的所述方法中,所述若所述第一分组信息中的分组标识为多趟标识,则调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子,包括:若所述第一分组信息中的分组标识为多趟标识,则根据所述第一分组的所有多趟算子从信息映射表中调用所述合并算子,并利用所述合并算子替换所述第一分组中的所有算子;其中,所述信息映射表为多趟算子与合并算子的映射关系表。

结合第三方面的第五种可能的实现方式或第六种可能的实现方式,在第七种可能的实现方式中,若所述合并算子为顺序算子,则

所述处理器执行的所述方法中,所述调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子之后,还包括:对所述列式数据库的每列数据进行分段处理,并通过所述合并算子按照分段后每段数据的先后顺序依次进行处理。

结合第三方面的第四种可能的实现方式,在第八种可能的实现方式中,所述处理器执行的所述方法中,所述根据所述至少一组分组信息中的各分组信息分别修改所述每个分组信息对应的分组的执行过程,包括:

若所述第一分组信息中算子信息列表中的所有算子均为顺序算子,则对所述列式数据库的每列数据进行分段处理,并通过所述第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理;

或者,

若所述第一分组信息中算子信息列表中的算子包含多趟算子,则调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子;

或者,

若所述第一分组信息中算子信息列表中的算子为一般算子,则不修改所述第一分组信息对应的分组的执行过程;

其中,所述第一分组信息为所述至少一组分组信息中的一个分组信息。

本发明的实施例提供的列式数据库处理方法及装置,通过将执行图中所有的算子进行分组,生成至少一组分组信息,并根据该至少一组分组信息修改执行图的执行过程,从而优化了整个执行图的执行过程,最后根据优化后新的执行图处理该列式数据库中的数据,从而减少数据在Cache中的换入换出次数,提高了Cache的利用率,并降低了列式数据库处理数据的处理时间。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明的实施例提供的一种列式数据库处理方法的流程示意图;

图2为本发明的实施例提供的另一种列式数据库处理方法的流程示意图;

图3为本发明的实施例提供的一种算子处理分组后的列数据示意图;

图4为本发明的实施例提供的一种合并分组中算子的示意图;

图5为本发明的实施例提供的一种列式数据库处理装置的结构示意图;

图6为本发明的实施例提供的另一种列式数据库处理装置的结构示意图;

图7为本发明的另一实施例提供的一种列式数据库处理装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

列式数据库是现今数据分析领域最热门的数据库技术之一,并且该列式数据库在对数据进行处理时,通常都是运行在普通服务器上的数据库管理系统中,数据库管理系统首先会将用户提交的SQL(Structured Query Language,结构化查询语言)转换成一个执行树,然后进一步的将该执行树翻译为一个执行图,该执行图中的每个节点即称为一个算子,每个算子会处理一个或多个完整的列。并且由于列式数据库在处理数据时,一次仅处理一列,需要数据在Cache中多次的换入换出,使得Cache缓存的利用率不高,而基于上述的应用场景,本发明提供了一种新的列式数据库处理方法。

如图1所示,本发明的实施例提供的一种列式数据库处理方法,具体包括如下步骤:

101、列式数据库处理装置获取该列式数据库的数据库操作语句,并根据数据库操作语句生成第一执行图。

具体的,列式数据库处理装置在获取到用户提交的SQL语言后,根据语法将该SQL语句解析成对应的执行树。此时,由于一个SQL查询语句通过编译分解后,可能存在一些效率不高的操作,因此,在生成执行树后根据既有的规则对这棵执行树进行优化,如进行select下推,重复算子的合并等功能,从而降低了整个执行树的计算强度。完成对这棵执行树的优化后,进一步的,将该执行树翻译成一张执行图,该执行图的每个节点都对应一个算子,而每个算子都对应一个可执行的函数,使得该列式数据库处理装置按照该执行图进行函数调用,从而完成结果输出。

102、列式数据库处理装置将第一执行图中的算子进行分组,生成至少一组分组信息。

其中,上述的至少一组分组信息中的每组分组信息分别对应一个分组。而上述的分组信息至少包括算子信息列表,该算子信息列表为该分组内的各算子以及每个算子对应的算子类型的关系表,可以为一个线性表结构,具体的,该算子信息列表可以是一个算子与算子类型的映射关系表,且每个表节点存储一个算子的算子信息,而该算子信息包括该算子的算子类型;上述的算子类型包括顺序算子、多趟算子和一般算子这三种类型。其中,上述的顺序算子是指在对每列数据进行分段处理(这里的分段处理指的是将一列数据分为多段,算子依次对每段数据进行处理)之后,经过简单合并就能得到结果的算子;而多趟算子是指不能简单通过分段处理之后,合并就能得到结果的算子,如,group by,order,join等;而该一般算子是指除顺序算子、多趟算子以外的其他类型的算子。

进一步的,上述的分组信息还可以包括分组标识。其中,当该分组信息中的分组标识为顺序标识时,则表明该分组信息对应分组中的算子均为顺序算子;当该分组信息中的分组标识为多趟标识时,则表明该分组信息对应分组中的算子包含多趟算子;当该分组信息不包含分组标识时,则表明该分组信息对应分组中的算子均为一般算子。

103、列式数据库处理装置根据至少一组分组信息修改第一执行图的执行过程,生成第二执行图。

具体的,按照每组分组信息对应分组中算子的算子类型,对每个分组的执行过程做不同的修改,如,对列式数据库的每列数据进行分段,或将分组中所有的算子进行合并。

104、列式数据库处理装置按照第二执行图处理该列式数据库中的数据。

本发明的实施例提供的列式数据库处理方法,通过将执行图中所有的算子进行分组,生成至少一组分组信息,并根据该至少一组分组信息中每组分组信息对应修改该分组信息对应分组的执行过程,从而优化了整个执行图的执行过程,最后根据优化后新的执行图处理该列式数据库中的数据,从而减少数据在Cache中的换入换出次数,提高了Cache的利用率,并降低了列式数据库处理数据的处理时间。

本发明的实施例提供了一种列式数据库处理方法,如图2所示,该方法具体包括如下步骤:

201、列式数据库处理装置获取列式数据库的数据库操作语句,并根据数据库操作语句生成第一执行图。

具体的,列式数据库处理装置在获取到用户提交的SQL查询语句后,根据语法将该SQL语句解析成对应的执行树。此时,由于一个SQL查询语句通过编译分解后,可能存在一些效率不高的操作,因此,在生成执行树后根据既有的规则对这棵执行树进行优化,如进行select下推,重复算子的合并等功能,从而降低了整个执行树的计算强度。完成对这棵执行树的优化后,进一步的,将该执行树翻译成一张执行图,该执行图的每个节点都对应一个operator算子,而每个算子都对应一个可执行的函数,使得该列式数据库处理装置按照该执行图进行函数调用,从而完成结果输出。

202、列式数据库处理装置将该第一执行图中的所有算子进行分组,生成至少一组分组信息。

可选的,步骤202具体包括如下步骤:

202a、列式数据库处理装置遍历该第一执行图,依次判断第一执行图中的每个算子是否具备屏障特征。

其中,该屏障特征为特殊算子的算子特征。该特殊算子为包含有用户根据实际应用场景或用户根据实际输入的查询语句预先挑选出的具有特定操作的算子,即该屏障特征为包含用户预选的特定操作。具体的,上述特定操作为以下操作中的任意一个:选择操作,如,select算子,多表输入操作,如,join算子,输出到多个算子操作。需要说明的是,上述的三种特定操作在这里只是一种示例,实际应用时并不限于此。

若当前判断的算子具备屏障特征,则转到步骤202b,若当前判断的算子不具备屏障特征,则转到步骤202c。

202b、若当前判断的算子具备屏障特征,则列式数据库处理装置结束当前分组,生成当前分组的分组信息,并生成新的分组。

202c、若当前判断的算子不具备屏障特征,则列式数据库处理装置将当前判断的算子并入当前分组中。

具体的,在对步骤201所生成的第一执行图中所有的算子进行分组时,是按照上述第一执行图中算子的先后顺序依次判断该执行图中的算子是否具备屏障特征。具体的,列式数据库处理装置在对该第一执行图中的所有算子进行分组时,首先,初始化一个第一分组,然后,依次判断该第一执行图中的每个算子是否具备屏障特征,当判断出第二个具备屏障特征的算子时,则结束第一分组,生成该第一分组对应的分组信息,以及生成第二分组,并将该第二个具备屏障特征的算子存入该第二分组中,随后,依次判断剩余算子,将剩余算子进行分组。

此外,上述的至少一组分组信息中的每组分组信息分别对应一个分组。而上述的分组信息至少包括算子信息列表,该算子信息列表为该分组内的各算子以及每个算子对应的算子类型的关系表,可以为一个线性表结构,具体的,该算子信息列表可以是一个算子与算子类型的映射关系表,且每个表节点存储一个算子的算子信息,而该算子信息包括该算子的算子类型;上述的算子类型包括顺序算子、多趟算子和一般算子这三种类型。其中,上述的顺序算子是指在对每列数据进行分段处理(这里的分段处理指的是将一列数据分为多段,算子依次对每段数据进行处理)之后,经过简单合并就能得到结果的算子;而多趟算子是指不能简单通过分段处理之后,合并就能得到结果的算子,如,group by,order,join等;而该一般算子是指除顺序算子、多趟算子以外的其他类型的算子。

进一步的,上述的分组信息还可以包括分组标识。其中,当该分组信息中的分组标识为顺序标识时,则表明该分组信息对应分组中的算子均为顺序算子;当该分组信息中的分组标识为多趟标识时,则表明该分组信息对应分组中的算子包含多趟算子;当该分组信息不包含分组标识时,则表明该分组信息对应分组中的算子均为一般算子。

203、列式数据库处理装置根据该至少一组分组信息修改第一执行图的执行过程,生成第二执行图。

具体的,按照每组分组信息对应分组中算子的算子类型,依次对每个分组的执行过程做不同的修改,如,对列式数据库的每列数据进行分段,或将分组中所有的算子进行合并。

可选的,步骤203具体包括如下步骤:

203a、列式数据库处理装置根据至少一组分组信息中的各分组信息修改每个分组信息对应的分组的执行过程。

203b、列式数据库处理装置将修改后的每个组分组信息对应的分组的执行过程进行整合,生成第二执行图。

进一步,可选的,步骤203a具体包括如下步骤:

203a1、若第一分组信息中的分组标识为顺序标识或第一分组信息中算子信息列表中的所有算子均为顺序算子,则列式数据库处理装置对列式数据库的每列数据进行分段处理,并通过第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理。

具体的,当第一分组中的算子均为顺序算子时,则表明该第一分组可以在对列数据进行分段处理后,经过简单合并便可得到执行结果。因此,当第一分组中的算子均满足顺序算子的条件,则改变该第一分组的执行过程。具体的,如图3所示的算子处理分组后的列数据示意图,该第一分组的执行过程的修改流程为:首先,将该列式数据库中的每列数据进行分段,且每列数据分段的结果相同;然后,按照该执行图中所有算子的先后顺序依次并行处理该列式数据库的每列数据,需要说明的是,该执行图中的每个算子在对该列式数据库中的每列数据并行处理时,是按照每列数据在分段后得到的每段数据的先后顺序依次对每列数据的同一段数据进行处理。

此外,由于分段后的列数据的大小能够在CPU的数据Cache中完全存在,且多个算子之间切换时Cache中的数据无需写入内存,极大的减少了内存总线的消耗。此外,CPU对Cache中数据的读写速度是内存中的10倍左右,因此,对列式数据库的列数据进行分段操作,减少数据在Cache中的换入换出次数,明显的提高了Cache的利用率,并降低了处理列式数据库数据的时间。

或者,

203a2、若第一分组信息中的分组标识为多趟标识或第一分组信息中算子信息列表中的算子包含多趟算子,则列式数据库处理装置调用合并算子,并将第一分组信息对应的分组的所有算子替换为合并算子。

具体的,当该第一分组中的算子包含多趟算子时,则说明该第一分组不能简单利用分段方法来处理数据,因此,当该第一分组中的任意一个满足多趟算子条件后,修改该第一分组的执行过程。具体的,如图4所示的合并分组算子示意图,该第一分组的执行过程的修改流程为:从内存中调用该第一分组中多趟算子对应的合并算子,并将该第一分组中所有算子替换为合并算子。

需要说明的是,合并后的算子同时在做多个操作,提升了处理数据的速度和时间。具体的,原有的算子是独立处理数据的,处理时间是两个算子值相加。二合并后的算子处理时间是小于原来两个算子的处理时间直接相加的。此外,部分替换后的合并算子是支持分段操作的,这样即提高了Cache的利用率,也降低了处理数据的处理时间。

或者,

203a3、若第一分组信息中不包含分组标识第一分组信息中算子信息列表中的算子为一般算子,则列式数据库处理装置不修改第一分组信息对应的分组的执行过程。

需要说明的是,上述的第一分组信息为该至少一组分组信息中的一个分组信息,即上述的步骤203a1、203a2、及203a3具体描述的是上述至少一个分组中的任一分组对应的执行过程的修改过程。

进一步,可选的,步骤203a2具体包括如下过程:

若第一分组信息中的分组标识为多趟标识或第一分组信息中算子信息列表中的算子包含多趟算子,则列式数据库处理装置根据第一分组的所有多趟算子从信息映射表中调用合并算子,并利用合并算子替换第一分组中的所有算子。

具体的,在调用合并算子时,由于同时实现了多个算子,因此,需要进行查表操作,具体的,是根据该第一分组中的多趟算子从预配置的信息映射表中查表获取该多趟算子对应的合并算子,从而将该第一分组中的所有算子替换为合并算子。其中,上述的信息映射表为多趟算子与合并算子的映射关系表。在进行查表时,可以先将该第一分组中的多趟算子挑选出来,在从信息映射表中根据该多趟算子获取合并算子。或者,根据信息映射表中算子的存储顺序,依次匹配该第一分组中的算子,从而调用该合并算子。例如,判断该第一分组是否存在group by算子,若存在,则调用包含该group by算子的合并算子;判断该第一分组是否存在join算子,若存在,则调用包含该join算子的合并算子;判断该第一分组是否存在order算子,若存在,则调用包含该order算子的合并算子。

可选的,若该合并算子为顺序算子时,则该步骤203b2之后还包括:列式数据库处理装置对列式数据库的每列数据进行分段处理,并通过合并算子按照分段后每段数据的先后顺序依次进行处理。

具体的,当经过步骤203b2中的算子调用过程后,该执行图中的多趟算子均替换为了合并算子,因此,当该合并算子为顺序算子时,则该列式数据库处理装置还可以进一步的对列式数据库的每列数据进行分段,然后通过该合并算子按照分段后每段数据的先后顺序依次进行处理。

204、列式数据库处理装置按照第二执行图处理该列式数据库中的数据。

本发明的实施例提供的列式数据库处理方法,通过将执行图中所有的算子进行分组,生成至少一组分组信息,并根据该至少一组分组信息中每组分组信息对应修改该分组信息对应分组的执行过程,从而优化了整个执行图的执行过程,最后根据优化后新的执行图处理该列式数据库中的数据,从而减少数据在Cache中的换入换出次数,提高了Cache的利用率,并降低了列式数据库处理数据的处理时间。

本发明的实施例提供一种列式数据库处理装置,如图5、6所示,该列式数据库处理装置用于实现上述列式数据库处理方法,该列式数据库处理装置3包括:生成模块31、分组模块32、处理模块33和执行模块34,其中:

生成模块31,用于获取列式数据库的数据库操作语句,并根据数据库操作语句生成第一执行图。

分组模块32,用于将生成模块31生成的第一执行图中的算子进行分组,生成至少一组分组信息,其中每组分组信息对应一个分组。

处理模块33,用于根据分组模块32生成的至少一组分组信息修改第一执行图的执行过程,生成第二执行图。

执行模块34,用于按照处理模块33生成的第二执行图处理列式数据库中的数据。

本发明的实施例提供的列式数据库处理装置,通过将执行图中所有的算子进行分组,生成至少一组分组信息,并根据该至少一组分组信息中每组分组信息对应修改该分组信息对应分组的执行过程,从而优化了整个执行图的执行过程,最后根据优化后新的执行图处理该列式数据库中的数据,从而减少数据在Cache中的换入换出次数,提高了Cache的利用率,并降低了列式数据库处理数据的处理时间。

可选的,分组模块32具体用于:遍历所述第一执行图,依次判断生成模块31生成的第一执行图中的每个算子是否具备屏障特征;若当前判断的算子具备屏障特征,则结束当前分组,生成当前分组的分组信息,并生成新的分组;若当前判断的算子不具备屏障特征,则将当前判断的算子并入当前分组中;

其中,上述的屏障特征为包含用户预选的特定操作,该特定操作为以下操作中的任意一个:选择操作、多表输入操作、输出到多个算子操作。

可选的,如图6所示,处理模块33还包括:处理单元331和整合单元332,其中:

处理单元331,用于根据分组模块32生成的至少一组分组信息中的各分组信息分别修改每个分组信息对应的分组的执行过程;

整合单元332,用于将处理单元331得到的修改后的每个组分组信息对应的分组的执行过程进行整合,生成第二执行图。

可选的,上述的分组信息包括算子信息列表,该算子信息列表为分组内的各算子以及每个算子对应的算子类型的关系表,其中,上述的算子类型为顺序算子、多趟算子或一般算子,该一般算子是指除顺序算子、多趟算子以外的其他类型的算子。

可选的,上述的分组信息还包括分组标识;其中,分组信息中的分组标识为顺序标识表明分组信息对应分组中的算子均为顺序算子,分组信息中的分组标识为多趟标识表明分组信息对应分组中的算子包含多趟算子,分组信息不包含分组标识表明分组信息对应分组中的算子均为一般算子。

可选的,处理单元33具体用于:

若第一分组信息中的分组标识为顺序标识,则对列式数据库的每列数据进行分段处理,并通过第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理。

或者,

若第一分组信息中的分组标识为多趟标识,则调用合并算子,并将第一分组信息对应的分组的所有算子替换为合并算子。

或者,

若第一分组信息中不包含分组标识,则不修改第一分组信息对应的分组的执行过程。

其中,上述的第一分组信息为至少一组分组信息中的一个分组信息。

可选的,处理单元33具体用于:若第一分组信息中的分组标识为多趟标识,则根据第一分组的所有多趟算子从信息映射表中调用合并算子,并利用合并算子替换第一分组中的所有算子;其中,上述的信息映射表为多趟算子与合并算子的映射关系表。

可选的,若合并算子为顺序算子,则

处理单元33,还用于在调用合并算子,并将所述第一分组信息对应的分组的所有算子替换为所述合并算子之后,对列式数据库的每列数据进行分段处理,并通过合并算子按照分段后每段数据的先后顺序依次进行处理。

可选的,处理单元33具体用于:

若第一分组信息中算子信息列表中的所有算子均为顺序算子,则对列式数据库的每列数据进行分段处理,并通过第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理。

或者,

若第一分组信息中算子信息列表中的算子包含多趟算子,则调用合并算子,并将第一分组信息对应的分组的所有算子替换为合并算子。

或者,

若第一分组信息中算子信息列表中的算子为一般算子,则不修改第一分组信息对应的分组的执行过程。

其中,上述的第一分组信息为至少一组分组信息中的一个分组信息。

本发明的实施例提供的列式数据库处理装置,通过将执行图中所有的算子进行分组,生成至少一组分组信息,并根据该至少一组分组信息中每组分组信息对应修改该分组信息对应分组的执行过程,从而优化了整个执行图的执行过程,最后根据优化后新的执行图处理该列式数据库中的数据,从而减少数据在Cache中的换入换出次数,提高了Cache的利用率,并降低了列式数据库处理数据的处理时间。

需要说明的是,本发明以上各个实施例中的列式数据库处理装置中的各模块及模块中单元的实现方式和交互过程可以参考相应方法实施例中的相关描述。

本发明的实施例提供一种列式数据库处理装置,如图7所示,该列式数据库处理装置用于实现上述的列式数据库处理方法,该列式数据库处理装置可以是运行在普通服务器上的数据库管理系统,具体的,该列式数据库处理装置4包括:处理器41和存储器42。处理器41与其他各个部件是通过总线连接。该总线可以是工业标准体系结构(Industry Standard Architecture,简称ISA)总线、外部设备互连(Peripheral Component,简称PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。其中:

处理器41可以是:通用中央处理器(central procession unit,简称CPU)、专用集成电路(application specific integrated circuit,简称ASIC)、现成可编程门阵列(FPGA)或其他可编程逻辑器件。该存储器42可以是计算机能够存取的任何可用介质,包括但不限于:随机存储器(random access memory,简称RAM)、或磁盘存储(disk storage)、闪存、可编程只读存储器或电可擦写可编程存储器、寄存器等本领域熟悉的存储介质。

存储器存储执行指令,当列式数据库处理装置运行时,处理器与存储器之间通信,处理器41执行所述执行指令使得所述列式数据库处理装置执行如下方法:

获取列式数据库的数据库操作语句,并根据该数据库操作语句生成第一执行图。

将第一执行图中的算子进行分组,生成至少一组分组信息,其中每组分组信息对应一个分组。

根据至少一组分组信息修改第一执行图的执行过程,生成第二执行图。

按照第二执行图处理列式数据库中的数据。

可选的,处理器41执行的方法中,将第一执行图中的算子进行分组,生成至少一组分组信息,包括:遍历第一执行图,依次判断第一执行图中的每个算子是否具备屏障特征;若当前判断的算子具备屏障特征,则结束当前分组,生成当前分组的分组信息,将分组信息存入存储器42,并生成新的分组;若当前判断的算子不具备屏障特征,则将当前判断的算子并入当前分组中。

其中,上述的屏障特征为包含用户预选的特定操作,该特定操作为以下操作中的任意一个:选择操作、多表输入操作、输出到多个算子操作。

可选的,上述的分组信息包括算子信息列表,该算子信息列表为分组内的各算子以及每个算子对应的算子类型的关系表,其中,上述的算子类型为顺序算子、多趟算子或一般算子,该一般算子是指除顺序算子、多趟算子以外的其他类型的算子。

可选的,上述的分组信息还包括分组标识;其中,分组信息中的分组标识为顺序标识表明分组信息对应分组中的算子均为顺序算子,分组信息中的分组标识为多趟标识表明分组信息对应分组中的算子包含多趟算子,分组信息不包含分组标识表明分组信息对应分组中的算子均为一般算子。

可选的,处理器41执行的方法中,所述根据至少一组分组信息修改第一执行图的执行过程,生成第二执行图,包括:根据至少一组分组信息中的各分组信息分别修改每个分组信息对应的分组的执行过程;将修改后的每个分组信息对应的分组的执行过程进行整合,生成第二执行图。

可选的,处理器41执行的方法中,根据至少一组分组信息中的各分组信息分别修改所述每个分组信息对应的分组的执行过程,包括:

若第一分组信息中的分组标识为顺序标识,则对列式数据库的每列数据进行分段处理,并通过第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理。

或者,

若第一分组信息中的分组标识为多趟标识,则调用合并算子,并将第一分组信息对应的分组的所有算子替换为合并算子。

或者,

若第一分组信息中不包含分组标识,则不修改第一分组信息对应的分组的执行过程。

其中,上述的第一分组信息为至少一组分组信息中的一个分组信息。

可选的,处理器41执行的方法中,若第一分组信息中的分组标识为多趟标识,则调用合并算子,并将第一分组信息对应的分组的所有算子替换为合并算子,包括:若第一分组信息中的分组标识为多趟标识,则根据第一分组的所有多趟算子从信息映射表中调用合并算子,并利用合并算子替换第一分组中的所有算子;其中,上述的信息映射表为多趟算子与合并算子的映射关系表。

可选的,若合并算子为顺序算子,则

处理器41执行的方法中,调用合并算子,并将第一分组信息对应的分组的所有算子替换为合并算子之后,还包括:对列式数据库的每列数据进行分段处理,并通过合并算子按照分段后每段数据的先后顺序依次进行处理。

可选的,处理器41执行的方法中,根据至少一组分组信息中的各分组信息分别修改每个分组信息对应的分组的执行过程,包括:

若第一分组信息中算子信息列表中的所有算子均为顺序算子,则对列式数据库的每列数据进行分段处理,并通过第一分组信息对应的分组中的每个算子按照分段后的每段数据的先后顺序依次进行处理。

或者,

若第一分组信息中算子信息列表中的算子包含多趟算子,则调用合并算子,并将第一分组信息对应的分组的所有算子替换为合并算子。

或者,

若第一分组信息中算子信息列表中的算子为一般算子,则不修改第一分组信息对应的分组的执行过程。

其中,上述的第一分组信息为该至少一组分组信息中的一个分组信息。

本发明的实施例提供的列式数据库处理装置,通过将执行图中所有的算子进行分组,生成至少一组分组信息,并根据该至少一组分组信息中每组分组信息对应修改该分组信息对应分组的执行过程,从而优化了整个执行图的执行过程,最后根据优化后新的执行图处理该列式数据库中的数据,从而减少数据在Cache中的换入换出次数,提高了Cache的利用率,并降低了列式数据库处理数据的处理时间。

需要说明的是,本发明以上各个实施例中的列式数据库处理装置中的处理器的实现方式和交互过程可以参考相应方法实施例中的相关描述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

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