分布式数据库连接方法和装置与流程

文档序号:12748096阅读:346来源:国知局
分布式数据库连接方法和装置与流程

本发明涉及数据库管理技术领域,尤其涉及一种分布式数据库连接方法和装置。



背景技术:

传统的数据库连接池技术有效的降低了数据库系统资源的消耗,同时提高了数据库的访问效率。但是随着互联网技术的快速发展,数据库的访问量和数据量有了爆发式的增长,导致数据库无法满足需求,基于开源数据库研发的分布式数据库可以有效的解决该问题,通过分布在网络中的一组数据库来分散数据库的访问和数据存储。

为了同时兼顾早期尽量少的数据库服务器的投入,以及将来数据库访问量进一步提高后降低数据库拆分的成本和更为平滑的升级,大量分布式数据库都采用了一个数据库实例多个数据库的过度架构,例如,128个数据库分布在16个Mysql数据库实例上,每个数据库实例有8个数据库。使用传统的数据库连接方法将会存在如下问题:

一方面,每个数据库对应一个连接池,假如每个连接池的最大连接数设置为20个,但是当同一个数据库实例的8个数据库中存在冷热数据导致不同时刻访问量差别较大时,访问量大的连接池连接不够用而访问量少的连接池却存在空闲连接而无法被复用,导致资源浪费。

另一方面,每个连接池都有一些固定的后台线程做空闲连接检查、新建连接、关闭连接等维护连接的操作,假如每个连接池有3个线程,那么每个应用程序将有128*3=384个线程,而大部分维护连接的操作只需要少量线程即可完成,导致连接池浪费了大量应用程序的系统资源,降低了应用程序的服务能力。



技术实现要素:

本发明的主要目的在于提供一种分布式数据库连接方法和装置,旨在减少连接池的线程数量,节省系统资源。

为实现上述目的,本发明提供了一种分布式数据库连接方法,包括:

将多个数据库实例进行分组,其中每组数据库实例中包括至少一个数据库,并配置一个连接池供所有数据库实例的数据库共享;

设定所述连接池的指定线程执行空闲连接检查的操作,当接收到客户端发送的向所述连接池申请连接的请求时,根据所述请求及所述空闲连接检查的操作结果返回一个空闲连接给所述客户端。

可选地,所述请求包括目标数据库名称及数据库实例名称,所述当接收到客户端发送的向所述连接池申请连接的请求时,根据所述请求及所述空闲连接检查的操作结果返回一个空闲连接给所述客户端包括:

当接收到客户端发送的向所述连接池申请连接的请求时,根据所述数据库实例名称查找目标数据库实例,并根据所述目标数据库名称在所述目标数据库实例中获取目标数据库;

判断所述目标数据库是否存在空闲连接;

若所述目标数据库存在空闲连接,则返回一个空闲连接给所述客户端。

可选地,所述判断所述目标数据库是否存在空闲连接之后包括:

当所述目标数据库不存在空闲连接时,侦测与所述目标数据库在同一数据库实例组别内的其他数据库是否存在空闲连接;

若是,则返回一个空闲连接给所述客户端,并将所述空闲连接对应的所述数据库的名称,修改为所述目标数据库的名称。

可选地,所述侦测与所述目标数据库在同一数据库实例组别内的其他数据库是否存在空闲连接之后包括:

当与所述目标数据库在同一数据库实例组别内的其他数据库不存在空闲连接时,设定所述连接池的固定线程执行异步建立连接操作,根据所述异步建立连接操作在所述目标数据库下创建一个新的连接,并将所述新的连接返回给所述客户端。

可选地,所述分布式数据库连接方法还包括:

当所述客户端根据得到目标数据库的指定连接完成执行数据库操作后,控制所述客户端将所述指定连接归还至所述连接池,并将所述指定连的接状态设置为空闲连接状态。

此外,为实现上述目的,本发明还提供了一种分布式数据库连接装置,包括:

配置模块,用于将多个数据库实例进行分组,其中每组数据库实例中包括至少一个数据库,并配置一个连接池供所有数据库实例的数据库共享;

