一种数据查询方法、系统、异构加速平台及存储介质与流程

文档序号:27387137发布日期:2021-11-15 21:36阅读:129来源:国知局
一种数据查询方法、系统、异构加速平台及存储介质与流程

1.本技术涉及数据库软件异构加速技术领域,特别涉及一种数据查询方法、系统、异构加速平台及存储介质。


背景技术:

2.随着摩尔定律的逐渐减慢,在数据库服务器中单纯依靠提高cpu工艺制程、增加cpu数量的方式已很难大幅提升系统的整体性能。为了进一步提高数据库服务器的整体性能,本领域通常使用异构加速平台进行数据库数据处理。
3.sql查询语句中的where子句主要起到过滤筛选的作用,可以支持用户输入复杂的查询条件,语句中可以包含比较运算(大于、小于、等于),逻辑运算(与、或、非),算术运算(加减乘除),优先级(括号)等。在数据库管理系统中会对用户输入where子句进行词法、语法解析形成二叉树+链表的数据结构,称之为约束条件。对于数据库中每一条记录通过遍历执行二叉树+链表的约束条件,来判断当前记录是否满足过滤筛选条件。
4.相关技术中,通常只是针对定制化的sql查询模板进行了异构加速的探索与实践。但是在工程实践中,数据库管理系统所执行的sql查询是千变万化的,如果仅能对定制化sql语句进行异构加速,将会大大限制了异构加速平台的适用范围与应用价值。
5.因此,如何使异构加速平台支持任意类型的where子句查询,提高异构加速平台的适用范围是本领域技术人员目前需要解决的技术问题。


技术实现要素:

