掌桥专利:专业的专利平台
掌桥专利
首页

数据库中SQL表达式运算方法、装置、设备及介质

文献发布时间:2023-06-19 18:37:28


数据库中SQL表达式运算方法、装置、设备及介质

技术领域

本发明涉及数据库运算技术领域,尤其涉及一种数据库中SQL表达式运算方法、装置、设备及介质。

背景技术

在使用FPGA硬件加速数据库或数据治理等领域中,通常需要对某些数据列或数据集执行某种运算,而且还可能需要按一定的顺序将运算进行结合。因为FPGA硬件属于半定制化电路,一块定制好的FPGA硬件很难满足按用户的需要完成所需功能的要求。

因此,亟需一种提升FPGA硬件支持根据用户需求变动的SQL表达式的灵活性的方法。

发明内容

本发明提供一种数据库中SQL表达式运算方法、装置、设备及介质,用以解决现有技术中对根据用户需求变动的SQL表达式支持不灵活的缺陷,实现提升FPGA硬件支持根据用户需求变动的SQL表达式的灵活性。

本发明提供一种数据库中SQL表达式运算方法,包括:

获取SQL表达式;

基于SQL表达式,确定所述SQL表达式对应的Tree结构;

将所述Tree结构传输至给FPGA硬件内核;

其中,所述Tree结构用于执行所述SQL表达式对应的目标运算体,得到所述SQL表达式的执行结果;所述Tree结构包括所述目标运算体的执行顺序和结合规则。

根据本发明提供的数据库中SQL表达式运算方法,基于SQL表达式,确定所述SQL表达式对应的Tree结构,包括:

获取所述SQL表达式对应的表达式节点链表;

遍历所述表达式节点链表,得到中缀表达式;

将所述中缀表达式进行转换,得到后缀表达式,并将所述后缀表达式作为所述SQL表达式对应的Tree结构。

根据本发明提供的数据库中SQL表达式运算方法,获取所述SQL表达式对应的表达式节点链表之前,包括:

获取所述SQL表达式对应的SQL表达式;

将所述SQL表达式,写进表达式节点链表。

根据本发明提供的数据库中SQL表达式运算方法,基于所述Tree结构,执行所述SQL表达式对应的目标运算体,确定所述SQL表达式的执行结果,包括:

遍历所述Tree结构,以读取所述Tree结构中的Tree节点;

若所述Tree节点不为树根节点,则读取当前的Tree节点的目标运算体,并执行所述目标运算体;

若Tree节点为所述树根节点,则将所述树根节点的值作为执行所述目标运算体的结果。

根据本发明提供的数据库中SQL表达式运算方法,所述目标运算体包括表达式运算函数或逻辑运算符;

若所述Tree节点不为树根节点,则读取当前的Tree节点的目标运算体,并执行所述目标运算体,包括:

若所述Tree节点是表达式运算函数,则执行所述表达式运算函数对应的表达式运算;

若所述Tree节点是逻辑运算符,则读取所述Tree节点对应的待运算元素,并基于所述逻辑运算符,对所述运算元素执行所述逻辑运算符对应的逻辑运算。

根据本发明提供的数据库中SQL表达式运算方法,所述Tree结构包括Node结构和Tree结构体,所述Node结构包括目标运算体,所述Tree结构体包括opTypeID字段和参数字段;

所述opTypeID字段用于选择目标表达式运算函数,所述参数字段用于指定所述目标表达式运算函数的所需的目标参数。

本发明还提供一种数据库中SQL表达式运算装置,包括:

获取模块,用于获取SQL表达式;

Tree结构确定模块,用于基于SQL表达式,确定所述SQL表达式对应的Tree结构;

传输模块,用于将所述Tree结构传输至给FPGA硬件内核;

其中,所述Tree结构用于执行所述SQL表达式对应的目标运算体,得到所述SQL表达式的执行结果;所述Tree结构包括所述目标运算体的执行顺序和结合规则。

本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述数据库中SQL表达式运算方法。

本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述数据库中SQL表达式运算方法。

本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述数据库中SQL表达式运算方法。

本发明提供的数据库中SQL表达式运算方法、装置、设备及介质,