连接模块,用于设定所述连接池的指定线程执行空闲连接检查的操作,当接收到客户端发送的向所述连接池申请连接的请求时,根据所述请求及所述空闲连接检查的操作结果返回一个空闲连接给所述客户端。

可选地,所述请求包括目标数据库名称及数据库实例名称,所述连接模块包括:

获取单元,用于当接收到客户端发送的向所述连接池申请连接的请求时,根据所述数据库实例名称查找目标数据库实例,并根据所述目标数据库名称在所述目标数据库实例中获取目标数据库;

判断单元,用于判断所述目标数据库是否存在空闲连接;

返回单元,用于若所述目标数据库存在空闲连接,则返回一个空闲连接给所述客户端。

可选地,所述连接模块还包括:

侦测单元,用于当所述目标数据库不存在空闲连接时,侦测与所述目标数据库在同一数据库实例组别内的其他数据库是否存在空闲连接;

处理单元,用于若与所述目标数据库在同一数据库实例组别内的其他数据库存在空闲连接,则返回一个空闲连接给所述客户端,并将所述空闲连接对应的所述数据库的名称,修改为所述目标数据库的名称。

可选地,所述接收模块还包括:

创建单元,用于当与所述目标数据库在同一数据库实例组别内的其他数据库不存在空闲连接时,设定所述连接池的固定线程执行异步建立连接操作,根据所述异步建立连接操作在所述目标数据库下创建一个新的连接,并将所述新的连接返回给所述客户端。

可选地,所述分布式数据库连接装置还包括:

归还模块,用于当所述客户端根据得到目标数据库的指定连接完成执行数据库操作后,控制所述客户端将所述指定连接归还至所述连接池,并将所述指定连的接状态设置为空闲连接状态。

本发明实施例提供的分布式数据库连接方法和装置,通过将多个数据库实例进行分组,其中每组数据库实例中包括至少一个数据库,并配置一个连接池供所有数据库实例的数据库共享;设定所述连接池的指定线程执行空闲连接检查的操作,当接收到客户端发送的向连接池申请连接的请求时,根据该请求及空闲连接检查的操作结果返回一个空闲连接给客户端。实现了多个数据库共用一个连接池,减少了连接池的线程数量,节省了系统资源。

附图说明

图1为本发明分布式数据库连接方法一实施例的流程示意图;

图2为本发明分布式数据库连接装置一实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,示出了本发明一种分布式数据库连接方法第一实施例。该实施例的分布式数据库连接方法包括:

步骤S10、将多个数据库实例进行分组,其中每组数据库实例中包括至少一个数据库,并配置一个连接池供所有数据库实例的数据库共享;

数据库连接是一种非常关键且有限的资源,如果数据库连接被反复地打开和关闭,将会严重浪费数据库大量的系统资源,同时会降低数据库的访问效率。一种高效的对数据库连接的管理方法将能够明显的降低数据库对系统资源的消耗,同时提升数据库和访问该数据库的应用程序性能。数据库连接池可通过复用数据库连接来减少频繁的打开和关闭连接进而提升数据库操作性能。

本实施例中,为了降低数据库对系统资源的消耗,首先,将多个数据库实例进行分组,其中每组数据库实例中包括至少一个数据库,并配置一个连接池供所有数据库实例的数据库共享,即连接池内部将连接按照数据库实例进行分组,每个数据库实例里的连接又按照数据库进行分组。实现了多个数据库共享一个连接池,从而使得同一个数据库实例的不同数据库之间的连接可以复用,节省了系统资源。

步骤S20、设定所述连接池的指定线程执行空闲连接检查的操作,当接收到客户端发送的向所述连接池申请连接的请求时,根据所述请求及所述空闲连接检查的操作结果返回一个空闲连接给所述客户端。

基于上述所有数据库实例中的数据库共享一个连接池,可设定该连接池使用固定数量的指定线程进行空闲连接检查、异步建立连接以及异步关闭连接等。使得连接池线程数量相对于一个数据库配置一个独立的连接较少,提高了客户端中应用程序的服务能力。

当客户端向连接池申请连接时,分布式数据库连接装置先根据指定的数据库实例的名称找到到相应的目标数据库实例的连接分组,然后再根据指定的数据库名称找到该目标数据库对应的连接分组里获取连接。

