数据库中间件及其实现客户端与服务器连接的方法与流程

文档序号:24551884发布日期:2021-04-06 12:03阅读:422来源:国知局
数据库中间件及其实现客户端与服务器连接的方法与流程

本发明涉及数据库中间件领域,尤其涉及一种数据库中间件及其实现客户端与服务器连接的方法。



背景技术:

数据库中间件位于数据库服务器和数据库客户端的中间位置。客户端直接将sql语句发往中间件由中间件去操作底层的数据库并将结果返回。中间件一般提供有集群管理、连接池、sql语句路由等功能。

中间件的连接池具有保存到后端数据库连接的特性;对于大量客户端频繁的连接,断开的操作,连接池能够减少数据库服务器的连接建立次数,能够提高数据库服务器的效率。因此连接池是中间件中一个重要的功能点。对于连接池的设计,postgresql社区中的pgpool中间件实现了连接池的功能。pgpool启动时,创建固定数目(例如32个)连接服务子进程等待客户端的连接,在每个子进程中维护有各自的连接池。但是pgpool实现的连接池有如下的缺点:

1、中间件启动后,开启的服务子进程数固定不变。启动时,开启数量较大的连接服务子进程会造成计算机资源的浪费,降低了中间件的性能。开启数量较小的连接服务子进程会引起客户端的并发连接数减少。

2、每个子进程对连接池的信息分别进行保存,导致连接池内的连接复用性不强。只有在连接的子进程客户端断开连接后,下次再由该子进程接收相同参数的连接才可复用,连接能够被复用的概率低。

3、复用率低同时增加了中间件连接到数据库服务器的连接数量,加大的数据库服务器的连接负载。

4、只支持会话级的连接,当会话空闲时会导致连接浪费,降低服务器的性能。



技术实现要素:

本发明实施例提供一种数据库中间件及其实现客户端与服务器连接的方法,用以解决现有技术中数据库中间件工作效率低的问题。

根据本发明实施例的数据库中间件实现客户端与服务器连接的方法,包括:

创建最小空闲服务子进程数的服务子进程;

所述服务子进程接收客户端的连接请求,并根据所述连接请求将所述客户端连接至服务器;

当空闲的服务子进程的个数小于所述最小空闲服务子进程数时,再次创建所述最小空闲子进程数的服务子进程,直至达到最大服务子进程数限制;

当空闲的服务子进程的个数大于最大空闲服务子进程数时,回收部分空闲的服务子进程。

根据本发明的一些实施例,所述方法还包括:

初始化一个所有进程共享的全局连接池,所述全局连接池包括多个连接槽位,每个所述连接槽位用于存储一条客户端与服务器之间的连接信息,所述连接信息包括客户端的用户名、服务器的数据库名、访问时间、连接标识信息。

根据本发明的一些实施例,所述根据所述连接请求将所述客户端连接至服务器,包括:

基于所述连接请求,在所述全局连接池中查找是否有可复用的连接,若有,则复用该连接,否则,创建连接,并将连接信息保存至所述全局连接池。

根据本发明的一些实施例,所述方法还包括:

当所述全局连接池中的所有连接槽位均被占用时,检测所述全局连接池中是否存在空闲的连接,若有,则剔除空闲的相同连接次数最多的连接,否则,剔除相同连接次数最多的连接。

根据本发明的一些实施例,所述剔除部分空闲的连接,包括:

当存在多个空闲的相同连接次数最多的连接,则剔除空闲的相同连接次数最多且访问时间最远的连接;

当存在多个相同连接次数最多的连接,则剔除相同连接次数最多且访问时间最远的连接。

根据本发明的一些实施例,所述方法,还包括:

定期检测所述全局连接池中各个连接的最近访问时间;

当所述最近访问时间超过预设时间时,剔除该连接。

根据本发明的一些实施例,所述方法,还包括:

当所述服务子进程的个数超过所述最大服务子进程数,向当前连接请求对应的客户端返回连接超过最大限制连接数的消息。

根据本发明的一些实施例,所述连接包括事务连接;

所述方法还包括:

当所述连接为事务连接,所述事务连接执行完后将该事务连接设置为空闲。

根据本发明实施例的数据库中间件,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的方法的步骤。

根据本发明实施例的计算机可读存储介质,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如上所述的方法的步骤。

采用本发明实施例,动态的创建维护连接服务子进程,开始时创建较少数量的服务子进程,这样能够减少计算机资源的浪费;而在客户端连接数增多时,增加服务子进程的数量,为更多的客户端服务,从而可以提高整个数据库服务系统的性能。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。在附图中:

图1是本发明实施例中数据库中间件实现客户端与服务器连接的方法流程图;

图2是本发明实施例中数据库中间件实现客户端与服务器连接的方法流程图;

图3是本发明实施例中全局连接池示意图。

具体实施方式

下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。

第一实施例,一种数据库中间件实现客户端与服务器连接的方法,如图1所示,包括:

s1,创建最小空闲服务子进程数的服务子进程;

s2,服务子进程接收客户端的连接请求,并根据连接请求将客户端连接至服务器;

s3,当空闲的服务子进程的个数小于最小空闲服务子进程数时,再次创建最小空闲子进程数的服务子进程,直至达到最大服务子进程数限制;

s4,当空闲的服务子进程的个数大于最大空闲服务子进程数时,回收部分空闲的服务子进程。

进一步的,所述方法还包括:

初始化一个所有进程共享的全局连接池,全局连接池包括多个连接槽位,每个连接槽位用于存储一条客户端与服务器之间的连接信息,连接信息包括客户端的用户名、服务器的数据库名、访问时间、连接标识信息。

