数据库连接池的深入学习

为什么需要数据库连接池?

正常操作数据库需要对其进行连接,访问数据库,执行sql语句,断开连接。

创建数据库连接是一个昂贵的过程,在高并发的情况下,频繁的创建数据库的连接可能会导致数据库宕机。

有了连接池那么启动就创建多个连接对象,并保存起来,当需要的时候取出来执行sql语句,用完放回,那么极大的减少了连接的建立与摧毁的开销。

池化技术从根本上就是将连接的对象保存起来,并不对其进行摧毁,那么在高并发的场景下不需要频繁的对连接进行创建与销毁,减少创建资源的开销。增加响应速度。(线程池也如此)

连接池优点:

1.资源复用:减少连接的建立与销毁的开销。

2.提高性能:在初始化的时候连接就已经建立好,可以立即使用,不需要在执行sql语句时再创建,减少了响应时间。

3.优化资源分配:当我们有有个应用需要操作数据库时,在持久层可以设置最大数量,来避免资源的耗尽。

4.生命周期管理:池化技术负责连接的创建,初始化,销毁与回收。

使用JDBC来操作数据库:

java 复制代码
//1. 连接=数据库
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
 try {
		Statement stmt = conn.createStatement();
		ResultSet rs = stmt.executeQuery("SELECT * FROM user") ;
		//使用结果集ResultSet获取数据。
		 while(rs.next()){   
	         String name = rs.getString("name") ; 
	         System.out.println(name);
	     } 
		 //操作完成以后关闭JDBC对象,要把所有使用的JDBC对象全都关闭,以释放JDBC资源,同时按照先进后出的原则来释放。
           resultSet.close();
           preparedStatement.close();
           connection.close();
	  } catch (SQLException e) {
		e.printStackTrace();
	  }

而现在普遍使用JDBC连接池,JDBC也提供了一个标准的数据源接口javax.sql.DataSource

目前常见的JDBC连接池开源技术:

  1. HikariCP:以其极低的延迟和卓越的性能著称,实现了"零加锁"并发控制机制,优化了线程与内存的使用,适合高并发场景。HikariCP提供了丰富的配置选项,并且被Spring Boot 2官方推荐使用 。

  2. Apache DBCP (Database Connection Pool):由Apache开发的Java数据库连接池项目,使用了Jakarta commons-pool对象池机制。它提供了基本的连接池功能,虽然性能可能不如HikariCP,但稳定性好,易于配置 。

  3. C3P0:一个开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0历史悠久,但代码复杂,可能存在维护上的挑战 。

  4. Druid:由阿里巴巴开发的数据库连接池,提供了丰富的监控和扩展功能,具有防SQL注入的能力,内置了多种监控和统计功能,方便对JDBC接口进行监控跟踪 。

  5. BoneCP:曾经是最快的连接池之一,但在2013年后不再更新。它被设计为高效、轻量级,并且易于集成到各种持久化产品中 。

  6. Tomcat JDBC Pool:Tomcat从7.0版本开始引入的连接池模块,完全兼容DBCP,通过异步方式获取连接,支持高并发应用环境

相关推荐
易云码7 分钟前
信息安全建设方案,网络安全等保测评方案,等保技术解决方案,等保总体实施方案(Word原件)
数据库·物联网·安全·web安全·低代码
newxtc12 分钟前
【客观理性深入讨论国产中间件及数据库-科创基础软件】
数据库·中间件·国产数据库·国产中间件·科创
懒惰才能让科技进步13 分钟前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
水月梦镜花15 分钟前
redis:list列表命令和内部编码
数据库·redis·list
love_and_hope29 分钟前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
Chef_Chen32 分钟前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
芊寻(嵌入式)42 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
MonkeyKing_sunyuhua1 小时前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql
天郁青1 小时前
数据库交互的本地项目:后台管理系统
数据库·交互
马剑威(威哥爱编程)1 小时前
MongoDB面试专题33道解析
数据库·mongodb·面试