若该目标数据库里没有空闲连接,则遍历同一实施例的数据库分组获取连接,如果同一实施例中的其他数据库有空闲连接,则通过use命令来切换数据库进行连接复用,如果同一实施例中的其他数据库没有空闲连接,则创建一个指向目标数据库的新的连接。从而使得客户端能够获取连接,解决了分布式数据库中传统连接池消耗资源过多且无法进行同数据库实例多数据库的连接复用问题。

本发明实施例通过将多个数据库实例进行分组,其中每组数据库实例中包括至少一个数据库,并配置一个连接池供所有数据库实例的数据库共享;设定所述连接池的指定线程执行空闲连接检查的操作,当接收到客户端发送的向连接池申请连接的请求时,根据该请求及空闲连接检查的操作结果返回一个空闲连接给客户端。实现了多个数据库共用一个连接池,减少了连接池的线程数量,节省了系统资源。

进一步地,基于上述分布式数据库连接方法第一实施例,提出了本发明分布式数据库连接方法第二实施例,该实施例中上述步骤S20包括:

当接收客户端发送的向所述连接池申请连接的请求时,根据所述数据库实例名称查找目标数据库实例,并根据所述目标数据库名称在所述目标数据库实例中获取目标数据库;

判断所述目标数据库是否存在空闲连接;

若所述目标数据库存在空闲连接,则返回一个空闲连接给所述客户端。

本实施例中,当客户端向分布式数据库连接装置中的连接池发送申请连接的请求时,该请求包括目标数据库名称及数据库实例名称,先根据目标数据库名称找到到相应的目标数据库实例的连接分组,然后根据目标数据库名称在目标数据库实例中找到相应的目标数据库,以便到该目标数据库对应的连接分组里获取连接。找到对应的目标数据库后,首先判断该目标数据库是否存在空闲连接,若存在空闲连接,则选择一个空闲连接返回给客户端,同时可将该空闲连接的状态设置为使用状态。

进一步地,本实施例中,上述判断所述目标数据库是否存在空闲连接的步骤之后包括:

当所述目标数据库不存在空闲连接时,侦测与所述目标数据库在同一数据库实例组别内的其他数据库是否存在空闲连接;

若是,则返回一个空闲连接给所述客户端,并将所述空闲连接对应的所述数据库的名称,修改为所述目标数据库的名称。

本实施例中,若该目标数据库里没有空闲连接,则遍历同一实施例的其他数据库分组获取连接,如果同一实施例的其他数据库有空闲连接,则通过use命令来切换数据库进行连接复用,即从存在空闲连接的数据库中选择一个空闲连接返回给客户端,并将该空闲连接对应的数据库的名称,修改为目标数据库的名称,同时可将该空闲连接的状态设置为使用状态。

进一步地,本实施例中,上述侦测与所述目标数据库在同一数据库实例组别内的其他数据库是否存在空闲连接的步骤之后包括:

当与所述目标数据库在同一数据库实例组别内的其他数据库不存在空闲连接时,设定所述连接池的固定线程执行异步建立连接操作,根据所述异步建立连接操作在所述目标数据库下创建一个新的连接,并将所述新的连接返回给所述客户端。

本实施例中,若同一实施例的其他数据库中没有空闲连接,则连接池的固定线程执行异步建立连接操作,创建一个指向目标数据库的新的连接,即在该目标数据库下创建一个新的连接。将该新的连接返回给客户端,同时可将该新的连接的状态设置为使用状态。

本实施例在接收到客户端发送的向连接池申请连接的请求后,当目标数据库中存在空闲连接时,选择一个空闲连接返回给客户端;当目标数据库不存在空闲连接时,若与目标数据库在同一数据库实例组别内的其他数据库存在空闲连接,则选择一个空闲连接返回给客户端,否则在目标数据库下创建一个新的连接返回给客户端。使得不仅实现了多个数据库共享一个连接池,同一个数据库实例的不同数据库之间的连接可以复用,而且减少了连接池线程数量,节省了系统资源。

进一步地,基于上述分布式数据库连接方法第一或第二实施例,提出了本发明分布式数据库连接方法第三实施例,该实施例中上述分布式数据库连接方法还包括:

