数据处理方法、装置、电子设备及存储介质制造方法及图纸

技术编号:33653902 阅读:50 留言:0更新日期:2022-06-02 20:32
本申请实施例提供了一种数据处理方法、装置、电子设备及计算机可读存储介质,涉及数据库领域。该方法包括:获取执行计划树,所述执行计划树包括至少一个算子;在迭代器中封装所述执行计划树的根节点的调用函数,所述根节点为所述执行计划树顶端的算子,所述调用函数包括第一close函数;根据所述迭代器对应的编程语言提供的析构机制,将调用所述第一close函数整合至所述析构机制中,以使得在调用所述迭代器触发所述析构机制时,调用所述第一close函数。本申请实施例实现了自动调用第一close函数,外部调用按照调用原来的迭代器的方式调用智能迭代器,而不需要关注忘记close函数的调用问题。用问题。用问题。

【技术实现步骤摘要】
数据处理方法、装置、电子设备及存储介质


[0001]本申请涉及数据库
,具体而言,本申请涉及一种数据处理方法、装置、电子设备及存储介质。

技术介绍

[0002]数据库中将接收到的select语句转化为关系算子(Operator)组成的执行计划来执行结果。每个算子通过迭代的方式调用下层的算子拿到数据,然后经过该算子计算之后返回结果给上层算子。这种迭代模型被抽象成open()

next()

close()接口,其中open()负责初始化算子,next()执行数据,close()清理资源。
[0003]在实际情况中,close()接口经常被忘记调用。这样造成程序不少的缺陷,例如算子的线程被泄露、已经读取到但是还未被上层算子消费的数据所占用的内存也会泄漏。这种资源泄漏可能会导致数据库瘫痪。
[0004]另外如果忘记调用close()接口的情况下外部调用者重试这个查询计划,当再次运行open()和next()的时候还可能造成数据错误,这是数据库中的严重错误。
[0005]这种因忘记调用close()接口导致的错误在数据库使用过程中经常发生,造成的问题或者潜在问题也非常严重。

技术实现思路

