一种分组查询中聚合函数的数据处理方法及系统与流程

文档序号:11407462阅读:430来源:国知局
一种分组查询中聚合函数的数据处理方法及系统与流程

本申请涉及大数据处理领域,特别涉及一种分组查询中聚合函数的数据处理方法及系统。



背景技术:

近年来,随着信息技术的发展,大数据处理技术作为新时代的高科技产物已经广泛应用在各行各业中。

大数据处理中采用了分布式处理技术,可以将不同地点的不同类型指令集和体系架构的计算节点使用通信网络连接起来,构成分布式处理系统。在主控制单元的统一控制管理下,各个计算节点协调地完成数据处理任务。

分组查询计算是一项常见的数据处理任务,可以将同类别的处理对象划分为一组进行计算,得到目标聚合函数值,使得数据中的信息更加一目了然。spark大数据处理系统作为大数据处理领域中最为热门的快速通用计算平台,可以支持外接设备使用sql语句进行分组查询计算操作。

随着数据存储规模和计算规模的不断增大,数据库的sql分组查询计算操作面临着巨大的挑战。由于在当今信息爆炸时代,数据逐渐呈现出海量、类型多、价值密度低等特点,导致数据库的sql分组查询计算操作的处理量和复杂度大大增加。相对于数据爆发式的增长速度,现有技术中计算节点的计算能力是有限的,因而处理时间也大大增加。因此,如何有效提高分组查询计算操作的速度,以适应当前社会的发展需求,已经成为本领域技术人员亟待解决的技术问题。



技术实现要素:

本申请的目的在于提供一种分组查询中聚合函数的数据处理方法及系统,以提高大数据平台进行分组查询聚合函数计算操作的速度。

为解决上述技术问题,本申请提供一种分组查询中聚合函数的数据处理方法,包括:

主cpu将待查询数据文件划分成数据块,并将所述数据块分配到多个计算节点;

各计算节点cpu分别将所述数据块传输给fpga,所述fpga与所述计算节点cpu通过pcie接口对应连接;

所述fpga获取所述数据块,按照分组查询中聚合函数的计算算法对所述数据块进行sql分组查询聚合函数的计算,并通过所述计算节点cpu向所述主cpu返回计算结果;所述分组查询中聚合函数的计算算法的代码采用opencl语言并行优化实现,并移植和部署在所述fpga上;

所述主cpu合并所述计算结果,得到最终的查询结果。

可选地,在所述主cpu将待查询数据文件划分成数据块之前,还包括:

所述主cpu解析查询语句;

依据所述查询语句加载所述待查询数据文件。

可选地,所述fpga获取所述数据块包括:

所述fpga在本地内存申请空间;

从ddr中将所述数据块加载到所述空间得到数据列。

可选地,所述fpga按照分组查询中聚合函数的计算算法对所述数据块进行sql分组查询聚合函数的计算包括:

在数据向量中加载所述数据列中的数据;

判断所述数据向量中的数据是否满足sql分组查询计算中聚合函数的查询条件;若是,执行所述sql分组查询聚合函数的计算操作,并将结果向量中相应位的数据由第一标志位改写为第二标志位;

根据所述聚合函数的查询条件合并所述结果向量得到计算结果。

可选地,所述fpga按照分组查询中聚合函数的计算算法对所述数据块进行sql分组查询聚合函数的计算包括:

以unroll循环展开的方式按照分组查询中聚合函数的计算算法对所述数据块进行sql分组查询聚合函数的计算。

本申请还提供了一种分组查询中聚合函数的数据处理系统,包括:

主cpu:用于将待查询数据文件划分成数据块,并将所述数据块分配到多个计算节点;接收并合并各个fpga进行sql分组查询聚合函数计算的计算结果,得到最终的查询结果,其中,所述fpga与所述计算节点cpu通过pcie接口对应连接;

计算节点cpu:用于将分配得到的所述数据块传输给所述fpga,并向所述主cpu传递所述fpga返回的所述计算结果;

