CN108228880A - 数据库管理系统调用外部函数的方法、装置、设备及介质 - Google Patents
数据库管理系统调用外部函数的方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN108228880A CN108228880A CN201810068779.9A CN201810068779A CN108228880A CN 108228880 A CN108228880 A CN 108228880A CN 201810068779 A CN201810068779 A CN 201810068779A CN 108228880 A CN108228880 A CN 108228880A
- Authority
- CN
- China
- Prior art keywords
- external function
- database server
- task
- assisted
- implementing result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种数据库管理系统调用外部函数的方法、装置、设备及介质。该方法包括:如果通过数据库服务器进程确定接收到客户端发送的外部函数执行请求,则通过数据库服务器进程向AP辅助进程发送外部函数执行任务,AP辅助进程为用于执行外部函数调用功能的辅助进程;通过AP辅助进程接收外部函数执行任务;通过AP辅助进程加载第三方共享库,执行外部函数执行任务,获取执行结果,并将执行结果返回至数据库服务器进程;通过数据库服务进程接收AP辅助进程返回的执行结果,并将执行结果发送给客户端。上述方法优化了现有技术中的数据库管理系统调用外部函数的方法,提高了数据库服务器的稳定性以及外部函数的执行效率。
Description
技术领域
本发明实施例涉及数据库技术领域,尤其涉及一种数据库管理系统调用外部函数的方法、装置、设备及介质。
背景技术
外部函数是使用C语言或JAVA语言编写,在数据库外编译并保存在第三方共享库中,被用户通过PL/SQL(Procedural Language/SQL,过程化SQL语言)调用的函数,其中,C语言环境下的共享文件为dll文件(Windows系统)和so文件(Linux系统),JAVA语言环境下的共享文件为jar包。用户在数据库外自定义的函数,放到数据库中执行,也就成了外部函数。数据库使用外部函数的方式,大大地扩展了SQL语言的存储过程或执行方法,满足了用户的需求。
目前,大部分数据库管理系统都允许调用外部函数(dll/so文件或jar包),方法有两种:一是利用子进程的方式执行,数据库管理系统只要接收到一个外部函数请求,就启用一个子进程,分别来执行各自的响应,其缺点在于,如果有大量的外部函数并发执行,就需要启动对应数量的子进程,且子进程之间还会互相抢夺系统资源;二是利用插件的方式来执行,把共享文件(dll/so文件或jar包)注册到一个程序集中作为数据库服务器的插件,并运行的过程中引用这个插件资源,其缺点在于,一旦共享文件出现问题,将会影响到整个数据库服务器的运行。
发明内容
本发明实施例提供了一种数据库管理系统调用外部函数的方法、装置、设备及介质,以优化现有技术中的数据库管理系统调用外部函数的方法,提高外部函数的执行效率。
第一方面,本发明实施例提供了一种数据库管理系统调用外部函数的方法,包括:
如果通过数据库服务器进程确定接收到客户端发送的外部函数执行请求,则通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务,其中,所述AP辅助进程为数据库管理系统用于执行外部函数调用功能的辅助进程;
通过所述AP辅助进程接收所述外部函数执行任务;
通过所述AP辅助进程加载第三方共享库,执行所述外部函数执行任务,获取执行结果,并将所述执行结果返回至所述数据库服务器进程;
通过所述数据库服务进程接收所述AP辅助进程返回的执行结果,并将所述执行结果发送给所述客户端。
第二方面,本发明实施例还提供了一种数据库管理系统调用外部函数的装置,包括:
外部函数执行任务发送模块,用于如果通过数据库服务器进程确定接收到客户端发送的外部函数执行请求,则通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务,其中,所述AP辅助进程为数据库管理系统用于执行外部函数调用功能的辅助进程;
外部函数执行任务接收模块,用于通过所述AP辅助进程接收所述外部函数执行任务;
外部函数执行任务执行模块,用于通过所述AP辅助进程加载第三方共享库,执行所述外部函数执行任务,获取执行结果,并将所述执行结果返回至所述数据库服务器进程;
外部函数执行结果回馈模块,用于通过所述数据库服务进程接收所述AP辅助进程返回的执行结果,并将所述执行结果发送给所述客户端。
第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明实施例中任一所述的数据库管理系统调用外部函数的方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例中任一所述的数据库管理系统调用外部函数的方法。
本发明实施例提供了一种数据库管理系统调用外部函数的方法、装置、设备及介质,通过设置一个AP辅助进程,作为数据库管理系统用于执行外部函数调用功能的辅助进程,当数据库服务器进程接收到客户端发送的外部函数执行请求时,向AP辅助进程发送外部函数执行任务,AP辅助进程接收并执行所述外部函数执行任务后,将执行结果返回至数据库服务器进程中,进而使数据库服务器进程将所述执行结果返回客户端。上述方法优化了现有技术中的数据库管理系统调用外部函数的方法,不需要创建多个子进程,即可实现多个外部函数任务的并发;即使外部函数在执行过程中,AP辅助进程出现异常也不会对数据库服务器产生影响,因此提高了数据库服务器的稳定性以及外部函数的执行效率,也避免了数据库服务器执行过程中出现由于创建子进程而可能导致的内存异常。
附图说明
图1A是本发明实施例一中的一种数据库管理系统调用外部函数的方法的流程图;
图1B是本发明实施例一中的数据库服务器进程、AP辅助进程之间以及第三方共享库的交互关系示意图;
图1C是本发明实施例一中的管道通信的原理图;
图2是本发明实施例二中的一种数据库管理系统调用外部函数的方法的流程图;
图3是本发明实施例三中的一种数据库管理系统调用外部函数的装置的结构示意图;
图4是为本发明实施例四中的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
本实施例提供了一种数据库管理系统调用外部函数的方法,该方法可以由本发明实施例提供的数据库管理系统调用外部函数的装置来执行,该装置可采用软件和/或硬件的方式实现,并一般可集成在处理器中。如图1A所示,本实施例的方法具体包括:
S110、如果通过数据库服务器进程确定接收到客户端发送的外部函数执行请求,则通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务。
数据库服务器进程,是数据库管理系统中用于接收客户端外部函数执行请求的数据库执行器。AP辅助进程(Assistant Process)为数据库管理系统中用于执行外部函数调用功能的辅助进程。当客户端用户发送一个外部函数执行请求时,数据库服务器进程就这个外部函数执行任务交给AP辅助进程来处理,通过AP辅助进程来实现外部函数调用。
具体的,AP辅助进程包括监听线程和任务线程,其中,监听线程用于监听数据库服务器进程发送的外部函数执行任务消息,并根据所述外部函数执行任务消息生成相应的任务线程,而任务线程用于执行外部函数。
S120、通过AP辅助进程接收所述外部函数执行任务。
S130、通过AP辅助进程加载第三方共享库,执行所述外部函数执行任务,获取执行结果,并将所述执行结果返回至所述数据库服务器进程。
具体的,第三方共享库中包括文件类型为dll文件、so文件和Jar包的外部函数。因此,本实施例提供的方法不仅可以调用C语言编写的外部函数(dll/so文件),还可以调用JAVA语言编写的外部函数,兼容了更多的开发语言。
具体的,数据库服务器进程与AP辅助进程之间的通信方式包括:socket通信或者管道通信。其中,数据库服务器进程、AP辅助进程以及第三方共享库的交互关系如图1B所示。
当数据库服务器进程和AP辅助进程在同一台计算机设备上时,才可以采用管道通信的通信方式,即AP辅助进程和数据库服务器进程之间是通过管道来实现收发消息任务的。而,AP辅助进程和第三方共享库二者必须在同一台机器上。管道的数据结构包括状态、连接句柄、管道名、等待事件,管道可以分为两类:公共管道和专用管道。专用管道,也是命名管道,即不同的专用管道的命名都不同,用于外部函数执行时数据库服务器进程与AP辅助进程之间的通信,不同的外部函数执行任务都分别使用各自的专用管道。监听管道是一种公共管道,用于监听数据库服务器进程发出的外部函数执行任务。在实施例中,监听管道的主要任务是把所有外部函数执行任务的专用管道名称从数据库服务器进程发送给AP辅助进程,专用管道的主要任务是把外部函数执行任务的第三方共享库位置和外部函数执行任务的参数从数据库服务器进程发送到AP辅助进程,以及把AP辅助进程得执行结果发送给数据库服务器进程。其中,管道通信的原理图如图1C所示。
无论数据库服务器进程和AP辅助进程是否在同一台计算机设备上,都可以使用socket通信。而,AP辅助进程和第三方共享库二者必须在同一台机器上。当数据库服务器进程接收到外部函数执行请求时,通过指定socket监听端口连接本地或远程的AP辅助进程。AP辅助进程通过socket监听端口监听到任务消息之后,socket机制会对每一个任务分别建立一个专用的socket连接,分别启动各并行任务子线程,再把socket传递给各任务子线程,各任务子线程中通过专用的socket接收任务消息,处理完成后把执行结果通过原socket返回。与管道通信不同的是,socket通信不仅可以在本地完成外部函数的调用,还可以通过网络远程连接,用户可以指定远程计算机设备上的第三方共享库,将AP辅助进程部署到远程环境中,在异地完成外部函数执行任务。
S140、通过数据库服务进程接收AP辅助进程返回的执行结果,并将执行结果发送给客户端。
通过数据库服务进程接收AP辅助进程返回的结果消息,解析结果消息,并把外部函数返回值和输出参数信息发送给客户端。
本实施例提供的一种数据库管理系统调用外部函数的方法,通过设置一个AP辅助进程,作为数据库管理系统用于执行外部函数调用功能的辅助进程,当数据库服务器进程接收到客户端发送的外部函数执行请求时,向AP辅助进程发送外部函数执行任务,AP辅助进程接收并执行所述外部函数执行任务后,将执行结果返回至数据库服务器进程中,进而使数据库服务器进程将所述执行结果返回客户端。上述方法优化了现有技术中的数据库管理系统调用外部函数的方法,与子进程方式不同,不需要创建多个子进程,只启动一个AP辅助进程就能无限次的调用外部函数,即可实现多个外部函数任务的并发。由于AP辅助进程是独立于数据库服务器进程之外的,不同于插件方式,一旦插件有问题就影响服务器运行。所以本发明即使外部函数在执行过程中出现了任何问题(例如AP辅助进程异常),都不会影响到服务器的正常执行,提升了服务器的稳定性。即使外部函数出错,特别是第三方共享库中的外部函数错误,由于系统控制权已经转移给AP辅助进程中的某个任务线程,所以只可能引起AP辅助进程异常,而不会影响到整个数据库服务器进程,避免了在数据库服务器的执行过程中由于创建子进程而可能导致的内存异常。同时,上述方法不仅可以调用C语言编写的外部函数(dll/so文件),还可以调用JAVA语言编写的外部函数,提供了兼容性。
本实施例提供的数据库管理系统调用外部函数的方法的使用方法为:
第一步,启动数据库服务器进程,启动AP辅助进程。
第二步,在数据库服务器进程中创建外部函数。
create or replace FUNCTION my_add(a int,bint)return int
external'D:\TEST_CEXTERNALFUNC\x32\detest.dll'"C_ADD"using c;
其中:my_add是外部函数名;C_ADD是my_add在第三方共享库中对应的函数名;D:\TEST_CEXTERNALFUNC\x32\detest.dll为第三方共享库的路径;using c表示用的是C语言,如果是利用JAVA语言写的jar包,则需要指定using JAVA。
第三步,在数据库中查询外部函数。
Select my_add(1,2);
实施例二
本实施例以上述实施例为基础,选择数据库服务器进程与AP辅助进程之间,的通信方式为管道通信方式,将上述数据库管理系统调用外部函数的方法进行详细解释说明。
其中,将通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务,具体为:
通过所述数据库服务器进程从预先创建的管道池中获取一个空闲的专用管道或新建一个专用管道后,生成外部函数执行任务消息,其中,所述外部函数执行任务消息中包括所述专用管道的管道名、任务语言类型以及任务信息;如果确定所述数据库服务器进程开启监听管道客户端,则通过所述数据库服务器进程经由所述监听管道向所述AP辅助进程发送所述外部函数执行任务消息;如果确定所述数据库服务器进程开启专用管道服务端,则通过所述数据库服务器进程经由所述专用管道向所述AP辅助进程发送执行参数消息。
具体的,上述方法,在通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务之前,还包括:通过AP辅助进程创建监听管道;并将通过所述AP辅助进程接收所述外部函数执行任务,具体为:
如果确定监听线程开启监听管道服务端,则通过监听线程监听外部函数执行任务消息;如果通过监听线程经由监听管道接收到外部函数执行任务消息,则解析专用管道的管道名;如果确定监听线程根据管道名开启专用管道客户端,则通过监听线程生成对应的任务线程,并放入任务队列,其中,目标任务线程的线程参数为目标专用管道的管道名、任务语言类型以及任务信息;通过目标任务线程经由目标专用管道接收并解析所述执行参数消息。
将通过AP辅助进程加载第三方共享库,执行外部函数执行任务,获取执行结果,并将执行结果返回数据库服务器进程,具体为:
通过任务线程按任务队列执行外部函数,获取执行结果;通过任务线程将执行结果返回至数据库服务器进程。
在所述通过所述任务线程将所述执行结果返回所述数据库服务器进程之后,上述方法还包括:通过任务线程关闭与任务线程对应的专用管道;退出任务线程;通过数据库服务器进程将专用管道放回管道池。
具体的,本实施例提供的一种数据库管理系统调用外部函数的方法,如图2所示,包括:
S210、通过AP辅助进程创建监听管道,通过监听线程打开监听管道服务端。
其中,管道的连接句柄指的是管道的服务端和管道的客户端。例如,监听管道是由AP辅助进程创建的,则AP辅助进程中的监听线程开启管道服务端,数据库服务器进程开启监听管道客户端;而专用管道是由数据库服务器进程创建的,则数据库服务器进程开启专用管道服务端,AP辅助进程开启专用管道客户端。在外部函数执行任务结束后,AP辅助进程关闭监听管道服务端,关闭专用管道客户端,数据库服务器进程关闭监听管道客户端,关闭专用管道服务端。
AP辅助进程作为数据库服务器进程的辅助进程,启动AP辅助进程后,AP辅助进程创建一个监听管道,得到管道名和管道句柄。该管道可以命名为LSNR_PIPE,用于监听数据库服务器进程发送过来的外部函数执行任务。
监听线程开启监听管道服务端,等待数据库服务器进程发起的请求连接,即判断数据库服务器进程是否开启监听管道客户端,在没有请求时需进行等待连接重试。其中,监听管道使用管道的非阻塞连接模型。监听线程开启监听管道服务端,采用异步连接的方式。
S220、通过数据库服务器进程开启监听管道客户端。
数据库服务器进程在准备执行外部函数之前,需先打开监听管道服务端。监听线程如果确定数据库服务器进程已经打开监听管道客户端,则准备缓存,准备通过监听管道接收外部函数执行任务,随后监听管道会收到数据库服务器进程陆陆续续发来的任务消息。
S230、如果通过数据库服务器进程确定接收到客户端发送的外部函数执行请求,则通过数据库服务器进程从预先创建的管道池中获取一个空闲的专用管道或新建一个专用管道后,开启专用管道服务端,生成外部函数执行任务消息。
其中,外部函数执行任务消息中包括专用管道的管道名和任务语言类型,任务语言类型指的是C语言还是JAVA语言。
数据库管理系统启动时会创建一个管道池作为缓存,用来存储专用管道。该管道池中的管道专门用于外部函数执行时,数据库服务器进程与AP辅助进程之间进行发送消息的通信,管道命名方式有多种,例如可以为:特定前缀_进程号_序号。
新建的管道池里没有专用管道,首次使用时,数据库服务器进行会创建一个专用管道,同时开启专用管道服务端,专用管道使用非阻塞连接模型,采用异步连接的方式。同时,检查专用管道句柄是否已经被连接。专用管道使用完毕之后再放进管道池供其他执行外部函数的任务使用。所以,当有空闲的专用管道的时候,数据库服务器进程直接从管道池中获取即可;当没有空闲的专用管道的时候,数据库服务器进程需要重新创建一个专用管道。
S240、通过数据库服务器进程经由监听管道向监听线程发送外部函数执行任务消息。
S250、如果通过监听线程经由监听管道接收到外部函数执行任务消息,则通过监听线程解析专用管道的管道名,根据所述管道名开启专用管道的客户端。
S260、通过监听线程生成对应的任务线程,并放入任务队列。
对于每一个任务消息,监听线程都会生成一对一的任务线程,放入任务线程队列。其中,目标任务线程的线程参数为目标专用管道的管道名、任务语言类型以及任务信息。
S270、通过数据库服务器进程经由专用管道向AP辅助进程中的任务线程发送执行参数消息。
数据库服务器进程通过专用管道发送外部函数执行参数消息。其中,消息包括:dll/so/jar包的外部库地址(可以是任意系统中的任意位置)、外部函数名、参数个数n以及n个描述信息(例如可以是参数类型、参数空标记、参数长度、参数数据)和返回类型。
S280、通过目标任务线程经由目标专用管道接收并解析所述执行参数消息,按任务队列执行外部函数,获取执行结果;
AP辅助进程从任务线程队列中获取一个任务,即获取了专用管道名称。通过与这个任务对应的专用管道(即目标专用管道)收到执行参数消息之后,解析执行参数消息,然后开始执行外部参数获取执行结果。
S290、通过任务线程将执行结果返回至数据库服务器进程,关闭与任务线程对应的专用管道,退出任务线程。
其中,AP辅助进程的每个任务线程发送各自的执行结果消息,使用非阻塞写模型,采用异步写的方式。
S2100、通过数据库服务进程接收所述AP辅助进程返回的执行结果,并解析。
其中,数据库服务器进程从专用管道接收执行结果消息,使用非阻塞读模型,采用异步读的方式。解析接收执行结果消息,消息包括:执行结果错误码、返回结果空标记、返回结果长度、返回结果数据。
数据库服务器进程在接收过程中定期对会话做检查,为了防止某个会话超出预期时间,如果超出预期时间,用户可以人工干预,关掉会话。
S2110、通过数据库服务器进程将外部函数的返回值和外部函数的输出参数信息发送给客户端。
S2120、通过数据库服务器进程将专用管道放回管道池。
利用传统子进程的方式,以及本实施例提供的数据库管理系统调用外部函数的方法执行外部函数,进行实验对比,结果如下:
实验一,利用子进程的方式,共生成100个子进程,即100个会话并发执行,同时查询外部函数。
Select my_add(1,2);执行的总时间是18558ms。
利用子进程的方式,只启动一个子进程,只实验一次的执行时间是:341ms。
实验二,利用本实施例中AP辅助进程的方式,即100个会话只使用1个AP辅助进程,100个会话并发执行,同时查询外部函数。
Select my_add(1,2);执行的总时间是987ms。
利用本实施例中AP辅助进程的方式,启动AP辅助进程,只实验一次的执行时间是:286ms。
实际结果表明:使用AP辅助进程,无论是并发还是单次执行外部函数的执行时间,都比使用传统子进程方式的执行时间要短很多。由此可见,本实施例提供的数据库管理系统调用外部函数的方法执行外部函数的效率更高。
实施例三
本实施例提供了一种数据库管理系统调用外部函数的装置,该装置可采用软件和/或硬件的方式实现,并一般可集成在处理器中。如图3所示,所述装置包括:外部函数执行任务发送模块310、外部函数执行任务接收模块320、外部函数执行任务执行模块330和外部函数执行结果回馈模块340,其中:
外部函数执行任务发送模块310,用于如果通过数据库服务器进程确定接收到客户端发送的外部函数执行请求,则通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务,其中,所述AP辅助进程为数据库管理系统用于执行外部函数调用功能的辅助进程;
外部函数执行任务接收模块320,用于通过所述AP辅助进程接收所述外部函数执行任务;
外部函数执行任务执行模块330,用于通过所述AP辅助进程加载第三方共享库,执行所述外部函数执行任务,获取执行结果,并将所述执行结果返回至所述数据库服务器进程;
外部函数执行结果回馈模块340,用于通过所述数据库服务进程接收所述AP辅助进程返回的执行结果,并将所述执行结果发送给所述客户端。
本发明实施例提供了一种数据库管理系统调用外部函数的装置,通过设置一个AP辅助进程,作为数据库管理系统用于执行外部函数调用功能的辅助进程,当数据库服务器进程接收到客户端发送的外部函数执行请求时,向AP辅助进程发送外部函数执行任务,AP辅助进程接收并执行所述外部函数执行任务后,将执行结果返回至数据库服务器进程中,进而使数据库服务器进程将所述执行结果返回客户端。上述方法优化了现有技术中的数据库管理系统调用外部函数的方法,与子进程方式不同,不需要创建多个子进程,只启动一个AP辅助进程就能无限次的调用外部函数,即可实现多个外部函数任务的并发。由于AP辅助进程是独立于数据库服务器进程之外的,不同于插件方式,一旦插件有问题就影响服务器运行。所以本发明即使外部函数在执行过程中出现了任何问题(例如AP辅助进程异常),都不会影响到服务器的正常执行,提升了服务器的稳定性。即使外部函数出错,特别是第三方共享库中的外部函数错误,由于系统控制权已经转移给AP辅助进程中的某个任务线程,所以只可能引起AP辅助进程异常,而不会影响到整个数据库服务器进程,避免了在数据库服务器的执行过程中由于创建子进程而可能导致的内存异常。
具体的,所述数据库服务器进程与所述AP辅助进程之间的通信方式包括:socket通信或者管道通信。
具体的,所述数据库服务器进程与所述AP辅助进程之间的通信方式为所述管道通信时,外部函数执行任务发送模块310,包括:外部函数执行任务消息生成单元、外部函数执行任务消息发送单元和执行参数消息发送单元,其中,
外部函数执行任务消息生成单元,用于通过所述数据库服务器进程从预先创建的管道池中获取一个空闲的专用管道或新建一个专用管道后,生成外部函数执行任务消息,其中,所述外部函数执行任务消息中包括所述专用管道的管道名、任务语言类型以及任务信息;
外部函数执行任务消息发送单元,用于如果确定所述数据库服务器进程开启监听管道客户端,则通过所述数据库服务器进程经由所述监听管道向所述AP辅助进程发送所述外部函数执行任务消息;
执行参数消息发送单元,用于如果确定所述数据库服务器进程开启专用管道服务端,则通过所述数据库服务器进程经由所述专用管道向所述AP辅助进程发送执行参数消息。
具体的,所述AP辅助进程包括监听线程和任务线程,其中,所述监听线程用于监听所述数据库服务器进程发送的外部函数执行任务消息,并根据所述外部函数执行任务消息生成相应的任务线程,所述任务线程用于执行外部函数;
具体的,上述数据库管理系统调用外部函数的装置,还包括:监听管道创建模块,用于在所述通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务之前,通过所述AP辅助进程创建所述监听管道。
具体的,外部函数执行任务接收模块320,包括:外部函数执行任务消息监听单元、管道名解析单元、任务线程生成单元和执行参数消息接收单元,其中,
外部函数执行任务消息监听单元,用于如果确定所述监听线程开启监听管道服务端,则通过所述监听线程监听所述外部函数执行任务消息;
管道名解析单元,用于如果通过所述监听线程经由所述监听管道接收到所述外部函数执行任务消息,则解析所述专用管道的管道名;
任务线程生成单元,用于如果确定所述监听线程根据所述管道名开启专用管道的客户端,则通过所述监听线程生成对应的任务线程,并放入任务队列,其中,目标任务线程的线程参数为目标专用管道的管道名、任务语言类型以及任务信息;
执行参数消息接收单元,用于通过目标任务线程经由目标专用管道接收并解析所述执行参数消息。
具体的,外部函数执行任务执行模块330,包括:外部函数执行单元和执行结果返回单元,其中,
外部函数执行单元,用于通过所述任务线程按任务队列执行外部函数,获取执行结果;
执行结果返回单元,用于通过所述任务线程将所述执行结果返回至所述数据库服务器进程。
具体的,外部函数执行任务执行模块330,还包括:
专用管道关闭单元,用于在通过所述任务线程将所述执行结果返回至所述数据库服务器进程之后,通过任务线程关闭与所述任务线程对应的专用管道;
任务线程退出单元,用于退出所述任务线程;
专用管道放回单元,用于通过所述数据库服务器进程将所述专用管道放回管道池。
具体的,所述监听管道和专用管道使用非阻塞连接模型;各个任务线程将所述执行结果返回所述数据库服务器进程时使用非阻塞写模型;所述数据库服务进程接收所述AP辅助进程返回的执行结果时使用非阻塞读模型。
具体的,所述第三方共享库包括文件类型为dll文件、so文件和Jar包的外部函数。
上述数据库管理系统调用外部函数的装置可执行本发明任意实施例所提供的数据库管理系统调用外部函数的方法,具备执行的数据库管理系统调用外部函数的方法相应的功能模块和有益效果。
实施例四
图4为本发明实施例四提供的一种计算机设备的结构示意图,如图4所示,该计算机设备包括处理器410、存储器420、输入装置430和输出装置440;计算机设备中处理器410的数量可以是一个或多个,图4中以一个处理器410为例;计算机设备中的处理器410、存储器420、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线连接为例。
存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明任意实施例中的数据库管理系统调用外部函数的方法对应的程序指令/模块(例如,数据库管理系统调用外部函数的装置中的外部函数执行任务发送模块310、外部函数执行任务接收模块320、外部函数执行任务执行模块330和外部函数执行结果回馈模块340)。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的用于计算机设备的操作。
存储器420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置430可用于接收输入的触摸信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。
实施例五
本发明实施例五还提供一种包含计算机可执行指令的存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例提供的数据库管理系统调用外部函数的方法,该方法包括:
如果通过数据库服务器进程确定接收到客户端发送的外部函数执行请求,则通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务,其中,所述AP辅助进程为数据库管理系统用于执行外部函数调用功能的辅助进程;
通过所述AP辅助进程接收所述外部函数执行任务;
通过所述AP辅助进程加载第三方共享库,执行所述外部函数执行任务,获取执行结果,并将所述执行结果返回至所述数据库服务器进程;
通过所述数据库服务进程接收所述AP辅助进程返回的执行结果,并将所述执行结果发送给所述客户端。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备执行本发明各个实施例所述的方法。
值得注意的是,上述数据库管理系统调用外部函数的装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种数据库管理系统调用外部函数的方法,其特征在于,包括:
如果通过数据库服务器进程确定接收到客户端发送的外部函数执行请求,则通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务,其中,所述AP辅助进程为数据库管理系统用于执行外部函数调用功能的辅助进程;
通过所述AP辅助进程接收所述外部函数执行任务;
通过所述AP辅助进程加载第三方共享库,执行所述外部函数执行任务,获取执行结果,并将所述执行结果返回至所述数据库服务器进程;
通过所述数据库服务进程接收所述AP辅助进程返回的执行结果,并将所述执行结果发送给所述客户端。
2.根据权利要求1所述的方法,其特征在于,所述数据库服务器进程与所述AP辅助进程之间的通信方式包括:socket通信或者管道通信。
3.根据权利要求2所述的方法,其特征在于,所述数据库服务器进程与所述AP辅助进程之间的通信方式为所述管道通信;
所述通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务,包括:
通过所述数据库服务器进程从预先创建的管道池中获取一个空闲的专用管道或新建一个专用管道后,生成外部函数执行任务消息,其中,所述外部函数执行任务消息中包括所述专用管道的管道名、任务语言类型以及任务信息;
如果确定所述数据库服务器进程开启监听管道客户端,则通过所述数据库服务器进程经由所述监听管道向所述AP辅助进程发送所述外部函数执行任务消息;
如果确定所述数据库服务器进程开启专用管道服务端,则通过所述数据库服务器进程经由所述专用管道向所述AP辅助进程发送执行参数消息。
4.根据权利要求3所述的方法,其特征在于,所述AP辅助进程包括监听线程和任务线程,其中,所述监听线程用于监听所述数据库服务器进程发送的外部函数执行任务消息,并根据所述外部函数执行任务消息生成相应的任务线程,所述任务线程用于执行外部函数;
在所述通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务之前,还包括:通过所述AP辅助进程创建所述监听管道;
所述通过所述AP辅助进程接收所述外部函数执行任务,包括:
如果确定所述监听线程开启监听管道服务端,则通过所述监听线程监听所述外部函数执行任务消息;
如果通过所述监听线程经由所述监听管道接收到所述外部函数执行任务消息,则解析所述专用管道的管道名;
如果确定所述监听线程根据所述管道名开启专用管道的客户端,则通过所述监听线程生成对应的任务线程,并放入任务队列,其中,目标任务线程的线程参数为目标专用管道的管道名、任务语言类型以及任务信息;
通过目标任务线程经由目标专用管道接收并解析所述执行参数消息。
5.根据权利要求4所述的方法,其特征在于,所述通过所述AP辅助进程加载第三方共享库,执行所述外部函数执行任务,获取执行结果,并将所述执行结果返回所述数据库服务器进程,包括:
通过所述任务线程按任务队列执行外部函数,获取执行结果;
通过所述任务线程将所述执行结果返回至所述数据库服务器进程;
在所述通过所述任务线程将所述执行结果返回至所述数据库服务器进程之后,还包括:
通过任务线程关闭与所述任务线程对应的专用管道;
退出所述任务线程;
通过所述数据库服务器进程将所述专用管道放回管道池。
6.根据权利要求5所述的方法,其特征在于,所述监听管道和专用管道使用非阻塞连接模型;各个任务线程将所述执行结果返回所述数据库服务器进程时使用非阻塞写模型;所述数据库服务进程接收所述AP辅助进程返回的执行结果时使用非阻塞读模型。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述第三方共享库包括文件类型为dll文件、so文件和Jar包的外部函数。
8.一种数据库管理系统调用外部函数的装置,其特征在于,包括:
外部函数执行任务发送模块,用于如果通过数据库服务器进程确定接收到客户端发送的外部函数执行请求,则通过所述数据库服务器进程向AP辅助进程发送外部函数执行任务,其中,所述AP辅助进程为数据库管理系统用于执行外部函数调用功能的辅助进程;
外部函数执行任务接收模块,用于通过所述AP辅助进程接收所述外部函数执行任务;
外部函数执行任务执行模块,用于通过所述AP辅助进程加载第三方共享库,执行所述外部函数执行任务,获取执行结果,并将所述执行结果返回至所述数据库服务器进程;
外部函数执行结果回馈模块,用于通过所述数据库服务进程接收所述AP辅助进程返回的执行结果,并将所述执行结果发送给所述客户端。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810068779.9A CN108228880B (zh) | 2018-01-24 | 2018-01-24 | 数据库管理系统调用外部函数的方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810068779.9A CN108228880B (zh) | 2018-01-24 | 2018-01-24 | 数据库管理系统调用外部函数的方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108228880A true CN108228880A (zh) | 2018-06-29 |
CN108228880B CN108228880B (zh) | 2020-07-14 |
Family
ID=62668833
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810068779.9A Active CN108228880B (zh) | 2018-01-24 | 2018-01-24 | 数据库管理系统调用外部函数的方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108228880B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110245027A (zh) * | 2018-09-21 | 2019-09-17 | 浙江大华技术股份有限公司 | 一种进程间通信的方法和设备 |
CN113687946A (zh) * | 2021-08-19 | 2021-11-23 | 海尔数字科技(青岛)有限公司 | 一种任务管理方法、装置、服务器和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040148605A1 (en) * | 2003-01-28 | 2004-07-29 | Samsung Electronics Co., Ltd. | Distributed processing system and method using virtual machine |
CN101097527A (zh) * | 2006-06-27 | 2008-01-02 | 中国银联股份有限公司 | 一种应用进程的流程调度方法及系统 |
CN105700937A (zh) * | 2016-01-04 | 2016-06-22 | 北京百度网讯科技有限公司 | 多线程任务处理方法和装置 |
CN106775978A (zh) * | 2016-12-12 | 2017-05-31 | 北京匡恩网络科技有限责任公司 | 脚本调用方法及指令调试装置 |
CN107544854A (zh) * | 2017-09-21 | 2018-01-05 | 广州市千钧网络科技有限公司 | 一种跨进程数据的同步存取方法及系统 |
-
2018
- 2018-01-24 CN CN201810068779.9A patent/CN108228880B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040148605A1 (en) * | 2003-01-28 | 2004-07-29 | Samsung Electronics Co., Ltd. | Distributed processing system and method using virtual machine |
CN101097527A (zh) * | 2006-06-27 | 2008-01-02 | 中国银联股份有限公司 | 一种应用进程的流程调度方法及系统 |
CN105700937A (zh) * | 2016-01-04 | 2016-06-22 | 北京百度网讯科技有限公司 | 多线程任务处理方法和装置 |
CN106775978A (zh) * | 2016-12-12 | 2017-05-31 | 北京匡恩网络科技有限责任公司 | 脚本调用方法及指令调试装置 |
CN107544854A (zh) * | 2017-09-21 | 2018-01-05 | 广州市千钧网络科技有限公司 | 一种跨进程数据的同步存取方法及系统 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110245027A (zh) * | 2018-09-21 | 2019-09-17 | 浙江大华技术股份有限公司 | 一种进程间通信的方法和设备 |
CN110245027B (zh) * | 2018-09-21 | 2024-05-14 | 浙江大华技术股份有限公司 | 一种进程间通信的方法和设备 |
CN113687946A (zh) * | 2021-08-19 | 2021-11-23 | 海尔数字科技(青岛)有限公司 | 一种任务管理方法、装置、服务器和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108228880B (zh) | 2020-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9323583B2 (en) | Method for allowing distributed running of an application and related device and inference engine | |
US6981266B1 (en) | Network management system and method | |
US6697967B1 (en) | Software for executing automated tests by server based XML | |
US8291486B2 (en) | Gateway device having socket library for monitoring, communication method of gateway device having socket library for monitoring, and communication program of gateway device having socket library for monitoring | |
CN109842656B (zh) | 智能兼容多协议的车联网服务方法、车联网网关系统 | |
KR101560600B1 (ko) | 통합 메시징 상태 기계 | |
US20090249279A1 (en) | Software appliance framework | |
CN110658794B (zh) | 一种制造执行系统 | |
US11394604B2 (en) | Closed-loop automation of a managed network | |
CN110224896A (zh) | 一种网络性能数据采集方法、装置、服务器及存储介质 | |
CN108228880A (zh) | 数据库管理系统调用外部函数的方法、装置、设备及介质 | |
CN113515278A (zh) | 低代码模型处理方法、系统、电子设备及存储介质 | |
CN108804100B (zh) | 创建界面元素的方法、装置、存储介质及移动终端 | |
CN115248692A (zh) | 一种支持多种深度学习框架模型云端部署的装置及方法 | |
CN113742228B (zh) | 测试、数据回放及录制方法、系统、装置、设备及介质 | |
CN108093036A (zh) | 一种获取资源的方法及装置 | |
US20210232494A1 (en) | Network application testing using domain-specific natural language | |
CN109587349B (zh) | 多媒体坐席线路测试方法及装置、电子设备、存储介质 | |
US20030115252A1 (en) | Methods to develop remote applications with built in feedback ability for use in a distributed test framework | |
Adamek et al. | Component reliability extensions for fractal component model | |
CN112035270A (zh) | 接口适配方法、系统、装置、计算机可读介质及电子设备 | |
CN113094150A (zh) | Jupyter容器内动态生成Spark端口访问的方法及设备 | |
CN112988126A (zh) | Cdn业务定制方法及系统 | |
Wood et al. | Triton: a domain specific language for cyber-physical systems | |
Vujanić et al. | Bitroute SOME/IP: Implementation of a Scalable and Service Oriented Communication Middleware |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |