数据库连接池 BoneCP、HikariCP 等

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 数据库连接池 BoneCP、HikariCP 等

@[toc]

数据库连接池 BoneCP、HikariCP 等

BoneCP

官方说法 BoneCP 是一个高效、免费、开源的 Java 数据库连接池实现库

设计初衷就是为了提高数据库连接池性能,根据某些测试数据显示,BoneCP 的速度是最快的,要比当时第二快速的连接池快 25 倍左右
完美集成到一些持久化产品如 Hibernate 和 DataNucleus 中

BoneCP 特色

  1. 高度可扩展,快速;连接状态切换的回调机制
  2. 允许直接访问连接;自动化重置能力
  3. JMX支持
  4. 懒加载能力
  5. 支持XML和属性文件配置方式
  6. 较好的Java代码组织
  7. 100%单元测试分支代码覆盖率
  8. 代码40KB左右

Druid

Druid 是 Java 语言中最好的数据库连接池,Druid 能够提供强大的监控和扩展功能,是一个可用于大数据实时查询和分析的高容错、高性能的开源分布式系统
尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid 仍能够保持 100% 正常运行

主要特色

  1. 为分析监控设计
  2. 快速的交互式查询
  3. 高可用
  4. 可扩展
  5. Druid是一个开源项目,源码托管在github上。

Tomcat Jdbc Pool

Tomcat 在 7.0 以前都是使用 common-dbcp 做为连接池组件,但是 dbcp 是单线程,为保证线程安全会锁整个连接池,性能较差,dbcp有超过60个类,也相对复杂

Tomcat 从 7.0 开始引入了新增连接池模块叫做 Tomcat jdbc pool,基于Tomcat JULI,使用 Tomcat 日志框架,完全兼容 dbcp,通过异步方式获取连接,
支持高并发应用环境,超级简单核心文件只有8个,支持 JMX,支持XA Connection。

HikariCP

HikariCP 是 Spring Boot 2.0 之后默认采用的连接池,HikariCP 号称是性能最好的连接池,是一个高性能的 JDBC 连接池
HikariCP 基于 BoneCP 做了大量的优化和改进

大型系统一般都有专门的监控类软件,如 skywalking、prometheus 等,因此连接池只需要做好的他的本职工作即可,应该更加关注连接池的性能
Druid 适合中型系统是因为他自带一些本职工作之外的功能,如 SQL 监控、扩展、SQL 防注入等

C3p0

C3p0 是开源的 JDBC 连接池,实现了数据源和 JNDI 绑定,支持 JDBC3 规范和 JDBC2 的标准扩展
目前使用它的开源项目有 Hibernate、Spring 等
他是单线程的,性能较差,比较适用于小型系统,代码600KB左右

Dbcp

Dbcp 全称(Database Connection Pool),由Apache开发的一个 Java 数据库连接池项目, Jakarta commons-pool 对象池机制,

单独使用 dbcp 需要3个包

1. common-dbcp.jar
2. common-pool.jar
3. common-collections.jar

预先将数据库连接放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完再放回。
Dbcp 是单线程,并发量低,性能不好,适用于小型系统。

Tomcat 7.0 之前使用的连接池组件就是DBCP
Tomcat 7.0 之后使用了性能更好的 Tomcat Jdbc Pool 连接池

LRU

LRU 全称 Least Recently Used,缓存淘汰算法

LRU 是思路是,最近使用过的缓存被认为是有用的,很久都没用过的数据应该是无用的,当内存空间不足时,应该优先淘汰很久没使用过的缓存

PSCache

PSCache 全称 Prepared Statement Cache

Oracle 支持游标,一个 PreparedStatement 对应服务器一个游标,如果 PreparedStatement 被缓存起来重复执行,
PreparedStatement 没有被关闭,服务器端的游标就不会被关闭,性能提高非常显著
在类似SELECT * FROM T WHERE ID = ?这样的场景,性能可能是一个数量级的提升

PSCache 的核心数据结构是一个 LRUCache ,实现了 LinkedHashMap ,重写了 removeEldestEntry 方法

LRUCache 数据结构两个关键数据结构是哈希和链表,哈希可以快速判断一个数据是否存在,链表维护头尾节点
Java 自带 LinkedHashMap 正好包含了这两种数据结构

PS

C3p0、Dbcp 一般适合小型项目,HikariCP 适合中大型项目,一般来说,日常使用 HikariCP 或者 Druid 就足够了

相关文章
|
SQL Prometheus 监控
数据库连接池选型 Druid vs HikariCP
springboot 现在官方默认的数据库连接池是 HikariCP,HikariCP的性能从测试的数据上来看也是最高的。
数据库连接池选型 Druid vs HikariCP
|
1月前
|
XML Java 数据库连接
如何使用HikariCP连接池来优化数据库连接管理
在Java应用中,高效管理数据库连接是提升性能的关键。本文介绍了如何使用HikariCP连接池来优化数据库连接管理。通过引入依赖、配置参数和获取连接,你可以显著提高系统的响应速度和吞吐量。 示例代码展示了从配置到使用的完整流程,帮助你轻松上手。
240 3
|
6月前
|
SQL 数据库 数据安全/隐私保护
号称全网最快的数据库连接池HikariCP的工具类开发-HikariCPUtils
号称全网最快的数据库连接池HikariCP的工具类开发-HikariCPUtils
108 0
|
7月前
|
监控 druid 数据库连接
数据库连接池选择:HikariCP vs Druid
数据库连接池选择:HikariCP vs Druid
|
7月前
|
监控 druid Java
数据库链接池HikariCP、Druid
数据库链接池HikariCP、Druid
|
SQL 分布式计算 资源调度
分享一个 hive on spark 模式下使用 HikariCP 数据库连接池造成的资源泄露问题
分享一个 hive on spark 模式下使用 HikariCP 数据库连接池造成的资源泄露问题
|
存储 缓存 Prometheus
Spring Boot 青睐的数据库连接池HikariCP为什么是史上最快的?
Spring Boot 青睐的数据库连接池HikariCP为什么是史上最快的?
|
缓存 Java 关系型数据库
Java生态中性能最强数据库连接池HikariCP
Java生态中性能最强数据库连接池HikariCP
397 0
Java生态中性能最强数据库连接池HikariCP
|
监控 druid Java
Springboot 2.0选择HikariCP作为默认数据库连接池的五大理由
Springboot 2.0选择HikariCP作为默认数据库连接池的五大理由
416 0
Springboot 2.0选择HikariCP作为默认数据库连接池的五大理由
|
Java 数据库 Spring
带你读《HikariCP数据库连接池实战》之三:初识HikariCP
本书不仅对市面上常见的连接池组件进行了全方位比较和分析,还以实战的角度深入介绍了高性能HikariCP连接池的使用、原理与维护。