一种弹性数据库连接池的管理方法及装置制造方法及图纸

技术编号:28493523 阅读:30 留言:0更新日期:2021-05-19 22:21
本发明专利技术公开了一种弹性数据库连接池的管理方法及装置,包括:在初始化时创建若干个数据库连接存入连接池的队列中,所述数据库连接数量为创建时设定的最小连接数参数;响应于数据库连接请求,若连接池内存在可用连接,则返回队列顶端存储的数据库连接;将连接池返回的连接保存在std::unique_ptr中。本发明专利技术采用队列存储数据库连接,同时采用基于C++11标准的智能指针方式包裹数据库连接,减少使用者因为失误导致的句柄泄露。失误导致的句柄泄露。失误导致的句柄泄露。

【技术实现步骤摘要】
一种弹性数据库连接池的管理方法及装置


[0001]本专利技术属于数据库管理
,具体涉及一种弹性数据库连接池的管理方法,还涉及一种弹性数据库连接池的管理装置。

技术介绍

[0002]数据库连接(database connection)是数据库服务器与客户端之间的通信联系。客户通过数据库连接发送命令、接收服务器返回的结果。
[0003]典型的应用程序需要创建维护自己的数据库连接,在多线程的情况下同时使用同一个连接会导致数据库访问异常,如果每个线程都创建自己的连接会造成资源上的浪费以及效率的降低,同时商用数据库的最大数据库连接数是根据用户的采购方案提供的,创建过多的数据库连接可能导致数据库无法接受新的连接请求从而导致业务上的问题。
[0004]对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
[0005]数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
[0006]现有技术中,数据库连接池的管理方法有:
[0007]方案1:专利公开号为CN111177203A的动态调节数据库连接池大小的方法、服务器及存储介质;此方法包括设置数据库连接池的最小连接数量、最大连接数量及连接总数量;获取客户端的连接需求值,判断连接需求值是否小于或等于最大连接数量,若是则发放连接给客户端,若否则获取超过最大连接数量的连接请求的等待时间,若到达异常触发时间值未得到响应,则扩增最大连接数量,并在新建连接发放给客户端;当新建的连接存活时间到达销毁触发时间值,且服务器未接收到新的连接请求时,删除新建的连接,并初始化最大连接数量。本专利技术能够自动扩增连接池的最大连接数量,避免连接请求由于长时间等待造成连接获取异常,同时能够自动删除长时间未使用的新建连接,释放资源。
[0008]方案2:申请公布号:CN103605571A的数据库连接池的控制方法,此方法包括:规范化线程优先级;判断当前连接池是否为空,如果连接池不为空,取出第一个数据连接,设置当前状态为忙,返回该数据连接;如果连接池为空,判断当前外部程序使用中未归还的数据连接个数是否已经达到了连接池内最大连接个数,如果未达到,增加数据连接,并加入当前数据库连接池,返回数据库连接池的第一个数据连接;如果当前外部程序使用中未归还的数据连接个数达到连接池内最大连接个数,设置当前线程的优先级,获取当前时间作为第一时间,循环判断当前连接池是否为空,数据库连接池进入等待状态。在高并发、多数据源环境下,有效提高了数据访问性能。
[0009]方案3:申请公布号:CN106484882A的一种数据库连接池的管理方法和装置,公开了一种数据库连接池的管理方法和装置,用于避免连接的浪费,提高数据库连接池的管理
效率。本专利技术实施例提供一种数据库连接池的管理方法,包括:接收应用程序当前调用的第一线程发送的数据库访问请求;根据所述数据库访问请求从数据库连接池中选择出可用的连接,所述数据库连接池是为所述应用程序需要调用的多个线程创建的共用连接池;将选择出的所述可用的连接分配给所述第一线程使用,由所述第一线程使用所述可用的连接进行应用数据操作。
[0010]已有技术方案1的缺点:该专利技术可以根据当前连接池的最大,最小和当前连接数量动态的条件连接池最大连接数。但该方案中当现有连接数小于最大连接数时不会减少连接,从而导致连接浪费。
[0011]已有技术方案2的缺点:该专利技术在程序请求连接时如果连接池不为空则返回连接,如果为空且当前连接数量小于最大连接数量时程序忙等待至有数据库连接可用。该方案由于采取忙等待方案,循环判断消耗cpu资源,同时此方案不支持数据库连接长时间空闲时销毁连接导致资源浪费。
[0012]已有技术方案3的缺点:该专利技术在程序请求连接时如果连接池不为空则返回连接,如果为空是返回失败。该方案在数据库连接池为空时直接返回失败,程序被迫要处理失败流程,增加复杂度,同时此方案不支持数据库连接长时间空闲时销毁连接导致资源浪费。
[0013]综上所述,急需一种新的数据库连接池的管理方法,已克服以上缺陷。