现有技术中,由于需要重新定制FPGA硬件电路才能够支持变更或改变顺序的SQL表达式,通过在数据库异构计算中引入二叉表达式树数据结构(即Tree结构)来表达SQL查询在FPGA硬件内核中的执行顺序,构建好Tree结构发送给FPGA硬件内核,FPGA硬件内核根据Tree结构的内容执行相应的表达式运算。通过Tree结构用以描述这种SQL表达式具有顺序性和结合性的运算,避免需要重新定制FPGA硬件电路才能支持其他不同的表达式,解决面对未知表达式计算时需要重新设计FPGA硬件电路,提高了FPGA计算单元的灵活性,兼容更复杂的计算需求,并在灵活性和运算效率之间取得较好的平衡;并通过把这种数据结构即SQL表达式以配置的方式传递给FPGA硬件来指导硬件完成整个运算执行的方法,可以提高FPGA处理复杂运算的灵活性,提升FPGA对表达式运算效率。

附图说明

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

图1是本发明提供的数据库中SQL表达式运算方法的流程示意图之一;

图2是本发明提供的数据库中SQL表达式运算方法的流程示意图之二;

图3是本发明提供的数据库中SQL表达式运算方法的流程示意图之三;

图4是本发明提供的数据库中SQL表达式运算方法的流程示意图之四;

图5是本发明提供的数据库中SQL表达式运算方法的流程示意图之五;

图6是本发明提供的数据库中SQL表达式运算方法中Tree结构的一种示例性的结构示意图;

图7是本发明提供的电子设备的结构示意图。

具体实施方式

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

下面结合图1-图6描述本发明的数据库中SQL表达式运算方法。

请参照图1,本发明提出的数据库中SQL表达式运算方法,包括:

步骤10,获取SQL表达式;

SQL为结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。SQL表达式为一个或多个值的组合,SQL表达式用于计算值,SQL表达式可以包括运算符和SQL函数。数据库的SQL表达式用各种表达式计划节点(或称表达式节点)来完成相应的操作,可以是查询操作、删除操作和新增操作等。

SQL表达式可以是客户端的应用程序发送的,本申请实施例可以用于数据库异构计算、数据库数据查询、数据库运算操作等。

步骤20,基于SQL表达式,确定所述SQL表达式对应的Tree结构;

Tree结构是一种类二叉表达式树数据结构,可以更灵活的执行运算表达式和操作符运算。本申请实施例中,在接收到SQL表达式时,对SQL表达式进行解析,得到SQL表达式中的各个目标运算体的执行顺序和结合规则。之后,根据SQL表达式中的各个目标运算体的执行顺序和结合规则,生成写入树结构,得到SQL表达式对应的Tree结构。

步骤30,将所述Tree结构传输至给FPGA硬件内核;

其中,所述Tree结构用于执行所述SQL表达式对应的目标运算体,得到所述SQL表达式的执行结果;所述Tree结构包括所述目标运算体的执行顺序和结合规则。

根据SQL表达式构建好Tree结构后,将Tree结构发送给FPGA硬件内核,FPGA硬件内核根据Tree结构的内容执行相应的表达式运算。本申请实施例中通过配置Tree结构,使Tree结构用以描述SQL表达式这种具有顺序性和结合性的运算,并通过把这种数据结构即Tree结构传递给FPGA硬件来指导硬件完成整个运算执行的方法,实现提高FPGA处理复杂运算的灵活性。

本发明提供的数据库中SQL表达式运算方法,现有技术中,由于需要重新定制FPGA硬件电路才能够支持变更或改变顺序的SQL表达式,通过在数据库异构计算中引入二叉表达式树数据结构(即Tree结构)来表达SQL查询在FPGA硬件内核中的执行顺序,构建好Tree结构发送给FPGA硬件内核,FPGA硬件内核根据Tree结构的内容执行相应的表达式运算。通过Tree结构用以描述这种SQL表达式具有顺序性和结合性的运算,避免需要重新定制FPGA硬件电路才能支持其他不同的表达式,解决面对未知表达式计算时需要重新设计FPGA硬件电路,提高了FPGA计算单元的灵活性,兼容更复杂的计算需求,并在灵活性和运算效率之间取得较好的平衡;并通过把这种数据结构即SQL表达式以配置的方式传递给FPGA硬件来指导硬件完成整个运算执行的方法,可以提高FPGA处理复杂运算的灵活性,提升FPGA对表达式运算效率。

