目标数据库中基于标注的函数调用折叠方法和系统技术方案

技术编号:37148115 阅读:14 留言:0更新日期:2023-04-06 22:01
本申请涉及一种目标数据库中基于标注的函数调用折叠方法和系统,其中,该方法预先采用函数标注的形式,标注函数的状态情况,在目标数据库中在对表达式进行调用折叠时,根据表达式的抽象语法树结构,确定所述表达式是否为函数调用,若是,则通过函数标注,确定所述函数的状态情况;在所述函数的参数都是常量的情况下,执行函数求值,并用所述求值结果替换所述函数调用,从而在做表达式折叠的时候,如果纯函数的输入参数都是常量,可以直接计算纯函数的值,并替换相应的函数调用,达到折叠函数调用的目的,通过本申请,解决了相关技术中在对表达式进行调用折叠时,无法折叠带有函数调用的表达式,运算开销较大的问题,提高了数据库的计算性能。的计算性能。的计算性能。

【技术实现步骤摘要】
目标数据库中基于标注的函数调用折叠方法和系统


[0001]本申请涉及数据库
,特别是涉及一种目标数据库中基于标注的函数调用折叠方法和系统。

技术介绍

[0002]对于数据库本身包含表达式计算的能力,以及支持函数调用的目标数据库来说(例如,Nebula Graph数据库),目前广泛使用的表达式常量折叠技术,可以将一个表达式进行预先折叠计算,比如:将表达式`a+2+1`折叠成为`a+3`,这样在后续的查询计算中,每次计算都会减少一次加法运算,极大地提升计算效率。
[0003]但是,目前的技术无法折叠带有函数调用的表达式,因为有的函数是有状态的,不是纯函数,每次计算出来的结果可能不一样,比如:`rand(1,100)+1`,这个表达式无法折叠成为一个常量,因为`rand`函数是有状态的,每次函数调用返回的结果不一样,因此无法直接预先计算出结果。因此现有技术中的目标数据库直接避开了对带有函数调用的表达式的折叠。
[0004]针对相关技术中,目标数据库在对表达式进行调用折叠时,无法折叠带有函数调用的表达式,运算开销较大的问题,尚未提出有效的解决方案。

技术实现思路

