发明内容
本发明的主要目的在解决分布式数据库中传统连接池的一些不足,包括加同一个数据库实例的不同数据库之间的连接无法复用导致资源浪费和连接池线程数过多,浪费了应用程序的系统资源,降低了应用程序的服务能力。
为实现上述目的,本发明提供的一种分布式数据连接方法,包括以下步骤:
接收应用程序的连接请求,从预先设置的数据库实例分组中确定所述连接请求所属的数据库连接分组;
查询所述数据库连接分组中是否存在空闲连接;
若所述数据库连接分组中存在空闲连接,则运用所述数据库连接分组的空闲连接创建所述应用程序的连接;
若所述数据库连接分组中不存在空闲连接,则查询所属数据库实例中其他数据库连接分组中是否存在空闲连接,以运用其他数据库连接分组中的空闲连接创建所述应用程序的连接。
优选地,所述若所述数据库连接分组中不存在空闲连接,则查询所属数据库实例中其他数据库连接分组中是否存在空闲连接,以运用其他数据库连接分组中的空闲连接创建所述应用程序的连接之后,还包括:
若所属数据库实例连接分组中的其他数据库连接分组中存在空闲连接,则运用该数据库连接分组中的空闲连接创建所述应用程序的连接。
若所属数据库实例连接分组中的其他数据库连接分组中不存在空闲连接,则创建一个指向所述数据库的新连接,运用所述新连接创建所述应用程序的连接。
优选地,所述从预先设置的数据库分组中确定所述连接请求所属的数据库连接分组的步骤包括:
从预先设置的数据库实例分组中确定所述连接请求所属的数据库实例连接分组;并从所述确定的数据库实例连接分组中确定所述应用程序的连接请求所属的数据库连接分组。
优选地,包括:
在查询数据库连接分组中是否存在空闲连接时,通过预设数量的线程,对连接池中的对应数据库连接分组中的所有连接进行空闲连接查询操作。
优选地,所述在查询数据库中是否存在空闲连接时,通过预设数量的线程,对连接池中的所有连接进行空闲连接检查操作之后,还包括:
若检查到运行的空闲连接断开,则使用线程将断开的空闲连接重新连接;
若检查到运行的空闲连接数量超过目标数量,则使用线程将超过目标数量的空闲连接关闭。
此外,为实现上述目的,本发明还提供一种分布式数据连接装置,包括:
接收模块,用于接收应用程序的连接请求;
确认模块,用于从预先设置的数据库实例分组中确定所述连接请求所属的数据库连接分组;
查询模块,用于查询所述数据库连接分组中是否存在空闲连接;
连接模块,用于若所述数据库连接分组中存在空闲连接,则运用所述数据库连接分组的空闲连接创建所述应用程序的连接;
遍历模块,用于若所述数据库连接分组中不存在空闲连接,则查询所属数据库实例中其他数据库连接分组中是否存在空闲连接,以运用其他数据库连接分组中的空闲连接创建所述应用程序的连接。
优选地,还包括:
所述连接模块,还用于若所属数据库实例连接分组中的其他数据库连接分组中不存在空闲连接,则创建一个指向所述数据库的新连接,运用所述新连接创建所述应用程序的连接。
优选地,还包括:
所述确认模块,还用于从预先设置的数据库实例分组中确定所述连接请求所属的数据库实例连接分组;并从所述确定的数据库实例连接分组中确定所述应用程序的连接请求所属的数据库连接分组。
优选地,还包括:
检查模块,用于在查询数据库中是否存在空闲连接时,通过预设数量的线程,对连接池中的所有连接进行空闲连接查询操作。
优选地,还包括:
操作模块,用于若检查到有运行的空闲连接断开,则使用线程将断开的连接关联;还用于若检查到有运行的空闲连接数量超过目标数量,则使用线程将目标数量以外的空闲连接关闭。
本发明通过接收应用程序的连接请求,从预先设置的数据库实例分组中确定所述连接请求所属的数据库连接分组;查询所述数据库连接分组中是否存在空闲连接;若所述数据库连接分组中存在空闲连接,则运用所述数据库连接分组的空闲连接创建所述应用程序的连接;若所述数据库连接分组中不存在空闲连接,则查询所属数据库实例中其他数据库连接分组中是否存在空闲连接,以运用其他数据库连接分组中的空闲连接创建所述应用程序的连接。有效的避免了同一个数据库实例的不同数据库之间的连接无法复用导致资源浪费,且避免了连接池线程数过多,浪费了大量应用程序的系统资源,降低了应用程序的服务能力。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例的主要解决方案是:接收应用程序的连接请求,从预先设置的数据库分组中确定所述连接请求所属的数据库连接分组;并查询所述数据库连接分组中是否存在空闲连接;若所述数据库连接分组中存在空闲连接,则运用所述数据库连接分组的空闲连接创建所述应用程序的连接;若所述数据库连接分组中不存在空闲连接,则查询所属数据库实例中其他数据库连接分组中是否存在空闲连接。有效避免同一个数据库实例的不同数据库之间的连接无法复用导致资源浪费;连接池线程数过多,浪费了大量应用程序的系统资源,降低了应用程序的服务能力。
由于现有数据库中,不能合理分配空闲连接造成数据库中空闲连接数量过多导致资源浪费,且连接池中线程数过多浪费了大量应用程序的系统资源,降低了应用程序的服务能力。
基于上述问题,本发明提供一种分布式数据库连接方法。
参照图1,图1为本发明分布式数据库连接方法的第一实施例的流程示意图。
在一实施例中,所述方法包括:
步骤S1,接收应用程序的连接请求,从预先设置的数据库实例分组中确定所述连接请求所属的数据库连接分组;
数据库连接池在接收到应用程序的连接请求时,根据应用程序的名称,对应已经分组的数据库实例名称,并对应至该数据库实例分组中的数据库分组。所述数据库连接分组中,存在有从连接池分配的连接,连接的数量由数据库管理员进行分配至数据库实例中,并根据数据库实例下的数据库连接分组的数据库内存大小分配。
步骤S2,查询所述数据库连接分组中是否存在空闲连接;
在所述应用程序发送的连接请求对应的数据库连接分组中查询是否存在空闲连接,所述空闲连接,为没有应用程序使用的连接。
步骤S3,若所述数据库连接分组中存在空闲连接,则运用所述数据库连接分组的空闲连接创建所述应用程序的连接。
在数据库连接分组中,没有应用程序使用的连接,为空闲连接。应用程序的连接请求,对应的数据库连接分组中有空闲连接,则使用该空闲连接,为应用程序连接请求创建所述应用程序的连接。
步骤S4,若所述数据库连接分组中不存在空闲连接,则查询所属数据库实例中其他数据库连接分组中是否存在空闲连接,以运用其他数据库连接分组中的空闲连接创建所述应用程序的连接。
应用程序的连接请求,在数据库实例分组中的对应数据库连接分组中没有空闲连接;则查询在该数据库实例分组中的其他数据库连接分组中是否存在空闲连接。例如,数据库实例DATA中有TEST1、TEST2和TEST3数据库连接分组,应用程序发送的连接请求,对应的为数据库实例DATA中的TEST1数据库连接分组,但当前TEST1数据库连接分组中没有空闲连接,则查询数据库实例DATA下的TEST2及TEST3中是否有空闲连接。
本实施例中,连接池接收到应用程序的连接请求后,对应上已经设置好的数据库实例分组中的数据库连接分组,查询所述数据库连接分组中是否存在空闲连接,若对应数据库连接分组中有空闲连接,则使用该空闲连接为应用程序创建新连接;若对应数据库连接分组中没有空闲连接,则查询对应数据库实例分组中的其他数据库连接分组中是否存在空闲连接。例如,数据库实例DATA中有TEST1、TEST2和TEST3数据库连接分组,应用程序发送的连接请求,对应的为数据库实例DATA中的TEST1数据库连接分组,若当前TEST1中有空闲连接,则使用该空闲连接为应用程序创建连接;若当前TEST1数据库连接分组中没有空闲连接,则查询数据库实例DATA下的TEST2及TEST3中是否有空闲连接。
参照图2,图2为本发明分布式数据库连接方法的第二实施例的流程示意图。基于上述方法的第一实施例,在所述步骤S4,若所述数据库连接分组中不存在空闲连接,则查询所属数据库实例中其他数据库连接分组中是否存在空闲连接,以运用其他数据库连接分组中的空闲连接创建所述应用程序的连接之后,还包括:
步骤S5,若所属数据库实例连接分组中的其他数据库连接分组中存在空闲连接,则运用该数据库连接分组中的空闲连接创建所述应用程序的连接。
在本实施例中,基于步骤S4,应用程序的连接请求,对应到预先设置好的数据库实例下的数据库连接分组中,若该数据库连接分组中没有空闲连接,则查询该数据库实例下的其他数据库连接分组中是否存在空闲连接,若当中有数据库连接分组中存在空闲连接,通过数据库SQL语句的执行结果,反馈出有空闲连接存在的数据库连接分组的数据库名,并使用“use”命令将所述应用程序连接请求切换至该数据库连接分组中,使用该数据库连接分组中的空闲连接为应用程序创建连接。使用同期数据库实例中的其他数据库连接分组的空闲连接复用,能够明显的降低数据库对系统资源的消耗,同时提升数据库和访问该数据库的应用程序的性能。
参照图3,图3为本发明分布式数据库连接方法的第三实施例的流程示意图。基于上述方法的第一实施例,在步骤S4,若所述数据库连接分组中不存在空闲连接,则查询所属数据库实例中其他数据库连接分组中是否存在空闲连接,以运用其他数据库连接分组中的空闲连接创建所述应用程序的连接之后,包括步骤S6:
步骤S6,若所属数据库实例连接分组中的其他数据库连接分组中不存在空闲连接,则创建一个指向所述数据库的新连接,运用所述新连接创建所述应用程序的连接。
在本实施例中,基于步骤S4,应用程序的连接请求,对应到预先设置好的数据库实例下的数据库连接分组中,若该数据库连接分组中没有空闲连接,则查询该数据库实例下的其他数据库连接分组中是否存在空闲连接,若当前数据库实例下,所有的数据库连接分组中都没有空闲连接,则在应用程序对应的数据库连接分组中重新创建一个连接,用于对应应用程序的连接请求,并将该连接归类至应用程序对应的数据库连接分组下。
参照图4,图4为本发明分布式数据库连接方法的第五实施例的流程示意图。基于上述方法的第一实施例,在接收应用程序的连接请求,并从预先设置的数据库分组中确定所述连接请求所述的数据库连接分组之前,还包括:
步骤S7,从预先设置的数据库实例分组中确定所述连接请求所属的数据库实例连接分组;并从所述确定的数据库实例连接分组中确定所述应用程序的连接请求所属的数据库连接分组。
在本实施例中,设置将数据库按照实例进行分组,每个实例对应为一个数据库分组,并根据数据库实例的内容,将数据库分配至该实例中,作为该数据库实例下的数据库连接分组。应用程序发送的连接请求,根据接收到的应用程序的连接请求中的信息,包括名称、类别等;根据应用程序的连接信息,对应至数据库实例中。例如,在连接池中有3个数据库实例,其中DATA1、DATA2及DATA3数据库实例中,所述应用程序连接请求中,根据名称对应至DATA2数据库实例中。进一步的,根据应用程序连接请求中的名称信息对应至数据库实例中的数据库连接分组。例如,在数据库实例DATA2中有TEST1、TEST2及TEST3数据库连接分组,根据所述应用程序连接请求中的类别信息,对应至数据库连接分组TEST1。
参照图5,图5为本发明分布式数据库连接方法的第四实施例的流程示意图。基于上述方法的第一至第四实施例,在本发明分布式数据库连接方法中,还包括异步整理连接池连接的操作,包括:
步骤S8,在查询数据库连接分组中是否存在空闲连接时,通过预设数量的线程,对连接池中的对应数据库连接分组中的所有连接进行空闲连接查询操作;
在数据连接池中,通过数据库实例的分组并将连接分配至数据库实例下的数据库连接分组中,所有数据库连接分组下的连接都根据当前是否有使用的前提下分为空闲连接和使用连接。为了管理连接池中的连接,需通过预设数量的线程对数据库连接进行有效率的管理,所述预设数量的线程,为数据库管理员进行设置,根据连接池中连接的数量,设置相应数量的线程进行管理。例如,线程数量与连接池中连接的数量为1比5的比例,若当前连接池中有连接数量为20,则需提供4个线程对连接进行管理。
步骤S9,若检查到运行的空闲连接断开,则使用线程将断开的空闲连接重新连接;
线程检查数据库实例下的数据库连接分组中的连接,在线程中,预设了关联连接的SQL语句,在使用线程检查数据库连接分组的连接时,若有连接断开,则触发线程中的SQL语句。通过线程中定义的处理断开连接SQL语句执行,将断开的连接重新关联。所述断开的连接,即不能被使用的连接,在连接池中,断开的连接若未及时重新关联上,则会造成数据库的冗余,影响数据库连接的效率。
步骤S10,若检查到运行的空闲连接数量超过目标数量,则使用线程将超过目标数量的空闲连接关闭。
线程检查数据库实例下的数据库连接分组中的连接,在线程中,预设了关闭连接的SQL语句。线程检查到数据库实例下的数据库连接分组中有空闲连接的数量超过目标数量,则触发线程中的SQL语句。通过线程中定义的关闭连接的SQL语句的执行,超出目标数量的连接直接关闭。所述目标数量,为数据库连接分组中的固定空闲连接数量,是基于数据库的大小和连接的频率,由数据库管理员进行设置。因数据库连接是一种非常关联且有限的昂贵资源,所以为了数据库的系统资源和访问效率,需将数据库连接控制在一个范围之内,多出的空闲连接则直接关闭。
上述第一至第五实施例的分布式数据库连接方法的执行主体均可以为带有数据库应用程序的电子设备。更进一步地,该分布式数据库连接方法可以由安装有数据库的客户端程序实现,其中,该电子设备可以包括但不限于手机、pad、笔记本电脑等。
本发明进一步提供一种分布式数据连接装置。
参照图6,图6为本发明分布式数据库连接装置的较佳的功能模块示意图。
在一实施例中,所述装置包括:接收模块10、确认模块20、查询模块30、连接模块40及遍历模块50。
接收模块10,用于接收应用程序的连接请求;
确认模块20,用于从预先设置的数据库分组中确定所述连接请求所属的数据库连接分组;
数据库连接池在接收到应用程序的连接请求时,根据应用程序的名称,对应已经分组的数据库实例名称,并对应至该数据库实例分组中的数据库分组。所述数据库连接分组中,存在有从连接池分配的连接,连接的数量由数据库管理员进行分配至数据库实例中,并根据数据库实例下的数据库连接分组的数据库内存大小分配。
查询模块30,用于查询所述数据库连接分组中是否存在空闲连接;
在所述应用程序发送的连接请求对应的数据库连接分组中查询是否存在空闲连接,所述空闲连接,为没有应用程序使用的连接。
连接模块40,用于若所述数据库连接分组中存在空闲连接,则运用所述数据库连接分组的空闲连接创建所述应用程序的连接。
在数据库连接分组中,没有应用程序使用的连接,为空闲连接。应用程序的连接请求,对应的数据库连接分组中有空闲连接,则使用该空闲连接,为应用程序连接请求创建所述应用程序的连接。
遍历模块50,用于若所述数据库连接分组中不存在空闲连接,则查询所属数据库实例中其他数据库连接分组中是否存在空闲连接,以运用其他数据库连接分组中的空闲连接创建所述应用程序的连接。
应用程序的连接请求,在数据库实例分组中的对应数据库连接分组中没有空闲连接;则查询在该数据库实例分组中的其他数据库连接分组中是否存在空闲连接。例如,数据库实例DATA中有TEST1、TEST2和TEST3数据库连接分组,应用程序发送的连接请求,对应的为数据库实例DATA中的TEST1数据库连接分组,但当前TEST1数据库连接分组中没有空闲连接,则查询数据库实例DATA下的TEST2及TEST3中是否有空闲连接。
本实施例中,连接池接收到应用程序的连接请求后,对应上已经设置好的数据库实例分组中的数据库连接分组,查询所述数据库连接分组中是否存在空闲连接,若对应数据库连接分组中有空闲连接,则使用该空闲连接为应用程序创建新连接;若对应数据库连接分组中没有空闲连接,则查询对应数据库实例分组中的其他数据库连接分组中是否存在空闲连接。例如,数据库实例DATA中有TEST1、TEST2和TEST3数据库连接分组,应用程序发送的连接请求,对应的为数据库实例DATA中的TEST1数据库连接分组,若当前TEST1中有空闲连接,则使用该空闲连接为应用程序创建连接;若当前TEST1数据库连接分组中没有空闲连接,则查询数据库实例DATA下的TEST2及TEST3中是否有空闲连接。
进一步地,所述遍历模块50,还用于若所属数据库实例连接分组中的其他数据库连接分组中存在空闲连接,则运用该数据库连接分组中的空闲连接创建所述应用程序的连接。
在本实施例中,基于遍历模块50,应用程序的连接请求,对应到预先设置好的数据库实例下的数据库连接分组中,若该数据库连接分组中没有空闲连接,则查询该数据库实例下的其他数据库连接分组中是否存在空闲连接,若当中有数据库连接分组中存在空闲连接,通过数据库SQL语句的执行结果,反馈出有空闲连接存在的数据库连接分组的数据库名,并使用“use”命令将所述应用程序连接请求切换至该数据库连接分组中,使用该数据库连接分组中的空闲连接为应用程序创建连接。使用同期数据库实例中的其他数据库连接分组的空闲连接复用,能够明显的降低数据库对系统资源的消耗,同时提升数据库和访问该数据库的应用程序的性能。
进一步的,所述连接模块40,还用于若所属数据库实例连接分组中的其他数据库连接分组中不存在空闲连接,则创建一个指向所述数据库的新连接,运用所述新连接创建所述应用程序的连接。
在本实施例中,基于遍历模块50,应用程序的连接请求,对应到预先设置好的数据库实例下的数据库连接分组中,若该数据库连接分组中没有空闲连接,则查询该数据库实例下的其他数据库连接分组中是否存在空闲连接,若当前数据库实例下,所有的数据库连接分组中都没有空闲连接,则在应用程序对应的数据库连接分组中重新创建一个连接,用于对应应用程序的连接请求,并将该连接归类至应用程序对应的数据库连接分组下。
进一步的,所述确认模块20,还用于从预先设置的数据库实例分组中确定所述连接请求所属的数据库实例连接分组;并从所述确定的数据库实例连接分组中确定所述应用程序的连接请求所属的数据库连接分组。
在本实施例中,设置将数据库按照实例进行分组,每个实例对应为一个数据库分组,并根据数据库实例的内容,将数据库分配至该实例中,作为该数据库实例下的数据库连接分组。应用程序发送的连接请求,根据接收到的应用程序的连接请求中的信息,包括名称、类别等;根据应用程序的连接信息,对应至数据库实例中。例如,在连接池中有3个数据库实例,其中DATA1、DATA2及DATA3数据库实例中,所述应用程序连接请求中,根据名称对应至DATA2数据库实例中。进一步的,根据应用程序连接请求中的名称信息对应至数据库实例中的数据库连接分组。例如,在数据库实例DATA2中有TEST1、TEST2及TEST3数据库连接分组,根据所述应用程序连接请求中的类别信息,对应至数据库连接分组TEST1。
参照图7,图7为本发明分布式数据库连接装置的第五实施例的功能模块示意图。所述装置还包括检查模块60及操作模块70。
检查模块60,用于在查询数据库连接分组中是否存在空闲连接时,通过预设数量的线程,对连接池中的对应数据库连接分组中的所有连接进行空闲连接查询操作;
在数据连接池中,通过数据库实例的分组并将连接分配至数据库实例下的数据库连接分组中,所有数据库连接分组下的连接都根据当前是否有使用的前提下分为空闲连接和使用连接。为了管理连接池中的连接,需通过预设数量的线程对数据库连接进行有效率的管理,所述预设数量的线程,为数据库管理员进行设置,根据连接池中连接的数量,设置相应数量的线程进行管理。例如,线程数量与连接池中连接的数量为1比5的比例,若当前连接池中有连接数量为20,则需提供4个线程对连接进行管理。
操作模块70,用于若检查到运行的空闲连接断开,则使用线程将断开的空闲连接重新连接;
线程检查数据库实例下的数据库连接分组中的连接,在线程中,预设了关联连接的SQL语句,在使用线程检查数据库连接分组的连接时,若有连接断开,则触发线程中的SQL语句。通过线程中定义的处理断开连接SQL语句执行,将断开的连接重新关联。所述断开的连接,即不能被使用的连接,在连接池中,断开的连接若未及时重新关联上,则会造成数据库的冗余,影响数据库连接的效率。
所述操作模块70,还用于若检查到运行的空闲连接数量超过目标数量,则使用线程将超过目标数量的空闲连接关闭。
线程检查数据库实例下的数据库连接分组中的连接,在线程中,预设了关闭连接的SQL语句。线程检查到数据库实例下的数据库连接分组中有空闲连接的数量超过目标数量,则触发线程中的SQL语句。通过线程中定义的关闭连接的SQL语句的执行,超出目标数量的连接直接关闭。所述目标数量,为数据库连接分组中的固定空闲连接数量,是基于数据库的大小和连接的频率,由数据库管理员进行设置。因数据库连接是一种非常关联且有限的昂贵资源,所以为了数据库的系统资源和访问效率,需将数据库连接控制在一个范围之内,多出的空闲连接则直接关闭。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。