在一种实施例中,请参照图2,步骤20、基于SQL表达式,确定所述SQL表达式对应的Tree结构,包括:

步骤21,获取所述SQL表达式对应的表达式节点链表;

步骤22,遍历所述表达式节点链表,得到中缀表达式;

步骤23,将所述中缀表达式进行转换,得到后缀表达式,并将所述后缀表达式作为所述SQL表达式对应的Tree结构。

需要说明的是,在生成Tree结构之前,需要将SQL表达式写进表达式节点链表。构建Tree结构就通过遍历数据库的表达式节点链表完成。构建Tree结构的核心思想是:

忽略执行顺序,从SQL表达式的左至右遍历表达式节点链表中的每个非逻辑运算子表达式和逻辑运算子表达式,得到中缀表达式。表达式节点链表中每个非逻辑运算子表达式,举例SQL语句((a=1)OR((b=1)AND(c=1))),如该例子的(a=1),当做一个Tree节点,链表中的逻辑运算子表达式当成一个Tree节点的运算符Tree节点(类似二叉树表达式中的运算符+-*/)。由此,可以通过顺序遍历表达式节点链表,得到“中缀表达式”形式的Tree结构(Tree结构的中缀遍历可表述如:(a=1)、(b=1)、and、(c=1)、or)。

之后,根据SQL表达式中每个表达式的运算执行顺序,遍历中缀表达式中的,将中缀表达式形式的Tree结构转换成后缀表达式形式的Tree结构,运算执行顺序表示表达式的执行先后顺序,例如,上述例子中的子表达式,SQL语句((a=1)OR((b=1)AND(c=1))),Tree结构的后缀遍历可表述如:(a=1)、(b=1)、(c=1)、and、or。“后缀表达式”形式的Tree结构即是所需的结构。

本实施例中,通过先按照顺序遍历SQL表达式中的表达式,得到中缀表达式,再按照执行顺序对中缀表达式进行遍历,得到按照执行顺序得到的后缀表达式,得到Tree结构,使得所生成的Tree结构包含了SQL表达式的表达式及其执行顺序,从而实现将SQL表达式中的表达式及其执行顺序写进Tree结构,提升Tree结构的生成效率,能指示FPGA硬件灵活的执行不同的表达式或不同顺序的表达式,而不用重新定制电路。

在一种实施例中,请参照图3,步骤21,获取所述SQL表达式对应的表达式节点链表之前,包括:

步骤24,获取所述SQL表达式对应的SQL表达式;

步骤25,将所述SQL表达式,写进表达式节点链表。

表达式节点被组织成一个链表,各个独立的表达式(指一个表达式运算函数)当做一个子节点通过类似Append节点组织子计划的方式添加到链表中。在表达式执行计算过程中,需要遍历此链表以执行相关的表达式。在表达式执行计算过程中,需要遍历此链表以执行相关的表达式。

通常情况下SQL语句的表达式经过查询重写优化后才生成表达式节点链表。举例SQL语句“a=1or b=1and c=1”,重写优化后为“((a=1)OR((b=1)AND(c=1)))”,那么最外层括号括起来的就是完整的表达式节点,内层括号则表示的为子节点。

构建Tree结构就通过遍历以上所述的表达式节点链表完成。

在一种实施例中,请参照图4,步骤30,FPGA硬件内核基于所述Tree结构,执行所述SQL表达式对应的目标运算体,确定所述SQL表达式的执行结果,包括:

步骤31,FPGA硬件内核遍历所述Tree结构,以读取所述Tree结构中的Tree节点;

步骤32,若所述Tree节点不为树根节点,则读取当前的Tree节点的目标运算体,并执行所述目标运算体;

步骤33,若Tree节点为所述树根节点,则将所述树根节点的值作为执行所述目标运算体的结果。