6.本技术的目的是提供一种数据查询方法、一种数据查询系统、一种电子设备及一种存储介质,能够使异构加速平台支持任意类型的where子句查询,提高异构加速平台的适用范围。
7.为解决上述技术问题,本技术提供一种数据查询方法,应用于异构加速平台,所述异构加速平台包括cpu和并行处理器,所述数据查询方法包括:该数据查询方法包括:确定数据库管理系统中的操作符,并在所述并行处理器中实现所述操作符对应函数的功能;若接收到sql查询语句,则利用所述cpu将所述sql查询语句中的where子句转换为包括二叉树和链表的数据结构;其中,所述数据结构中的每一节点对应所述where子句中的一个操作符;控制所述cpu根据节点信息生成所述数据结构的操作码码流;其中,所述节点信息包括所述数据结构中每一节点的节点位置和对应的函数名;利用所述并行处理器对所述数据库管理系统中的记录执行所述操作码码流对应的筛选操作,得到符合所述where子句的查询结果。
8.可选的,利用所述并行处理器对所述数据库管理系统中的记录执行所述操作码码流对应的筛选操作,得到符合所述where子句的查询结果,包括:
从所述数据库管理系统中读取多条目标记录;利用所述并行处理器将所述目标记录作为参数来源执行所述操作码码流对应的筛选操作,得到所述目标记录对应的布尔值;将所述布尔值为真的目标记录设置为符合所述where子句的查询结果;判断所述数据库管理系统中的记录是否均读取完毕;若否,则执行从所述数据库管理系统中读取多条目标记录的操作。
9.可选的,利用所述并行处理器将所述目标记录作为参数来源执行所述操作码码流对应的筛选操作,得到所述目标记录对应的布尔值,包括:从所述操作码码流中读取当前操作码;确定所述当前操作码的操作码类型;若所述当前操作码为计算操作码,则从所述参数来源中读取所述当前操作码对应的目标参数,并对所述目标参数执行所述当前操作码对应函数的计算操作,得到操作结果;其中,所述参数来源包括所述目标记录、预设常量和数据栈,所述数据栈用于存储所述操作码码流中计算操作码和逻辑操作码的操作结果;若所述当前操作码为所述逻辑操作码,则从所述数据栈中读取布尔类型的操作结果,并对所述布尔类型的操作结果执行所述逻辑操作码对应的逻辑操作得到操作结果;将所述操作结果存储至所述数据栈;判断所述操作码码流中的操作码是否均读取完毕;若是,则将最近一次逻辑操作得到的操作结果作为所述目标记录对应的布尔值;若否,则执行从所述操作码码流中读取当前操作码的操作。
10.可选的,从所述参数来源中读取所述当前操作码对应的目标参数,包括:根据所述当前操作码确定参数数量和参数偏移地址;根据所述参数数量和所述参数偏移地址从所述参数来源中读取所述当前操作码对应的目标参数。
11.可选的,在将所述逻辑操作结果存储至所述数据栈之前,还包括:判断所述逻辑操作结果是否为真;若是,则执行将所述逻辑操作结果存储至所述数据栈的操作;若否,则停止对所述目标记录的筛选操作,并判定所述目标记录不符合所述where子句。
12.可选的,控制所述cpu根据节点信息生成所述数据结构的操作码码流,包括:控制所述cpu根据所述节点信息确定所述数据结构中每一节点对应函数的参数信息;其中,所述参数信息包括参数来源、参数类型和参数大小;控制所述cpu根据所述参数信息生成每一节点对应的操作码,并汇总所有所述操作码得到所述操作码码流。
13.可选的,控制所述cpu根据所述节点信息确定所述数据结构中每一节点对应函数的参数信息,包括:控制所述cpu根据所述节点信息执行第一操作、第二操作和第三操作,得到所述数据结构中每一节点对应函数的参数信息;其中,所述第一操作为:根据节点在所述数据结构中的节点位置确定节点的参数
来源;所述第二操作为:根据所述数据结构中节点对应的函数名称确定操作对象的数据类型,并根据所述操作对象的数据类型确定节点的参数类型;所述第三操作为:根据节点的参数类型确定参数大小。
14.本技术还提供了一种数据查询系统,应用于异构加速平台,所述异构加速平台包括cpu和并行处理器,所述数据查询系统包括:功能实现模块,用于确定数据库管理系统中的操作符,并在所述并行处理器中实现所述操作符对应函数的功能;转换模块,用于若接收到sql查询语句,则利用所述cpu将所述sql查询语句中的where子句转换为包括二叉树和链表的数据结构;其中,所述数据结构中的每一节点对应所述where子句中的一个操作符;码流生成模块,用于控制所述cpu根据节点信息生成所述数据结构的操作码码流;其中,所述节点信息包括所述数据结构中每一节点的节点位置和对应的函数名;筛选模块,用于利用所述并行处理器对所述数据库管理系统中的记录执行所述操作码码流对应的筛选操作,得到符合所述where子句的查询结果。
15.本技术还提供了一种存储介质,其上存储有计算机程序,所述计算机程序执行时实现上述数据查询方法执行的步骤。
16.本技术还提供了一种异构加速平台,包括存储器、cpu和并行处理器,所述存储器中存储有计算机程序,所述cpu和所述并行处理器调用所述存储器中的计算机程序时实现上述数据查询方法的步骤。
17.本技术提供了一种数据查询方法,应用于异构加速平台,所述异构加速平台包括cpu和并行处理器,所述数据查询方法包括:确定数据库管理系统中的操作符,并在所述并行处理器中实现所述操作符对应函数的功能;若接收到sql查询语句,则利用所述cpu将所述sql查询语句中的where子句转换为包括二叉树和链表的数据结构;其中,所述数据结构中的每一节点对应所述where子句中的一个操作符;控制所述cpu根据节点信息生成所述数据结构的操作码码流;其中,所述节点信息包括所述数据结构中每一节点的节点位置和对应的函数名;利用所述并行处理器对所述数据库管理系统中的记录执行所述操作码码流对应的筛选操作,得到符合所述where子句的查询结果。
18.本技术预先在并行处理器中实现数据库管理系统中操作符对应函数的功能,在接收到sql查询语句时将sql查询语句中的where子句转换为包括二叉树和链表的数据结构,并将上述数据结构转化为并行处理器能够识别的操作码码流。操作码码流根据数据结构中每一节点的节点位置和对应的函数名生成,因此并行处理器能够利用操作码码流执行where子句的筛选操作,从数据库管理系统中得到符合所述where子句的查询结果。由于本技术以函数的功能为粒度在并行处理器中实现函数功能,并行处理器可以通过自身已实现的函数功能进行组合以完成任意种where子句对应的筛选操作,不再受到固定模板的限制,因此本技术能够使异构加速平台支持任意类型的where子句查询,提高异构加速平台的适用范围。本技术同时还提供了一种数据查询系统、一种存储介质和一种异构加速平台,具有上述有益效果,在此不再赘述。
附图说明
19.为了更清楚地说明本技术实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1为本技术实施例所提供的一种数据查询方法的流程图;图2为本技术实施例所提供的一种二叉树和链表的数据结构的示意图;图3为本技术实施例所提供的一种并行处理器并行查询数据流程图;图4为本技术实施例所提供的一种并行处理器执行筛选操作的方法的流程图;图5为本技术实施例所提供的一种操作码码流的整体结构示意图;图6为本技术实施例所提供的一种码流头部结构示意图;图7为本技术实施例所提供的一种操作码头部码流结构示意图;图8为本技术实施例所提供的一种参数信息码流结构示意图;图9为本技术实施例所提供的一种fpga工作流程的示意图。
具体实施方式
21.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
22.下面请参见图1,图1为本技术实施例所提供的一种数据查询方法的流程图,具体步骤可以包括:s101:确定数据库管理系统中的操作符,并在所述并行处理器中实现所述操作符对应函数的功能;其中,本实施例可以应用于异构加速平台,异构加速平台包括cpu(central processing unit,中央处理器)和并行处理器,上述并行处理器可以为fpga(field programmable gate array,现场可编程逻辑门阵列)、gpu(graphics processing unit,图形处理器)等具有并行处理能力的处理芯片。
23.本步骤中的数据库管理系统可以为postgresql(一种开源的客户/服务器关系型数据库管理系统)、mysql、oracle等,此处不对数据库管理系统的具体类型进行限定。本步骤可以确定数据库管理系统中的操作符,每一操作符均有其对应的函数,数据库管理系统中每一操作符对应的函数为最小功能单元,本步骤在并行处理器中构建每一所述操作符对应的功能单元;其中,所述功能单元用于执行所述操作符对应函数的操作。本技术通过在并行处理器中实现每一操作符对应函数的功能,使得并行处理器能够实现所有的最小功能单元。数据库管理系统中可以存储多条记录tuple。
24.s102:若接收到sql查询语句,则利用所述cpu将所述sql查询语句中的where子句转换为包括二叉树和链表的数据结构;其中,当用户需要在数据库管理系统中查询特定数据时,通常先异构加速平台输入sql查询语句,sql查询语句包括where子句。在本步骤中,可以利用cpu将所述sql查询语句中的where子句转换为包括二叉树和链表的数据结构。
25.请参见图2,图2为本技术实施例所提供的一种二叉树和链表的数据结构的示意图,若where子句为:i_discount>0.07 and i_quantity<24 and ((i_discount +i_extendedprice)+(i_discount*i_extendedprice)>0.1 or i_quantity>12),上述表达式为带有算术运算,大小比较,逻辑运算以及括号优先级的where子句表达式,cpu将上述where子句转换得到的数据结构如图2所示。图2中float_gt表示的函数功能为浮点数大于,float_lt表示的函数功能为浮点数小于,float_add表示的函数功能为浮点数相加,float_mul表示的函数功能为浮点数相乘,and表示逻辑与计算,or表示逻辑或计算,i_discount表示折扣,i_quantity表示数量,i_extendedprice表示总价。上述数据结构中的每一节点对应所述where子句中的一个操作符,以图2为例,图2中的float_gt、float_lt、float_add、float_mul、and和or分别表示一个节点。具体的,图2中每一个圆形的节点对应一个算术运算符或比较运算符,在fpga中已经预先实现对应的功能形成功能单元,按照函数id号即可调取对应的函数功能。and与or节点表示逻辑运算符,fpga本身就能够支持。
26.s103:控制所述cpu根据节点信息生成所述数据结构的操作码码流;在将where子句转换为二叉树+链表的数据结构之后,可以控制cpu根据节点信息生成上述数据结构的操作码码流,操作码码流包括并行处理器能够识别的函数功能执行顺序和每一函数的参数来源、参数类型、参数大小。
27.具体的,可以控制所述cpu根据所述节点信息确定所述数据结构中每一节点对应函数的参数信息;其中,所述参数信息包括参数来源、参数类型和参数大小;控制所述cpu根据所述参数信息生成每一节点对应的操作码,并汇总所有所述操作码得到所述操作码码流。
28.进一步的,上述节点信息包括数据结构中每一节点的节点位置和每一节点对应的函数名。相应的,可以控制所述cpu根据所述节点信息执行第一操作、第二操作和第三操作,得到所述数据结构中每一节点对应函数的参数信息。上述第一操作为:根据节点在所述数据结构中的节点位置确定节点的参数来源;具体的,叶子节点的数据来源为数据库管理系统中记录的数据或预设常量,非叶子节点的数据来源至少包括数据栈中存储的其他操作码的操作结果。所述第二操作为:根据所述数据结构中节点对应的函数名称确定操作对象的数据类型,并根据所述操作对象的数据类型确定节点的参数类型。所述第三操作为:根据节点的参数类型确定参数大小。
29.s104:利用所述并行处理器对所述数据库管理系统中的记录执行所述操作码码流对应的筛选操作,得到符合所述where子句的查询结果。
30.其中,在得到操作码码流的基础上,本实施例可以利用并行处理器对数据库管理系统中的多条记录并行执行操作码码流对应的筛选操作,以便确定数据库管理系统中符合where子句的查询结果。由于并行处理器预先实现了数据库管理系统中操作符对应函数的功能,在接收到操作码码流后,可以根据操作码码流中的函数执行顺序以及每一函数的参数来源执行相应的计算操作和逻辑操作,以便根据操作结果判断数据库管理系统中的各条记录是否符合where子句的要求。
31.本实施例预先在并行处理器中实现数据库管理系统中操作符对应函数的功能,在接收到sql查询语句时将sql查询语句中的where子句转换为包括二叉树和链表的数据结构,并将上述数据结构转化为并行处理器能够识别的操作码码流。操作码码流根据数据结
构中每一节点的节点位置和对应的函数名生成,因此并行处理器能够利用操作码码流执行where子句的筛选操作,从数据库管理系统中得到符合所述where子句的查询结果。由于本实施例以函数的功能为粒度在并行处理器中实现函数功能,并行处理器可以通过自身已实现的函数功能进行组合以完成任意种where子句对应的筛选操作,不再受到固定模板的限制,因此本实施例能够使异构加速平台支持任意类型的where子句查询,提高异构加速平台的适用范围。
32.请参见图3,图3为本技术实施例所提供的一种并行处理器并行查询数据流程图,本实施例是对图1对应实施例中s104的进一步介绍,可以将本实施例与图1对应的实施例相结合得到进一步的实施方式,本实施例可以包括以下步骤:s301:从所述数据库管理系统中读取多条目标记录;s302:利用所述并行处理器将所述目标记录作为参数来源执行所述操作码码流对应的筛选操作,得到所述目标记录对应的布尔值;s303:将所述布尔值为真的目标记录设置为符合所述where子句的查询结果;s304:判断所述数据库管理系统中的记录是否均读取完毕;若是,则结束流程;若否,则进入步骤301。
33.其中,根据并行处理器的参数可以设置并行处理器的最大并行处理数,进而基于最大并行处理数读取相应条数的记录作为目标记录。在执行操作码码流对应的筛选操作后,可以得到每一目标记录对应的布尔值,若布尔值为真则说明目标记录设置为符合所述where子句的查询结果。在对目标记录筛选完毕后,可以判断数据库管理系统中的记录是否均读取完毕,若未读取完毕则可以重新执行s301~s304的相关操作。
34.请参见图4,图4为本技术实施例所提供的一种并行处理器执行筛选操作的方法的流程图。如图4所示,并行处理器可以通过执行以下步骤完成操作码码流对应的筛选操作:s401:从所述操作码码流中读取当前操作码;s402:确定所述当前操作码的操作码类型;s403:根据操作码类型执行对应的操作,得到操作结果;具体的,函数对应的操作码包括计算操作码和逻辑操作码。
35.若当前操作码为计算操作码时,执行的操作如下:从所述参数来源中读取所述当前操作码对应的目标参数,并对所述目标参数执行所述当前操作码对应函数的计算操作,得到操作结果;其中,所述参数来源包括所述目标记录、预设常量和数据栈,所述数据栈用于存储所述操作码码流中计算操作码和逻辑操作码的操作结果;若当前操作码为逻辑操作码时,执行的操作如下:从所述数据栈中读取布尔类型的操作结果,并对所述布尔类型的操作结果执行所述逻辑操作码对应的逻辑操作得到操作结果;s404:将所述操作结果存储至所述数据栈;s405:判断所述操作码码流中的操作码是否均读取完毕;若是,则进入s406;若否,则进入s401。
36.s406:将最近一次逻辑操作得到的操作结果作为所述目标记录对应的布尔值。
37.具体的,本实施例可以通过以下方式读取所述当前操作码对应的目标参数,包括:根据所述当前操作码确定参数数量和参数偏移地址;根据所述参数数量和所述参数偏移地
址从所述参数来源中读取所述当前操作码对应的目标参数。
38.具体的,在将所述逻辑操作结果存储至所述数据栈之前,还可以判断所述逻辑操作结果是否为真;若是,则执行将所述逻辑操作结果存储至所述数据栈的操作;若否,则停止对所述目标记录的筛选操作,并判定所述目标记录不符合所述where子句。举例说明上述过程,例如where子句为:a+b>10 and a
×
b>10,按照where子句对应的操作码码流的函数执行顺序需要先计算a+b>10是否为真,再计算a
×
b>10是否为真,若上述两个结果均为真则符合where子句的筛选条件。当检测到a+b>10为假时,可以直接退出筛选操作,无需继续执行,通过上述方式可以提高数据筛选的效率。
39.cpu作为通用处理器,擅长管理和调度;fpga可以用来设计专用电路,用于实现高性能的并行计算。数据库业务中所处理的各个记录之间并不存在依赖关系,非常适合进行并行处理。大量的学术理论研究与模拟实验数据表明,在cpu

