连接池原理

连接池介绍

定义

Wiki上是这么定义连接池(Connction Poll)

In software engineering, a connection pool is a cache of database connections maintained so that the connections can be reused when future requests to the database are required. Connection pools are used to enhance the performance of executing commands on a database. Opening and maintaining a database connection for each user, especially requests made to a dynamic database-driven website application, is costly and wastes resources. In connection pooling, after a connection is created, it is placed in the pool and it is used again so that a new connection does not have to be established. If all the connections are being used, a new connection is made and is added to the pool. Connection pooling also cuts down on the amount of time a user must wait to establish a connection to the database.

简单来说,与线程池的概念类似,连接池也采用了资源池(Resource Pool)的设计模式,即解决珍贵资源的频繁分配与释放所造成的问题。其基本思想是建立一个数据库的"“缓存池”(即连接池),在这个缓冲池中同时建立多个数据库的物理连接。当前外界请求连接DB时,只需要从连接池中取出一个已经建立的连接即可。当外界使用完毕后,“释放”该连接。但DB的物理连接其实没有被关闭,而是将该连接放回了缓存池中。看起来,连接池的概念很有点预加载的意思。

  • 传统的获取连接方式如下图所示:
  • 采用连接池技术后的过程如下

作用

1. 资源复用

由于DB的物理连接能够被复用,避免了频繁创建和释放连接导致的性能开销,也即直接利用了预先创建的可用连接,可以有效提高系统的响应速度。

2. 避免DB连接泄露

在实现连接池时,一般都需要配置连接的最大占用时长。一旦某个物理连接的占用时长超过设定的阈值,则连接池的实现机制将强制收回被占用的连接。从而可以有效避免Coding过程中未及时关闭DB连接等原因而导致的资源泄露。

3. 合理分配DB资源

为每个使用同一DB的应用单独设置最大连接数量,从而避免单个应用独占所有DB资源。

DB连接池对比

DruidBoneCPDBCPC3P0ProxoolJBossTomcat-JdbcNote
LRU?一个性能关键指标
PSCache连接池的关键指标
PSCache-Oracle-Optimized对Oracle的PSCache优化指标
ExceptionSorter一个很重要的容错特性
更新维护?

貌似使用比较多的连接池有dbcp、c3p0、Tomcat-Jdbc以及阿里的Druid。阿里给Druid的定义很直接:Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。上面这个表格就是来自Druid在GitHub主页的介绍:【传送门

参考链接

连接池详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值