技术实现思路

[0014]本专利技术的目的在于克服现有技术中的不足,提供了一种弹性数据库连接池的管理方法,解决了现有技术中的连接数量无法自动回收的问题。
[0015]为解决上述技术问题,本专利技术提供了一种弹性数据库连接池的管理方法,包括:
[0016]在初始化时创建若干个数据库连接存入连接池的队列中,所述数据库连接数量为创建时设定的最小连接数参数;
[0017]响应于数据库连接请求,若连接池内存在可用连接,则返回队列顶端存储的数据库连接;
[0018]将连接池返回的连接保存在智能指针std::unique_ptr中。
[0019]进一步的,所述数据库连接存入队列时,同时记录数据库连接存入时间,判断队列顶端的数据库连接的存入时间与当前时间的差值是否大于创建时设定的连接空闲时间参数,如果是,则关闭连接并移除出队列;否则等待至下个时间点继续重复判断动作。
[0020]进一步的,所述响应于数据库连接请求时,若连接池内不存在可用连接,则判断创建时设定的请求超时时间参数是否为0,若请求超时时间参数为0,则等待至连接池内有空闲连接,获取连接并返回。
[0021]进一步的,还包括:
[0022]若请求超时时间参数不为0,则等待至超时或者线程池内有空闲连接,尝试获取连接,若可以获取连接则获取连接并返回。
[0023]进一步的,还包括:
[0024]若无法获取连接,则获取请求超时后处理参数:若请求超时后处理参数为0,则抛出异常;若请求超时后处理参数为1,则尝试创建并获取临时连接,创建失败时抛出异常;若请求超时后处理参数为2,则尝试创建并获取临时连接,创建失败时等待至下个超时时间。
[0025]相应的,本专利技术还提供了一种弹性数据库连接池的管理装置,包括:
[0026]连接创建模块,用于在初始化时创建若干个数据库连接存入连接池的队列中,所述数据库连接数量为创建时设定的最小连接数参数;
[0027]连接获取模块,用于响应于数据库连接请求,若连接池内存在可用连接,则返回队列顶端存储的数据库连接;
[0028]连接存储模块,用于将连接池返回的连接保存在智能指针std::unique_ptr中。
[0029]与现有技术相比,本专利技术所达到的有益效果是:本专利技术采用队列存储数据库连接,并且同时监控队首的连接的空间时间,若空闲时间大于创建时参数idle_time连接空闲时间则关闭连接并移除出队列。同时采用基于C++11标准的智能指针方式包裹数据库连接,减少使用者因为失误导致的句柄泄露。
附图说明
[0030]图1为数据库连本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种弹性数据库连接池的管理方法,其特征是,包括:在初始化时创建若干个数据库连接存入连接池的队列中,所述数据库连接数量为创建时设定的最小连接数参数;响应于数据库连接请求,若连接池内存在可用连接,则返回队列顶端存储的数据库连接;将连接池返回的数据库连接保存在智能指针std::unique_ptr中。2.根据权利要求1所述的一种弹性数据库连接池的管理方法,其特征是,所述数据库连接存入队列时,同时记录数据库连接存入时间,判断队列顶端的数据库连接的存入时间与当前时间的差值是否大于创建时设定的连接空闲时间参数,如果是,则关闭连接并移除出队列;否则等待至下个时间点继续重复判断动作。3.根据权利要求1所述的一种弹性数据库连接池的管理方法,其特征是,所述响应于数据库连接请求时,若连接池内不存在可用连接,则判断创建时设定的请求超时时间参数是否为0,若请求超时时间参数为0,则等待至连接池内有空闲连接,获取连接并返回。4.根据权利要求3所述的...

【专利技术属性】
技术研发人员:严海鑫王志心钱国明李鹏王媛媛孟娜娜
申请(专利权)人:国电南京自动化股份有限公司
类型:发明
国别省市:

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

1