fpga异构环境下进行数据库数据处理能够大幅提升数据库系统的整体性能。为了进一步提高数据库服务器的整体性能,使用cpu

fpga异构平台来查询数据已成为一种主流的趋势。但是如何灵活的支持不同的sql语句,成为数据库cpu

fpga异构加速从理论研究迈向实践应用的关键,处理sql语句中的where子句部分是需要克服的难点之一。
40.在现有的数据库软件的cpu

fpga异构加速开发中,发现存在较多应用场景与开发模式的限制,以及与数据库软件较难匹配的问题。开发过程中发现较多使用与应用场景限制,具体如下:(1)相关技术中约束条件格式只能硬编码到ip核中,只能处理固定模板的sql语句,无法动态识别输入的任意sql语句;(2)相关技术只能处理比较、逻辑运算,无法处理加减乘除以及带括号的复杂运算;(3)相关技术中约束条件的数据类型固定,只能为int整形且个数有限制。
41.为了解决上述相关技术中存在的缺陷,本技术提供了基于cpu

fpga异构处理postgresql where子句的方案,该方案以postgresql数据库软件为基础进行了cpu

fpga异构加速的扩展开发,提出了一套在fpga中解析sql语句中where子句的实现方案,扩展了fpga能够处理sql语句的应用场景及范围,本实施例的具体实现方式如下:步骤a:在fpga中与实现postgresql中每个操作符所对应函数的功能。
42.其中,postgresql中对每一种数据类型的算术与比较运算都有一个对应的函数id,本实施例可以在fpga中预先实现所有函数id所对应的功能。
43.请参见表1,表1示出了浮点数数据类型的函数信息表,postgresql中有表1所示的函数id对应关系,本实施例可以在fpga中预先实现如下函数id所对应的函数功能。
44.表 1 浮点数数据类型的函数信息表
步骤b:在cpu中将where子句转换为二叉树+链表的数据结构,并生成操作码码流。
45.其中,本步骤通过遍历postgresql对用户sql语句的解析结果,遍历的过程中根据各个节点所在的位置及函数id信息,推算出参数的来源,类型及大小,将各个节点的信息形成操作码。根据所执行的函数id将操作码归类为计算操作码与逻辑操作码,最终将postgresql对sql语句的原始解析结果转为fpga可以处理的操作码码流。
46.对于用户输入的sql语句,postgresql会进行词法、语法解析,处理语句中的操作符,常量表达式及括号优先级,将where子句转换为二叉树+链表的数据结构,二叉树+链表上的每一个节点对应用户输入的一个操作符。cpu执行时通过遍历每一个节点,执行对应的操作符函数,最后会得到一个布尔值,该布尔值用于表达当前的记录是否符合where子句的筛选条件。
47.在cpu开启查询扫描前,遍历postgresql生成的二叉树+链表记录下每个节点的函数id,根据节点所处的位置及函数id信息,推算出函数参数的来源、类型及大小构成一个操作码数据结构,最后汇总所有的节点的操作码,形成固定格式的操作码码流。请参见图5,图5为本技术实施例所提供的一种操作码码流的整体结构示意图。
48.请参见图6,图6为本技术实施例所提供的一种码流头部结构示意图, 码流的头部以固定的格式标识出一共有多少个操作码以及每个操作码在码流中的偏移及大小。图6中op_count表示一共有多少个操作码,op_offset表示操作码1在码流中的偏移,op1_len表示操作码1的长度,opn_offset表示最后一个操作码n在码流中的偏移,opn_len表示最后一个操作码n的长度。
49.请参见图7,图7为本技术实施例所提供的一种操作码头部码流结构示意图,操作码头部标识出操作码的相关信息,包括操作码的类型,操作码使用操作函数的id号、参数个
数、参数在操作码中的偏移与大小。本实施例可以根据操作函数的id将操作码的类型归类为两种:计算操作码(如:加、减、乘、除、比较等),逻辑操作码(如:与、或、非等)。图7中type表示操作码类型(计算操作码或逻辑操作码),op_func表示操作码函数id号,nargs表示操作码参数个数,arg1_offset表示第一个参数相对操作码启示位置的偏移,arg1_len表示第一参数的长度,argn_offset表示最后一个参数相对操作码启示位置的偏移,argn_len表示最后一个参数的长度。
50.请参见图8,图8为本技术实施例所提供的一种参数信息码流结构示意图。操作码中的参数信息标识了参数类型、参数大小以及参数来源。具体的,在cpu遍历二叉树+链表数据结构时,根据节点所处的位置及调用函数的类型,推算出函数的参数信息。具体的,参数标记arg_tag表示从当前参数的来源,参数来源有以下三种途径:(1)从当前tuple中的某一列中获取,此时标记arg_tag=104,同时使用var_no字段表示使用tuple中的列编号;(2)参数来源为常量,此时标记arg_tag=105, 同时使用arg_data字段存放常量的值;(3)参数来源为栈,此时arg_tag为默认值。进一步的,可以通过函数id推算出操作对象的数据类型,由于已知参数的类型,因此可以通过参数类型得到参数大小。图8中arg_tag表示参数标记,arg_type表示参数类型,arg_size表示参数大小,var_no表示arg_tag==104类型时在tuple中的列号,arg_data表示arg_tag==105类型时存放用户输入的固定数值(即预设常量)。
51.步骤c:fpga根据操作码码流对postgresql的记录进行筛选。
52.本步骤在fpga中根据操作码码流中的各个操作码,逐个进行解析,根据参数的来源、类型及大小获取参数,调用操作码中函数id所对应的函数功能单元。在运算过程中以栈的形式对中间结果进行保存。
53.在数据库异构加速开发中,fpga厂商所提供的加速开发库,其设计往往只提供通用的基础处理逻辑。在实际应用到具体的数据库软件的cpu

