Contents
  1. 1. 什么情况使用连接池
  2. 2. 使用连接池的好处
  3. 3. 选型对比
  4. 4. 参考链接

什么情况使用连接池

对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。

使用连接池的好处

  1. 连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。
  2. 对于共享资源,有一个很著名的设计模式:资源池。该模式正是为了解决资源频繁分配、释放所造成的问题的。把该模式应用到数据库连接管理领域,就是建立一个数据库连接池,提供一套高效的连接分配、使用策略,最终目标是实现连接的高效、安全的复用。

选型对比

功能C3P0DBCPDruid
线程同步单线程单线程多线程、异步
PSCache
LRU
ExceptionSorted
监控jmx/logjmxjmx/log/http
扩展性
SQL拦截及解析支持
代码复杂度复杂中等,超过60个类复杂
特点历史久远,代码逻辑复杂,且不易维护依赖于apache-common-pool阿里开源,功能全面,为监控而生
连接池管理队列LinkedBlockingDeque数组/CopyOnWriteArrayList
Tomcat数据源、JNDI数据源和JNDI绑定,支持JDBC2和JDBC3的扩展支持JNDI配置,需要加入jconn3.jar支持JDNI配置,com.alibaba.druid.pool.DruidDataSourceFactory
更新维护2015.12.092015.8.6更新维护
功能Tomcat-JDBCBoneCPHikariCP
线程同步多线程、异步多线程、异步多线程、异步
PSCache
LRU
ExceptionSorted
监控jmxjmxjmx/metrics
扩展性
SQL拦截及解析
代码复杂度简单,8个核心类简单简单
特点异步、高性能、DBCP连接池的备选方案性能是C3P0的25倍左右优化力度大,功能简单,起源于BoneCP
连接池管理FairBlockingQueue堆栈threadlocal/CopyOnWriteArrayList
Tomcat数据源、JNDI支持JDNI配置,Tomcat的一个模块支持JNDI配置,com.jolbox.bonecp.BoneCPDataSource支持JDNI配置,HikariJNDIFactory
更新维护更新维护2015.6.25更新维护

其中:

  • PSCache是数据库连接池的关键指标。在Oracle中,类似SELECT NAME FROM USER WHERE ID = ?这样的SQL,启用PSCache和不启用PSCache的性能可能是相差一个数量级的。Proxool是不支持PSCache的数据库连接池,如果你使用Oracle、SQL Server、DB2、Sybase这样支持游标的数据库,那你就完全不用考虑Proxool。
  • ExceptionSorter是一个很重要的容错特性,如果一个连接产生了一个不可恢复的错误,必须立刻从连接池中去掉,否则会连续产生大量错误。这个特性,目前只有JBossDataSource和Druid实现。Druid的实现参考自JBossDataSource,经过长期生产反馈补充。

参考链接

  1. 常用数据库连接池配置说明
  2. 主流数据库连接池全面对比
Contents
  1. 1. 什么情况使用连接池
  2. 2. 使用连接池的好处
  3. 3. 选型对比
  4. 4. 参考链接