FPGA硬件内核遍历Tree结构,以读取Tree结构中的配置内容。FPGA硬件内核对Tree结构中的配置内容执行的主要方式是:若本次读取的Tree节点不为树根节点(root节点),则表明“栈”中的元素的值并非表达式的结果,还需要对Tree节点往下遍历以及计算,否则继续读取到Tree结构中的根节点为止;若本次读取的Tree节点为树根节点,则表明“栈”中的元素的值就是表达式的结果。否则继续读取到Tree结构的树根节点为止。

在一种实施例中,请参照图5,所述目标运算体包括表达式运算函数或逻辑运算符;

步骤32,若所述Tree节点不为树根节点,则读取当前的Tree节点的目标运算体,并执行所述目标运算体,包括:

步骤321,若所述Tree节点是表达式运算函数,则执行所述表达式运算函数对应的表达式运算;

步骤322,若所述Tree节点是逻辑运算符,则读取所述Tree节点对应的待运算元素,并基于所述逻辑运算符,对所述待运算元素执行所述逻辑运算符对应的逻辑运算。

进一步地,若读取的Tree节点是非逻辑运算符(AND/OR)节点,则执行对应的表达式运算流程,得到结果保存到“栈”中;2)读取的Tree节点是逻辑运算符(AND/OR)节点,则从“栈”中取出2个元素执行对应的逻辑运算,得到结果保存到“栈”中。

在一种实施例中,所述Tree结构包括Node结构和Tree结构体,所述Node结构包括目标运算体,所述Tree结构体包括opTypeID字段和参数字段;

所述opTypeID字段用于选择目标表达式运算函数,所述参数字段用于指定所述目标表达式运算函数的所需的目标参数。

Tree结构包含了Node结构和Tree结构体本身,Tree结构描述如下:Node结构包括目标运算体。每个表达式当成是一个节点Node结构,其即可表示一个表达式运算函数,也可以表示一个逻辑运算操作符。表达式运算函数支持一元函数、二元函数,如求最大整数floor、绝对值abs等一元函数,小于运算<、大于运算>等二元函数。逻辑运算操作符支持逻辑与AND、逻辑或OR,无参数。opTypeID字段来用于在电路中通过查找表来选择执行哪种表达式函数。lvalue和rvalue指定一个完整表达式的所需的参数,每个字段占16字节。

根据opTypeID查找表方法执行表达式函数/操作符前,会按照表达式函数/操作符自身的特性有选择的获取lvalue和rvalue的值。若一元函数只需要获取lvalue的值;若是二元参数,还需要获取rvalue的值。Value类型包括3中子类型:1)通道的指示;2)SQL中的constant常量或参数param的值;3)值存放在该配置所在内存段中的偏移。

其中,通道的指示代表使用的是数据流通道的数据做参数,constant常量或参数param的值都是指使用一个传进来的变量做参数;值存放在该配置所在内存段中的偏移也是指使用一个传进来的变量做参数,但这个参数需要根据偏移量获取。

使用例子阐释1个Node节点,例如SQL为‘floor(saly)=2000’。floor(saly)为一个Node,这是一个一元表达式函数。执行时,通过查表法查找opTypeID值“映射”的floor()函数分支,然后进入floor()执行流程。执行前,需要从类二叉树配置节点Node获取一个参数val的内容,val的内容就包含了通道号c6,并且得到val的值为8字节的浮点类型。最后调用浮点类型版本的floor函数解析执行。

Tree结构体包括opTypeID字段和参数字段。Tree结构构造了一个完整的表达式,通过后序遍历类二叉树来得到各个运算表达式的顺序和结合规则。因为FPGA不支持通用设备的指针访问,故左、右子树通过设计偏移量(left_offset/right_offset)来获取。

结合以下图6的SQL表达式描述此表达式的执行顺序如何通过Tree结构来指导运作的。

如图6所示,Tree的根节点是And运算符,后序遍历得到的节点顺序为“=、>、<、or、And”,故整个执行流程如下:

1)执行相等判断=运算表达式,得到结果A;

2)执行先执行大于>运算表达式,得到结果B;