当所述客户端根据得到目标数据库的指定连接完成执行数据库操作后,控制所述客户端将所述指定连接归还至所述连接池,并将所述指定连的接状态设置为空闲连接状态。

本实施例中,客户端在得到目标数据库的指定连接后,进行数据库操作。该目标数据库的指定连接可为目标数据库返回的空闲连接,也可以是与目标数据在同一数据库实例内的其他数据库返回的空闲连接,或者是,创建一个指向目标数据库的新的连接。

在客户端执行操作完毕后,把目标数据库的指定连接归还给连接池,同时把该指定连的接状态设置为空闲连接状态,从而使得连接池不需要定期清理空闲时间过长的连接来降低数据库的连接数量,提高了连接池进行数据库连接的便捷性。

本实施例在客户端完成执行数据库操作后,可将连接归还至连接池,使得连接池可通过合理设置连接数,可以有效的保障数据库的可用性。

对应地,如图2所示,提出本发明一种分布式数据库连接装置第一实施例。该实施例的分布式数据库连接装置包括:

配置模块100,用于将多个数据库实例进行分组,其中每组数据库实例中包括至少一个数据库,并配置一个连接池供所有数据库实例的数据库共享;

数据库连接是一种非常关键且有限的资源,如果数据库连接被反复地打开和关闭,将会严重浪费数据库大量的系统资源,同时会降低数据库的访问效率。一种高效的对数据库连接的管理方法将能够明显的降低数据库对系统资源的消耗,同时提升数据库和访问该数据库的应用程序性能。数据库连接池可通过复用数据库连接来减少频繁的打开和关闭连接进而提升数据库操作性能。

本实施例中,为了降低数据库对系统资源的消耗,首先,配置模块100将多个数据库实例进行分组,其中每组数据库实例中包括至少一个数据库,并配置一个连接池供所有数据库实例的数据库共享,即连接池内部将连接按照数据库实例进行分组,每个数据库实例里的连接又按照数据库进行分组。实现了多个数据库共享一个连接池,从而使得同一个数据库实例的不同数据库之间的连接可以复用,节省了系统资源。

连接模块200,用于设定所述连接池的指定线程执行空闲连接检查的操作,当接收到客户端发送的向所述连接池申请连接的请求时,根据所述请求及所述空闲连接检查的操作结果返回一个空闲连接给所述客户端。

基于上述所有数据库实例中的数据库共享一个连接池,连接模块200可设定该连接池使用固定数量的指定线程进行空闲连接检查、异步建立连接以及异步关闭连接等。使得连接池线程数量相对于一个数据库配置一个独立的连接较少,提高了客户端中应用程序的服务能力。

当客户端向连接池申请连接时,连接模块200接收到客户端发送的向连接池申请连接的请求后,先根据指定的数据库实例的名称找到到相应的目标数据库实例的连接分组,然后再根据指定的数据库名称找到该目标数据库对应的连接分组里获取连接。

若该目标数据库里没有空闲连接,则遍历同一实施例的数据库分组获取连接,如果同一实施例中的其他数据库有空闲连接,则通过use命令来切换数据库进行连接复用,如果同一实施例中的其他数据库没有空闲连接,则创建一个指向目标数据库的新的连接。从而使得客户端能够获取连接,解决了分布式数据库中传统连接池消耗资源过多且无法进行同数据库实例多数据库的连接复用问题。

本发明实施例通过将多个数据库实例进行分组,其中每组数据库实例中包括至少一个数据库,并配置一个连接池供所有数据库实例的数据库共享;设定所述连接池的指定线程执行空闲连接检查的操作,当接收到客户端发送的向连接池申请连接的请求时,根据该请求及空闲连接检查的操作结果返回一个空闲连接给客户端。实现了多个数据库共用一个连接池,减少了连接池的线程数量,节省了系统资源。

进一步地,基于上述分布式数据库连接装置第一实施例,提出了本发明分布式数据库连接装置第二实施例,该实施例中上述接连接模块200包括:

获取单元,用于当接收客户端发送的向所述连接池申请连接的请求时,根据所述数据库实例名称查找目标数据库实例,并根据所述目标数据库名称在所述目标数据库实例中获取目标数据库;