fpga异构加速的开发中,需要根据数据库软件本身的设计架构及数据结构,进行整体方案的规划、适配与调整。
54.具体的,cpu在启动查询扫描后,将操作码码流发送至fpga。fpga解析操作码码流中的各个操作码,对postgresql的每一个记录(postgresql中称为tuple),依次遍历操作码码流中的每一个函数id,调用fpga中已实现的对应功能单元。执行到最后一个操作码得到的结果会是一个布尔值qual,表示当前的记录是否满足where子句的筛选过程。
55.请参见图9,图9为本技术实施例所提供的一种fpga工作流程的示意图,具体包括以下操作:从操作码码流中获取操作码个数op_count,并逐个获取操作码地址op_offset,判断操作码类型type。
56.若操作码类型为计算操作码t_opexpr,则获取参数个数nargs并逐个获取参数的偏移arg_offset,通过判断arg_tag字段的值确定参数来源,以便根据每个参数的arg_tag从指定位置获取参数的值。具体的,若arg_tag的值为t_var(104),则从tuple中获取索引为var_no列的数值;若arg_tag的值为t_const(105),则从arg_data中获取数值(即预设常量);若arg_tag的值为t_var(104)和t_const(105)之外的其他值,则从栈stack中获取数值。将从参数来源获取的参数拷贝至参数缓存区,并记录各个参数在参数缓存区中的偏移。迭代执行上述获取参数的操作,直至操作码的最后一个参数获取完毕。调用op_func对应的函数功能单元进行计算,将操作结果入栈存储。
57.若操作码类型为逻辑操作码t_boolexper(113),则获取参数个数nargs,从栈中读
取nargs个bool类型数据(即布尔类型的操作结果),拷贝数据到参数缓存区,并记录各个参数在参数缓存区中的偏移,调用op_func对应的函数功能单元计算操作结果,将操作结果存放在qual变量中并更新qual结果,将操作结果入栈存储。
58.迭代执行上述执行操作码,直至操作码的最后一个参数获取完毕。调用op_func对应的函数功能单元进行计算,将操作结果入栈存储。处理完所有的操作码后,判断qual值是否为true来决定当前记录是否满足过滤条件。若为ture,则说明tuple符合条件;若为false,则说明tuple不符合条件。
59.在上述实施例中,以postgresql中每个操作符所对应的函数为最小功能单元,预先在fpga中实现所有最小功能单元。通过对postgresql where子句的解析结果进行遍历利用postgresql中的函数id作为fpga内函数调用的索引,同时推算出各个函数调用时参数的相关信息,构成fpga能够识别的操作码码流。fpga根据操作码码流中提供的函数id及参数信息,实现对where子句的解析操作。相比于本领域的相关技术,本方案可以动态支持sql语句where子句解析,无需将sql语句模板硬编码在ip核中,本方案没有约束条件个数的限制,本方案支持postgresql中常用数据类型:int、float、date、timestamp等,还支持算术运算及带括号的表达式。参照本实施例的方案也可以适用于mysql, oracle等其它数据库软件,同样可以对用户输入的sql语句进行类似的处理。只要找到其中对函数调用及参数的处理方法,也可以将对应的数据结构转换为fpga可以处理的操作码码流,扩展数据库异构加速中对sql语句的支持。
60.以tpc