3)执行<运算表达式,得到结果C;

4)以B和C,执行或or运算操作,得到结果D;

5)以A和D执行与and运算操作,得到结果E;

6)以遍历到根,执行完毕,返回最终结果为E。

下面对本发明提供的数据库中SQL表达式运算装置进行描述,下文描述的数据库中SQL表达式运算装置与上文描述的数据库中SQL表达式运算方法可相互对应参照。

本发明提供的数据库中SQL表达式运算装置,包括:

获取模块,用于获取SQL表达式;

Tree结构确定模块,用于基于SQL表达式,确定所述SQL表达式对应的Tree结构;

传输模块,用于将所述Tree结构传输至给FPGA硬件内核;

其中,所述Tree结构用于执行所述SQL表达式对应的目标运算体,得到所述SQL表达式的执行结果;所述Tree结构包括所述目标运算体的执行顺序和结合规则。

进一步地,所述Tree结构确定模块,还用于:

获取所述SQL表达式对应的表达式节点链表;

遍历所述表达式节点链表,得到中缀表达式;

将所述中缀表达式进行转换,得到后缀表达式,并将所述后缀表达式作为所述SQL表达式对应的Tree结构。

进一步地,所述Tree结构确定模块,还用于:

获取所述SQL表达式对应的SQL表达式;

将所述SQL表达式,写进表达式节点链表。

进一步地,所述Tree结构用于:FPGA硬件内核基于所述Tree结构,执行所述SQL表达式对应的目标运算体,确定所述SQL表达式的执行结果,包括:

遍历所述Tree结构,以读取所述Tree结构中的Tree节点;

若所述Tree节点不为树根节点,则读取当前的Tree节点的目标运算体,并执行所述目标运算体;

若Tree节点为所述树根节点,则将所述树根节点的值作为执行所述目标运算体的结果。

进一步地,所述目标运算体包括表达式运算函数或逻辑运算符;

进一步地,所述Tree结构还用于:

若所述Tree节点是表达式运算函数,则执行所述表达式运算函数对应的表达式运算;

若所述Tree节点是逻辑运算符,则读取所述Tree节点对应的待运算元素,并基于所述逻辑运算符,对所述待运算元素执行所述逻辑运算符对应的逻辑运算。

进一步地,所述Tree结构包括Node结构和Tree结构体,所述Node结构包括目标运算体,所述Tree结构体包括opTypeID字段和参数字段;

所述opTypeID字段用于选择目标表达式运算函数,所述参数字段用于指定所述目标表达式运算函数的所需的目标参数。

图7示例了一种电子设备的实体结构示意图,如图7所示,该电子设备可以包括:处理器(processor)710、通信接口(Communications Interface)720、存储器(memory)730和通信总线740,其中,处理器710,通信接口720,存储器730通过通信总线740完成相互间的通信。处理器710可以调用存储器730中的逻辑指令,以执行数据库中SQL表达式运算方法,该方法包括:获取SQL表达式;基于SQL表达式,确定所述SQL表达式对应的Tree结构;将所述Tree结构传输至给FPGA硬件内核;其中,所述Tree结构用于执行所述SQL表达式对应的目标运算体,得到所述SQL表达式的执行结果;所述Tree结构包括所述目标运算体的执行顺序和结合规则。

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

另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的数据库中SQL表达式运算方法,该方法包括:获取SQL表达式;基于SQL表达式,确定所述SQL表达式对应的Tree结构;将所述Tree结构传输至给FPGA硬件内核;其中,所述Tree结构用于执行所述SQL表达式对应的目标运算体,得到所述SQL表达式的执行结果;所述Tree结构包括所述目标运算体的执行顺序和结合规则。

又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的数据库中SQL表达式运算方法,该方法包括:获取SQL表达式;基于SQL表达式,确定所述SQL表达式对应的Tree结构;将所述Tree结构传输至给FPGA硬件内核;其中,所述Tree结构用于执行所述SQL表达式对应的目标运算体,得到所述SQL表达式的执行结果;所述Tree结构包括所述目标运算体的执行顺序和结合规则。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

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

技术分类

06120115630061