所述fpga:用于获取所述数据块,按照分组查询中聚合函数的计算算法对所述数据块进行sql分组查询聚合函数的计算,并通过所述计算节点cpu向所述主cpu返回所述计算结果;所述分组查询中聚合函数的计算算法的代码采用opencl语言并行优化实现,并移植和部署在所述fpga上。

可选地,所述主cpu还用于:

解析查询语句;依据所述查询语句加载所述待查询数据文件。

可选地,所述fpga在获取所述数据块时,具体用于:

在本地内存申请空间;并从ddr中将所述数据块加载到所述空间得到数据列。

可选地,所述fpga在按照分组查询中聚合函数的计算算法对所述数据块进行sql分组查询聚合函数的计算时,具体用于:

在数据向量中加载所述数据列中的数据;判断所述数据向量中的数据是否满足sql分组查询中聚合函数的查询条件;若是,执行所述sql分组查询聚合函数的计算操作,并将结果向量相应位的数据由第一标志位改写为第二标志位;根据所述聚合函数的查询条件合并所述结果向量得到计算结果。

可选地,所述fpga在按照分组查询中聚合函数的计算算法对所述数据块进行sql分组查询聚合函数的计算时具体用于:

以unroll循环展开的方式按照分组查询中聚合函数的计算算法对所述数据块进行sql分组查询聚合函数的计算。

本申请所提供的分组查询中聚合函数的数据处理方法中,主cpu将待查询数据文件划分成数据块,并将所述数据块分配到多个计算节点;各计算节点cpu分别将所述数据块传输给fpga,所述fpga与所述计算节点cpu通过pcie接口对应连接;所述fpga获取所述数据块,按照分组查询中聚合函数的计算算法对所述数据块进行sql分组查询聚合函数的计算,并通过所述计算节点cpu向所述主cpu返回计算结果;所述分组查询中聚合函数的计算算法的代码采用opencl语言并行优化实现,并移植和部署在所述fpga上;所述主cpu合并所述计算结果,得到最终的查询结果。

可见,相比于现有技术,本申请所提供的分组查询中聚合函数的数据处理方法,通过设置与各个计算节点cpu采用pcie接口对应连接的fpga,构成了异构并行加速计算系统,利用fpga硬件并行的特点,在fpga上利用opencl高级综合语言进行分组查询聚合函数计算算法的并行优化实现,,以便于提高对分块之后的数据进行分组查询计算的计算速度。通过各个fpga有效地提高单个计算节点的计算能力和计算速度,进而可以快速获得整个待查询数据文件的查询结果,提高分组查询计算的速度。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中需要使用的附图作简要的介绍。当然,下面有关本申请实施例的附图描述的仅仅是本申请中的一部分实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图,所获得的其他附图也属于本申请的保护范围。

图1为本申请所提供的分组查询中聚合函数的数据处理方法的硬件场景示意图;

图2为本申请所提供的分组查询中聚合函数的数据处理方法的流程图;

图3为图2中fpga对数据块进行sql分组查询聚合函数计算的流程图;

图4为fpga对两个数据列进行sql分组查询聚合函数计算的流程图;

图5为本申请所提供的一种分组查询中聚合函数的数据处理系统的结构框图。

具体实施方式

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

请参考图1,图1为本申请所提供的分组查询中聚合函数的数据处理方法的硬件场景示意图,包括主服务器101、子服务器102、fpga(fieldprogrammablegatearray,现场可编程门阵列)103。

主服务器101的主cpu通过响应主机端程序,可以完成相应的数据库操作,实现人机交互。子服务器102的cpu,即计算节点cpu,与fgpa103通过pcie接口对应连接,构成了计算节点,具有单独对数据进行处理的能力。不同计算节点中的子服务器102通过通信网络连接起来,并受到主服务器101的主cpu的统一控制和管理。

请参考图2,图2为本申请所提供的分组查询中聚合函数的数据处理方法的流程图。该方法具体包括以下步骤:

步骤201:主cpu将待查询数据文件划分成数据块。

主cpu是在整个大数据处理系统中管理各种数据操作进程的控制中心。当对数据库进行分组查询操作时,由于数据规模一般都比较大,因此主cpu首先将待查询数据文件划分成数据块,以便于后续的查询操作的进行。