h 1gb数据集为例说明上述过程,选取数据集中的第15条记录与第17条记录,第15条记录与第17条记录的第5、6、7列数据,如表2所示,第5列数据为数量l_quantity,第6列数据为总价l_extendedprice,第7列数据为折扣l_discount。
61.表 2 记录对照表fpga可以根据每个操作码在码流中的偏移和长度逐个解析操作码。根据参数字段中的arg_tag从对应位置获取参数,根据操作码对应的函数id,调用对应的操作函数将结果入栈,最终实现对一条记录是否满足过滤条件的判断。
62.本技术实施例所提供的一种数据查询系统的结构示意图,应用于异构加速平台,所述异构加速平台包括cpu和并行处理器,所述数据查询系统包括:功能实现模块,用于确定数据库管理系统中的操作符,并在所述并行处理器中实现所述操作符对应函数的功能;转换模块,用于若接收到sql查询语句,则利用所述cpu将所述sql查询语句中的where子句转换为包括二叉树和链表的数据结构;其中,所述数据结构中的每一节点对应所述where子句中的一个操作符;码流生成模块,用于控制所述cpu根据节点信息生成所述数据结构的操作码码流;其中,所述节点信息包括所述数据结构中每一节点的节点位置和对应的函数名;筛选模块,用于利用所述并行处理器对所述数据库管理系统中的记录执行所述操
作码码流对应的筛选操作,得到符合所述where子句的查询结果。
63.本实施例预先在并行处理器中实现数据库管理系统中操作符对应函数的功能,在接收到sql查询语句时将sql查询语句中的where子句转换为包括二叉树和链表的数据结构,并将上述数据结构转化为并行处理器能够识别的操作码码流。操作码码流根据数据结构中每一节点的节点位置和对应的函数名生成,因此并行处理器能够利用操作码码流执行where子句的筛选操作,从数据库管理系统中得到符合所述where子句的查询结果。由于本实施例以函数的功能为粒度在并行处理器中实现函数功能,并行处理器可以通过自身已实现的函数功能进行组合以完成任意种where子句对应的筛选操作,不再受到固定模板的限制,因此本实施例能够使异构加速平台支持任意类型的where子句查询,提高异构加速平台的适用范围。
64.可选的,筛选模块包括:记录读取单元,用于从所述数据库管理系统中读取多条目标记录;操作码执行单元,用于利用所述并行处理器将所述目标记录作为参数来源执行所述操作码码流对应的筛选操作,得到所述目标记录对应的布尔值;查询结果生成单元,用于将所述布尔值为真的目标记录设置为符合所述where子句的查询结果;判断单元,用于判断所述数据库管理系统中的记录是否均读取完毕;若否,则启动记录读取单元对应的工作流程。
65.进一步的,操作码执行单元用于从所述操作码码流中读取当前操作码;还用于确定所述当前操作码的操作码类型;还用于若所述当前操作码为计算操作码,则从所述参数来源中读取所述当前操作码对应的目标参数,并对所述目标参数执行所述当前操作码对应函数的计算操作,得到操作结果;其中,所述参数来源包括所述目标记录、预设常量和数据栈,所述数据栈用于存储所述操作码码流中计算操作码和逻辑操作码的操作结果;还用于若所述当前操作码为所述逻辑操作码,则从所述数据栈中读取布尔类型的操作结果,并对所述布尔类型的操作结果执行所述逻辑操作码对应的逻辑操作得到操作结果;还用于将所述操作结果存储至所述数据栈;还用于判断所述操作码码流中的操作码是否均读取完毕;若是,则将最近一次逻辑操作得到的操作结果作为所述目标记录对应的布尔值;若否,则执行从所述操作码码流中读取当前操作码的操作。
66.进一步的,操作码执行单元从所述参数来源中读取所述当前操作码对应的目标参数的过程包括:根据所述当前操作码确定参数数量和参数偏移地址;根据所述参数数量和所述参数偏移地址从所述参数来源中读取所述当前操作码对应的目标参数。
67.进一步的,还包括:逻辑操作结果分析单元,用于在将所述逻辑操作结果存储至所述数据栈之前,判断所述逻辑操作结果是否为真;若是,则执行将所述逻辑操作结果存储至所述数据栈的操作;若否,则停止对所述目标记录的筛选操作,并判定所述目标记录不符合所述where子句。
68.进一步的,码流生成模块包括:参数信息确定单元,用于控制所述cpu根据所述节点信息确定所述数据结构中每一节点对应函数的参数信息;其中,所述参数信息包括参数来源、参数类型和参数大小;操作码汇总单元,用于控制所述cpu根据所述参数信息生成每一节点对应的操作
码,并汇总所有所述操作码得到所述操作码码流。
69.进一步的,操作码汇总单元,用于控制所述cpu根据所述节点信息执行第一操作、第二操作和第三操作,得到所述数据结构中每一节点对应函数的参数信息;其中,所述第一操作为:根据节点在所述数据结构中的节点位置确定节点的参数来源;所述第二操作为:根据所述数据结构中节点对应的函数名称确定操作对象的数据类型,并根据所述操作对象的数据类型确定节点的参数类型;所述第三操作为:根据节点的参数类型确定参数大小。
70.由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
71.本技术还提供了一种存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read

only memory ,rom)、随机存取存储器(random access memory ,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
72.本技术还提供了一种异构加速平台,包括存储器、cpu和并行处理器,所述存储器中存储有计算机程序,所述cpu和所述并行处理器调用所述存储器中的计算机程序时实现上述数据查询方法的步骤。当然所述异构加速平台还可以包括各种网络接口,电源等组件。
73.说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以对本技术进行若干改进和修饰,这些改进和修饰也落入本技术权利要求的保护范围内。
74.还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1