[0005]本申请实施例提供了一种目标数据库中基于标注的函数调用折叠方法和系统,以至少解决相关技术中目标数据库在对表达式进行调用折叠时,无法折叠带有函数调用的表达式,运算开销较大的问题。
[0006]第一方面,本申请实施例提供了一种目标数据库中基于标注的函数调用折叠方法,预先采用函数标注的形式,标注函数的状态情况,所述方法包括:
[0007]在对表达式进行调用折叠时,根据所述表达式的抽象语法树结构,确定所述表达式是否为函数调用,若是,则通过函数标注,确定所述函数的状态情况;
[0008]在所述函数的参数都是常量的情况下,执行函数求值,并用所述求值结果替换所述函数调用。
[0009]在其中一些实施例中,所述确定所述表达式是否为函数调用之后,所述方法还包括:
[0010]若否,则确定所述表达式的各个子表达式是否为常量,若存在子表达式为常量的情况,则执行表达式求值,并用所述求值结果替换所述表达式。
[0011]在其中一些实施例中,所述确定所述函数的状态情况,过程包括:
[0012]通过函数标注,确定所述函数是否为纯函数,在所述函数为纯函数的情况下,确定所述函数的参数是否都是常量。
[0013]第二方面,本申请实施例提供了一种目标数据库中基于标注的函数调用折叠系统,所述系统包括:
[0014]标注模块,用于采用函数标注的形式,标注函数的状态情况;
[0015]确认模块,用于在对表达式进行调用折叠时,根据所述表达式的抽象语法树结构,确定所述表达式是否为函数调用,若是,则通过函数标注,确定所述函数的状态情况;
[0016]执行模块,用于在所述函数的参数都是常量的情况下,执行函数求值,并用所述求值结果替换所述函数调用。
[0017]在其中一些实施例中,所述确认模块还用于,所述确定所述表达式是否为函数调用之后:若否,则所述确认模块确定所述表达式的各个子表达式是否为常量;
[0018]所述执行模块还用于,若存在子表达式为常量的情况,则所述执行模块执行表达式求值,并用所述求值结果替换所述表达式。
[0019]在其中一些实施例中,在所述确认模块中,所述确定所述函数的状态情况,过程包括:通过函数标注,确定所述函数是否为纯函数,在所述函数为纯函数的情况下,确定所述函数的参数是否都是常量。
[0020]第三方面,本申请实施例提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述目标数据库中基于标注的函数调用折叠方法。
[0021]第四方面,本申请实施例提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述目标数据库中基于标注的函数调用折叠方法。
[0022]相比于相关技术中在对表达式进行调用折叠时,无法折叠带有函数调用的表达式,运算开销较大的问题,本申请实施例通过预先采用函数标注的形式,标注函数的状态情况,在对表达式进行调用折叠时,根据所述表达式的抽象语法树结构,确定所述表达式是否为函数调用,若是,则通过函数标注,确定所述函数的状态情况;在所述函数的参数都是常量的情况下,执行函数求值,并用所述求值结果替换所述函数调用,从而在做表达式折叠的时候,如果纯函数的输入参数都是常量,那么可以直接计算纯函数的值,并替换相应的函数调用,最终达到折叠函数调用的目的,实现了其中一部分函数的可折叠,解决了相关技术中目标数据库在对表达式进行调用折叠时,无法折叠带有函数调用的表达式,运算开销较大的问题,提高了目标数据库的计算性能。
附图说明
[0023]此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0024]图1是根据本申请实施例的目标数据库中基于标注的函数调用折叠方法的应用环境示意图;
[0025]图2是根据本申请第一实施例的目标数据库中基于标注的函数调用折叠方法的示意图;
[0026]图3是根据本申请第二实施例的表达式的抽象语法树结构的示意图;
[0027]图4是根据本申请第三实施例的目标数据库中基于标注的函数调用折叠方法的示意图;
[0028]图5是根据本申请实施例的电子设备的内部结构示意图。
具体实施方式
[0029]为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。基于本申请提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0030]显而易见地,下面描述中的附图仅仅是本申请的一些示例或实施例,对于本领域的普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图将本申请应用于其他类似情景。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本申请公开的内容相关的本领域的普通技术人员而言,在本申请揭露的
技术实现思路
的基础上进行的一些设计,制造或者生产等变更只是常规的技术手段,不应当理解为本申请公开的内容不充分。
[0031]在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本申请所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
[0032]除非另作定义,本申请所涉及的技术术语或者科学术语应当为本申请所属
内具有一般技能的人士所理解的通常意义。本申请所涉及本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种目标数据库中基于标注的函数调用折叠方法,其特征在于,所述目标数据库包括表达式计算和函数调用的能力,所述方法应用于所述目标数据库调用表达式的场景,预先采用函数标注的形式,标注各个函数的状态情况;所述方法包括:在目标数据库中根据所述表达式的抽象语法树结构,确定所述表达式是否为函数调用,若是,则通过所述函数标注,确定所述函数的状态情况;基于所述函数的状态情况,在所述函数的参数都是被标注为常量的情况下,执行函数求值,并用所述求值结果替换所述函数调用。2.根据权利要求1所述的方法,其特征在于,所述确定所述表达式是否为函数调用之后,所述方法还包括:若否,则确定所述表达式的各个子表达式是否为常量,若存在子表达式为常量的情况,则执行表达式求值,并用所述求值结果替换所述表达式。3.根据权利要求1所述的方法,其特征在于,所述确定所述函数的状态情况,过程包括:通过函数标注,确定所述函数是否为纯函数,在所述函数为纯函数的情况下,确定所述函数的参数是否都是常量。4.一种目标数据库中基于标注的函数调用折叠系统,所述目标数据库包括表达式计算和函数调用的能力,所述系统应用于所述目标数据库调用表达式的场景,其特征在于,所述系统包括:标注模块,用于采用函数标注的形式,标注各个函数的状态情况;确认模块,用于在目标数据库...

【专利技术属性】
技术研发人员:黄世海叶小萌
申请(专利权)人:杭州悦数科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1