具体地,所述待查询数据文件可以是主cpu在接收到查询语句之后,依据所述查询语句从指定存储区加载得到的。

步骤202:主cpu将数据块分配到多个计算节点。

主cpu将各个数据块通过通信网络分别分配到多个计算节点中,以便各个计算节点分别对各自的数据块进行并行处理。

步骤203:各计算节点cpu分别将数据块传输给fpga。

如前所述,本申请所提供的分组查询中聚合函数的数据处理方法中,fpga与计算节点中的计算节点cpu通过pcie接口对应连接,可以实现数据的传输通信。计算节点cpu在接收到主cpu分配的数据块之后,即可将数据块通过数据接口传输给fpga,以便fpga对该数据块进行处理,执行分组查询操作。

步骤204:fpga获取数据块。

具体地,当fpga在获取计算节点传输的数据块时,首先在其本地内存中申请足够的存储空间,然后可以从ddr(doubledatarate,双倍速率同步动态随机存储器)中将计算节点cpu传输来的数据块加载到所申请到的存储空间中,得到数据列,以便在后续步骤中针对数据列进行并行分组查询中聚合函数的计算。

值得一提的是,将数据块存储在fpga的本地内存中,可以减少计算节点通信网络中全局内存的访问和使用,进而提升计算节点的计算性能,提高分组查询计算的速度。

步骤205:fpga按照分组查询中聚合函数的计算算法对数据块进行sql分组查询聚合函数的计算。

由于fpga可以实现异构加速计算,因此可以将分组查询中聚合函数的计算算法的代码采用opencl高级综合语言并行优化实现,并高效移植和部署到各个fpga上,以便利用fpga对数据块进行sql分组查询聚合函数的计算。在分布式系统框架下,各个fpga分别按照分组查询中聚合函数的计算算法对其获取到的数据块进行sql分组查询聚合函数的计算,得到该数据块的计算结果。利用fpga的硬件并行的优势,可以大大提升各个计算节点处理数据的速度,实现异构并行加速。

需要说明的是,这里所述的sql分组查询中聚合函数的计算具体可以为分组求和、分组求算数平均值、分组求最值等,可分别使用相应的聚合函数,通过opencl编程语言在fpga中实现,本申请实施例对sql分组查询聚合函数计算的具体内容并不做限定。

步骤206:fpga通过计算节点cpu向主cpu返回计算结果。

每个计算节点中的fpga,将其在步骤205中得到的计算结果经pcie接口传输给对应的计算节点cpu,计算节点cpu再进一步将该计算结果经通信网络返回给主cpu。

步骤207:主cpu合并计算结果,得到最终的查询结果。

在分布式系统框架下,主cpu接收到的来自各个计算节点的计算结果,分别对应着分配到各个计算节点的数据块,因此,主cpu可以将各个计算结果进行合并,得到待查询数据文件的最终的查询结果。

可见,本申请所提供的分组查询中聚合函数的数据处理方法利用fpga构成了异构并行加速计算系统。之所以采用fpga进行数据库分组查询聚合函数的异构计算,是因为fpga具有硬件并行的优势,在每个时钟周期内相比较cpu可以执行较多的处理任务,为满足应用需求提供快速的响应时间;此外,它还具有动态可重构、稳定性良好、低功耗等优点,因此,非常适合作为异构计算中的加速器件。采用fpga作为硬件加速器件,利用其硬件并行的优势进行异构加速计算,可以大大提高大数据处理框架中单个节点的计算能力,降低其数据中心的功耗,同时还可以减少因计算集群的快速扩张带来的网络传输开销。因此,通过将分组查询聚合函数的计算算法采用opencl高级综合语言在fpga上进行并行优化实现,并在各个计算节点中分别使用fpga进行计算,可以有效提高对整个待查询数据文件的分组查询聚合函数计算的速度。

请参考图3,图3为图2中fpga对数据块进行sql分组查询聚合函数的计算的流程图,可以包括以下步骤:

步骤301:在数据向量中加载数据列中的数据。