进一步的,所述根据所述连接请求将所述客户端连接至服务器,包括:

基于连接请求,在全局连接池中查找是否有可复用的连接,若有,则复用该连接,否则,创建连接,并将连接信息保存至全局连接池。

进一步的,所述方法还包括:

当全局连接池中的所有连接槽位均被占用时,检测全局连接池中是否存在空闲的连接,若有,则剔除空闲的相同连接次数最多的连接,否则,剔除相同连接次数最多的连接。

进一步的,所述剔除部分空闲的连接,包括:

当存在多个空闲的相同连接次数最多的连接,则剔除空闲的相同连接次数最多且访问时间最远的连接;

当存在多个相同连接次数最多的连接,则剔除相同连接次数最多且访问时间最远的连接。

进一步的,所述方法,还包括:

定期检测全局连接池中各个连接的最近访问时间;

当最近访问时间超过预设时间时,剔除该连接。

进一步的,所述方法,还包括:

当服务子进程的个数超过最大服务子进程数,向当前连接请求对应的客户端返回连接超过最大限制连接数的消息。

进一步的,连接包括事务连接;

所述方法还包括:

当连接为事务连接,事务连接执行完后将该事务连接设置为空闲。

采用上述技术方案,可以增加连接池复用性以及提高整个数据库服务系统的性能,改进了pgpool中服务子进程创建的方式,连接池的实现方式。具体实现的技术效果包括:(1)动态的创建维护连接服务子进程。开始时创建较少数量的服务子进程,这样能够减少计算机资源的浪费;而在客户端连接数增多时,增加服务子进程的数量,为更多的客户端服务。(2)采用全局共享的连接池,而不是每个服务子进程单独维护的连接池,这样能够增加连接到后端数据库服务器的连接的复用率。减少后端数据库服务器建立撤销连接带来的开销。(3)增加不同级别的连接池,pgpool原始只有会话级别的连接池,增加事务级的连接池,减少连接空闲带来的资源浪费,提高效率。

这些更改能够在计算机资源允许的情况下提高客户端并发连接的数量,增加连接池内连接的复用性,减少了数据库服务器的连接负载。

第二实施例,一种应用于会话级连接的数据库中间件实现客户端与服务器连接的方法,如图2所示,所述方法包括:

服务器启动时,主进程创建可配置的一定数量的服务子进程等待客户端的连接;

初始化一个所有进程共享的全局连接池。通过连接池连接到后端的数据库服务器集群。全局连接池保存前后端的连接信息。连接池通过配置文件可设置其大小。

如图3所示,全局连接池保存的信息包括,连接的用户名、数据库名、访问时间等信息。除了这些信息外,还保存有中间件连接到后端数据库集群各节点的连接标识信息。后端数据库集群可以为一主多备,也可以为多主多备。

为了使得设计能够正确实施,需要输入一些可配置的参数:最小空闲服务子进程数、最大空闲服务子进程数、最大服务子进程数、全局连接池槽位数(大小)。

服务器启动时,主进程创建最小空闲服务子进程数的服务子进程等待客户端的连接,当空闲的服务子进程数量小于最小空闲服务子进程数时,再次创建最小空闲子进程数量的服务子进程,直至达到最大服务子进程数限制。当空闲的服务子进程数量大于最大空闲服务子进程的数量时,回收一部分空闲的子进程,节省计算机资源,增加服务器的性能。

当新的连接请求到来时,其中一个空闲服务子

进程接收到该连接请求,并在全局连接池中查找是否有相同用户名和数据库名的后端空闲连接,有则复用到后端数据库服务器的连接。如果没有,则创建到后端数据库服务器的连接,并将连接加入到全局连接池中。

当全局连接池中槽位被使用完时,并且前端新的连接请求到来后;检测连接池中的连接槽位是否空闲(槽位已连接到后端数据库服务器,但无对应前端连接)。如果有多个空闲的,则剔除空闲的相同用户名和连接数据库名次数最多的连接;如果次数相同,则剔除空闲的访问时间最远的连接;将新建立的后端数据库连接以及前端连接分配到该槽位中。如果没有空闲的槽位,则剔除相同用户名和连接数据库名次数最多并且访问时间最远的连接;将新的建立的连接保留在该槽位中。

定期检测连接池中连接的最近访问时间,如果最近访问时间超过具体的某一值时,剔除该连接在连接池中占据的槽位,为新的连接空出位置。

如果连接超过配置的最大服务子进程数,则向客户端返回连接超过最大限制连接数的消息,退出该连接。

第三实施例,一种应用于事务级别连接的数据库中间件实现客户端与服务器连接的方法,其基本的处理流程和会话级别连接一样,其区别在于:当一个槽位中的连接执行完一个事务后,会将该连接置为空闲状态,这样前端相同用户相同数据库的连接可以再次利用该槽位连接实现复用。

会话级别的连接处理有一个缺陷:一个会话一直占据着一个连接池槽位中的连接到后端数据库服务器的连接,即使这个会话现在没有执行任何操作;这样就会导致该槽位中连接资源的浪费,使得整个系统的性能降低。而采用事务级别的连接,能够有效的使用该部分资源,提升整个系统的性能。

第四实施例,一种数据库中间件,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现第一实施例至第三实施例中的至少一个实施例的方法的步骤。

根据本发明实施例的计算机可读存储介质,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现第一实施例至第三实施例中的至少一个实施例的方法的步骤。

本实施例所述计算机可读存储介质包括但不限于为:rom、ram、磁盘或光盘等。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1