判断单元,用于判断所述目标数据库是否存在空闲连接;

返回单元,用于若所述目标数据库存在空闲连接,则返回一个空闲连接给所述客户端。

本实施例中,当客户端向分布式数据库连接装置中的连接池申请连接时,接收客户端发送的向连接池申请连接的请求,该请求包括目标数据库名称及数据库实例名称。获取单元先根据目标数据库名称找到到相应的目标数据库实例的连接分组,然后根据目标数据库名称在目标数据库实例中找到相应的目标数据库,以便到该目标数据库对应的连接分组里获取连接。找到对应的目标数据库后,首先由判断单元判断该目标数据库是否存在空闲连接,若存在空闲连接,则返回单元选择一个空闲连接返回给客户端,同时可将该空闲连接的状态设置为使用状态。

进一步地,本实施例中,上述接连接模块200还包括:

侦测单元,用于当所述目标数据库不存在空闲连接时,侦测与所述目标数据库在同一数据库实例组别内的其他数据库是否存在空闲连接;

处理单元,用于若与所述目标数据库在同一数据库实例组别内的其他数据库存在空闲连接,则返回一个空闲连接给所述客户端,并将所述空闲连接对应的所述数据库的名称,修改为所述目标数据库的名称。

本实施例中,若该目标数据库里没有空闲连接,则遍历同一实施例的其他数据库分组获取连接,由侦测单元侦测与目标数据库在同一数据库实例组别内的其他数据库是否存在空闲连接。如果同一实施例的其他数据库有空闲连接,则处理单元通过use命令来切换数据库进行连接复用,即处理单元从存在空闲连接的数据库中选择一个空闲连接返回给客户端,并将该空闲连接对应的数据库的名称,修改为目标数据库的名称,同时可将该空闲连接的状态设置为使用状态。

进一步地,本实施例中,上述接连接模块200还包括:

创建单元,用于当与所述目标数据库在同一数据库实例组别内的其他数据库不存在空闲连接时,设定所述连接池的固定线程执行异步建立连接操作,根据所述异步建立连接操作在所述目标数据库下创建一个新的连接,并将所述新的连接返回给所述客户端。

本实施例中,若同一实施例的其他数据库中没有空闲连接,则连接池的固定线程执行异步建立连接操作,创建单元创建一个指向目标数据库的新的连接,即在该目标数据库下创建一个新的连接。将该新的连接返回给客户端,同时可将该新的连接的状态设置为使用状态。

本实施例在接收到客户端发送的向连接池申请连接的请求后,当目标数据库中存在空闲连接时,选择一个空闲连接返回给客户端;当目标数据库不存在空闲连接时,若与目标数据库在同一数据库实例组别内的其他数据库存在空闲连接,则选择一个空闲连接返回给客户端,否则在目标数据库下创建一个新的连接返回给客户端。使得不仅实现了多个数据库共享一个连接池,同一个数据库实例的不同数据库之间的连接可以复用,而且减少了连接池线程数量,节省了系统资源。

进一步地,基于上述分布式数据库连接装置第一或第二实施例,提出了本发明分布式数据库连接装置第三实施例,该实施例中上述分布式数据库连接装置还包括:

归还模块,用于当所述客户端根据得到目标数据库的指定连接完成执行数据库操作后,控制所述客户端将所述指定连接归还至所述连接池,并将所述指定连的接状态设置为空闲连接状态。

本实施例中,客户端在得到目标数据库的指定连接后,进行数据库操作。该目标数据库的指定连接可为目标数据库返回的空闲连接,也可以是与目标数据在同一数据库实例内的其他数据库返回的空闲连接,或者是,创建一个指向目标数据库的新的连接。

在客户端执行操作完毕后,归还模块把目标数据库的指定连接归还给连接池,同时把该指定连的接状态设置为空闲连接状态,从而使得连接池不需要定期清理空闲时间过长的连接来降低数据库的连接数量,提高了连接池进行数据库连接的便捷性。

本实施例在客户端完成执行数据库操作后,可将连接归还至连接池,使得连接池可通过合理设置连接数,可以有效的保障数据库的可用性。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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