fpga在获取数据块得到数据列之后,针对每个数据列,可以定义一个数据向量,然后将该数据列中的数据加载到该数据向量中。每个数据列的数据向量的数据位数与该数据列的数据位数相一致。

步骤302:判断数据向量中的数据是否满足sql分组查询中聚合函数的查询条件;若是,进入步骤303。

对每个数据向量中的每个数据进行判断:判断该位数据是否满足sql分组查询中聚合函数的查询条件;若是,则进入步骤303以完成相应的后续操作。当然,fpga针对每个数据向量中的每个数据的判断是并行完成的,可以有效提高数据的处理速度。

步骤303:执行sql分组查询聚合函数的计算操作,并将结果向量中相应位的数据由第一标志位改写为第二标志位。

如前所述,sql分组查询聚合函数的计算具体可以为多种内容,并通过相应的聚合函数得以实现。fpga根据sql分组查询中的聚合函数,对经步骤302判断为符合查询条件的数据,执行sql分组查询聚合函数的计算操作。同时,为了区分和表示该位数据是否符合查询条件,可以将结果向量中的相应位的数据由第一标志位改写为第二标志位。

其中,结果向量、数据向量和数据列均是一一对应的关系,即结果向量中的数据,表示的是对应的数据向量或数据列中的相应位的数据是否符合聚合函数的查询条件。为了区分和表示,结果向量中的所有数据可以默认初始化为第一标志位;当判断数据向量中相应位的数据符合聚合函数的查询条件时,可以将结果向量中相应位的数据改写为第二标志位。具体的,可以将第一标志位设置为0,将第二标志位设置为1;或者将第一标志位设置为1,将第二标志位设置为0,本申请对此并不做限定。

需要说明的是,本步骤中,可以先执行sql分组查询聚合函数的计算操作,在将结果向量中相应位数据由第一标志位改写为第二标志位,也可以先将结果向量中相应位数据由第一标志位改写为第二标志位,再执行sql分组查询聚合函数的计算操作,本申请实施例对两者的先后顺序并不做限定,可依据具体情况和编程习惯进行选择。

值得一提的是,在本申请实施例中,在具体进行sql分组查询聚合函数的计算时,优选以unroll循环展开的方式对数据进行处理,即所述分组查询中聚合函数的计算算法优选以unroll循环展开的方式编写代码进行实现,以进一步增加fpga在每个时钟周期内的工作量,从而缩短整个算法运行的时间,进一步提高分组查询聚合函数的计算速度。

步骤304:根据聚合函数的查询条件合并结果向量得到计算结果。

针对经过步骤303得到的多个数据列各自对应的结果向量,fpga根据聚合函数的查询条件对其进行合并,得到该计算节点的数据块的计算结果,以便于后续步骤的完成。

下面,以待查询的数据列为两个的情况为例,具体介绍fpga进行sql分组查询计算的过程,其流程图如图4所示,包括以下步骤:

步骤401:在数据向量1中加载数据列1的数据;在数据向量2中加载数据列2的数据。

以待查询的数据列为两个的情况为例,可以将所述的两个数据列分别命名为数据列1和数据列2,各自对应的数据向量分别命名为数据向量1和数据向量2,并将两个数据列分别加载到各自对应的数据向量中。容易理解的是,数据向量1与数据列1数据位数相同;数据向量2与数据列2数据位数相同。

步骤402:以unroll循环展开方式判断数据向量1和数据向量2中的每位数据是否满足聚合函数的查询条件;若是,进入步骤403。

对数据向量1和数据向量2中的每位数据并行进行判断,若满足聚合函数的查询操作,则进入步骤403。

并且,本实施例中步骤402中的判断操作以及后续步骤403和404中针对判断结果所执行的一系列操作采用unroll循环展开的方式进行,可以进一步提升数据处理的速度。

步骤403:执行sql分组查询聚合函数的计算操作,并将结果向量1或结果向量2中相应位的数据由0改写为1。

同样可以理解的是,结果向量1与数据列1数据位数相同;而结果向量2与数据列2数据位数相同。

这里将前文所述的结果向量的数据的第一标志位设置为0、第二标志位设置为1,当然也可采用其他设置方式,这里不再赘述。若数据向量1中的数据经过步骤402判断为符合聚合函数查询条件时,即将结果向量1中相应位的数据由0改写为1;同理,若数据向量2中的数据被判断为符合聚合函数的查询条件时,则将结果向量2中相应位的数据由0改写为1。

步骤404:根据聚合函数的查询条件合并结果向量1和结果向量2,得到计算结果。

将经过步骤403处理后的结果向量1和结果向量2进行合并,即可得到该计算节点所有数据的计算结果,从而以便于返回该计算结果以完成接下来的步骤。

下面对本发明实施例提供的分组查询中聚合函数的数据处理系统进行介绍。下文描述的分组查询中聚合函数的数据处理系统与上文描述的分组查询中聚合函数的数据处理方法可相互对应参照。

请参阅图5,图5为本申请所提供的一种分组查询中聚合函数的数据处理系统的结构框图;包括主cpu501、计算节点cpu502、fpga503。

主cpu501通过通信网络和多个计算节点cpu502连接,通过主机端程序可以控制各个计算节点间的数据传输和程序调度。计算节点具体是由计算节点cpu502和fpga503所构成的,并且计算节点cpu502和fpga503之间采用pcie高速接口实现连接。每个fpga503上均移植和部署了分组查询中聚合函数的计算算法的opencl语言并行优化代码。每个计算节点均具有单独存储和处理数据的能力,多个计算节点在主cpu501的统一控制和管理下,构成了异构并行加速计算系统。

主cpu501用于将待查询数据文件划分成数据块,并将所述数据块分配到多个计算节点。具体地,在将待查询数据文件划分成数据块之前,主cpu501还用于解析程序中的查询语句,并依据所述查询语句从指定存储区中加载待查询数据文件。当fpga503返回计算结果后,主cpu501对来自不同计算节点的fpga503的不同计算结果进行合并,得到待查询数据文件完整的最终查询结果。

计算节点cpu502从通信网络中接收到来自主cpu501的数据块后,将该数据块传输给fpga503,以便fpga503对该数据块执行sql分组查询聚合函数的计算操作得到计算结果,从而向主cpu501传递fpga503返回的计算结果。

fpga503作为本申请提供的分组查询中聚合函数的数据处理系统中的硬件加速器件,在从计算节点cpu502获取到数据块之后,用于按照分组查询中聚合函数的计算算法对该数据块进行sql分组查询聚合函数的计算,以获得该数据块的计算结果,并通过计算节点cpu502向主cpu501返回计算结果。如前所述,所述分组查询聚合函数的计算算法采用opencl高级综合语言并行优化实现,并高效移植和部署到各个fpga上,以便利用fpga对数据块进行sql分组查询聚合函数的计算。并且,所述分组查询中聚合函数的计算算法优选以unroll循环展开的方式编写代码进行实现,以便在fpga进行sql分组查询聚合函数的计算时,进一步增加fpga在每个时钟周期内的工作量,从而提高分组查询聚合函数的计算速度。

其中,当fpga503从计算节点cpu502获取数据块时,具体用于在本地内存申请空间,并从ddr中将计算节点502传输的数据块加载到申请的空间得到数据列。而当fpga503进行sql分组查询聚合函数的计算时,其首先在数据向量中加载数据列中的数据;然后判断所述数据向量中的数据是否满足sql分组查询计算中聚合函数的查询条件;若是,执行所述sql分组查询聚合函数的计算操作,并将结果向量相应位的数据由第一标志位改写为第二标志位;最后根据所述聚合函数的查询条件合并所述结果向量得到计算结果。

可见,本申请所提供的分组查询中聚合函数的数据处理系统,通过在每个计算节点中设置fpga503,并在fpga503上移植和部署了分组查询中聚合函数计算算法的opencl语言并行优化代码,构成了异构并行加速计算系统,因而可以利用fpga503的硬件并行特点,加速单个计算节点的处理进程,进而实现对整个待查询文件进行分组查询聚合函数的数据处理进程的加速。

本申请中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的方法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的分组查询中聚合函数的数据处理方法及系统进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

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