[0006]本申请实施例提供了一种数据处理方法、装置、电子设备、计算机可读存储介质及计算机程序产品,可以解决现有技术的上述问题。所述技术方案如下:
[0007]根据本申请实施例的一个方面,提供了一种数据处理方法,该方法包括:
[0008]获取执行计划树,所述执行计划树包括至少一个算子;
[0009]在迭代器中封装所述执行计划树的根节点的调用函数,所述根节点为所述执行计划树顶端的算子,所述调用函数包括第一close函数;
[0010]根据所述迭代器对应的编程语言提供的析构机制,将调用所述第一close函数整合至所述析构机制中,以使得在调用所述迭代器触发所述析构机制时,调用所述第一close函数。
[0011]作为一种可能的实现方式,当迭代器对应的编程语言为不具有垃圾回收功能的编程语言时,将调用所述第一close函数整合至所述析构机制中,包括:
[0012]将所述第一close函数写入所述迭代器的析构函数。
[0013]作为一种可能的实现方式,以使得在调用所述迭代器触发所述析构机制时,调用所述第一close函数,包括:
[0014]根据所述根节点构造迭代器对象,明确所述迭代器对象的作用域;
[0015]响应于所述迭代器对象退出所述作用域,执行所述析构函数,以调用所述第一close函数。
[0016]作为一种可能的实现方式,当迭代器对应的编程语言为具有垃圾回收功能的编程
语言时,将调用所述第一close函数整合至所述析构机制中,包括:
[0017]将调用所述第一close函数设置为所述迭代器的收尾操作。
[0018]作为一种可能的实现方式,以使得在调用所述迭代器触发所述析构机制时,调用所述第一close函数,包括:
[0019]响应于所述迭代器所在的数据库进程退出,触发垃圾回收,执行所述收尾操作,以调用所述第一close函数。
[0020]作为一种可能的实现方式,整合至所述析构机制中,包括:
[0021]由所述迭代器继承AutoCloseable类,重载所述AutoCloseable类的第二close函数。
[0022]作为一种可能的实现方式,以使得在调用所述迭代器触发所述析构机制时,调用所述第一close函数,包括:
[0023]根据所述根节点构造迭代器对象,明确所述迭代器对象的作用域;
[0024]响应于所述迭代器对象退出所述作用域,调用所述第二close函数,由所述第二close函数调用所述第一close函数。
[0025]根据本申请实施例的另一个方面,提供了一种数据处理装置,该装置包括:
[0026]计划树获取模块,用于获取执行计划树,所述执行计划树包括至少一个算子;
[0027]迭代器封装模块,用于在迭代器中封装所述执行计划树的根节点的调用函数,所述根节点为所述执行计划树顶端的算子,所述调用函数包括第一close函数;
[0028]整合模块,用于根据所述迭代器对应的编程语言提供的析构机制,将调用所述第一close函数整合至所述析构机制中,以使得在调用所述迭代器触发所述析构机制时,调用所述第一close函数。
[0029]作为一种可能的实现方式,整合模块具体用于:当迭代器对应的编程语言为不具有垃圾回收功能的编程语言时,将所述第一close函数写入所述迭代器的析构函数。
[0030]作为一种可能的实现方式,数据处理装置还包括:
[0031]第一对象构造模块,用于根据所述根节点构造迭代器对象,明确所述迭代器对象的作用域;
[0032]第一析构模块,用于响应于所述迭代器对象退出所述作用域,执行所述析构函数,以调用所述第一close函数
[0033]作为一种可能的实现方式,整合模块具体用于:当迭代器对应的编程语言为具有垃圾回收功能的编程语言时,将调用所述第一close函数设置为所述迭代器的收尾操作。
[0034]作为一种可能的实现方式,数据处理装置还包括:
[0035]收尾模块,用于响应于所述迭代器所在的数据库进程退出,触发垃圾回收,执行所述收尾操作,以调用所述第一close函数。
[0036]作为一种可能的实现方式,整合模块具体用于:当迭代器对应的编程语言为java编程语言时,由所述迭代器继承AutoCloseable类,重载所述AutoCloseable类的第二close函数。
[0037]作为一种可能的实现方式,数据处理装置还包括:
[0038]第二对象构造模块,用于根据所述根节点构造迭代器对象,明确所述迭代器对象的作用域;
指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。
[0053]为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
[0054]首先对本申请涉及的几个名词进行介绍和解释:
[0055]迭代器,又称为volcano执行模型,是一个在数据库中被广泛用于执行查询计划的模型。数据库中将接收到的select语句转化为关系算子(Operator)组成的执行计划来执行结果。这些算子包括连接算子、聚集算子、选择算子、投影算子和扫描算子等。每个算子通过迭代的方式调用下层的算子拿到数据,然后经过该算子计算之后返回结果给上层算子。这种迭代模型被抽象成open()、next()和close()接口,执行相应的函数。具体来说,
[0056]1)open函数用于初始化本算子的一些结构,像初始化内存追踪器,启动工作线程和构建哈希表等;
[0057]2)next函数负责每次从下层算子获取一条本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据处理方法,其特征在于,包括:获取执行计划树,所述执行计划树包括至少一个算子;在迭代器中封装所述执行计划树的根节点的调用函数,所述根节点为所述执行计划树顶端的算子,所述调用函数包括第一close函数;根据所述迭代器对应的编程语言提供的析构机制,将调用所述第一close函数整合至所述析构机制中,以使得在调用所述迭代器触发所述析构机制时,调用所述第一close函数。2.根据权利要求1所述的数据处理方法,其特征在于,当所述迭代器对应的编程语言为不具有垃圾回收功能的编程语言时,将调用所述第一close函数整合至所述析构机制中,包括:将所述第一close函数写入所述迭代器的析构函数。3.根据权利要求2所述的数据处理方法,其特征在于,所述以使得在调用所述迭代器触发所述析构机制时,调用所述第一close函数,包括:根据所述根节点构造迭代器对象,明确所述迭代器对象的作用域;响应于所述迭代器对象退出所述作用域,执行所述析构函数,以调用所述第一close函数。4.根据权利要求1所述的数据处理方法,其特征在于,当所述迭代器对应的编程语言为具有垃圾回收功能的编程语言时,将调用所述第一close函数整合至所述析构机制中,包括:将调用所述第一close函数设置为所述迭代器的收尾操作。5.根据权利要求4所述的数据处理方法,其特征在于,所述以使得在调用所述迭代器触发所述析构机制时,调用所述第一close函数,包括:响应于所述迭代器所在的数据库进程退出,触发垃圾回收,执行所述收尾操作,以调用所述第一close函数。6.根据权利要求1所述的数据处...

【专利技术属性】
技术研发人员:方祝和
申请(专利权)人:平凯星辰北京科技有限公司
类型:发明
国别省市:

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

1