数据库连接池 BoneCP、HikariCP 等

本文涉及的产品
服务治理 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
|
3月前
|
监控 druid Java
数据库链接池HikariCP、Druid
数据库链接池HikariCP、Druid
|
存储 缓存 Prometheus
Spring Boot 青睐的数据库连接池HikariCP为什么是史上最快的?
Spring Boot 青睐的数据库连接池HikariCP为什么是史上最快的?
|
缓存 Java 关系型数据库
Java生态中性能最强数据库连接池HikariCP
Java生态中性能最强数据库连接池HikariCP
340 0
Java生态中性能最强数据库连接池HikariCP
|
Java 数据库 Spring
带你读《HikariCP数据库连接池实战》之三:初识HikariCP
本书不仅对市面上常见的连接池组件进行了全方位比较和分析,还以实战的角度深入介绍了高性能HikariCP连接池的使用、原理与维护。
|
8天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
45 2
|
24天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
105 0
|
24天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
24天前
|
关系型数据库 MySQL 数据库
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
|
5天前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
14 0

热门文章

最新文章

  • 1
    Serverless 应用引擎产品使用之在函数计算中,数据库访问失败如何解决
    9
  • 2
    Serverless 应用引擎产品使用之在阿里云函数计算中发现没有NAC(Native Application Component)选项,且无法自己上传MOD(模块)如何解决
    10
  • 3
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,调用了FC函数但是没有执行或者报错,并且在FC函数后台也看不到调用记录日志如何解决
    10
  • 4
    Serverless 应用引擎操作报错合集之在阿里函数计算中,sd部署启动报错CAExited 报错信息“operation not permitted”如何解决
    9
  • 5
    Serverless 应用引擎操作报错合集之在阿里函数计算中,SD Controlnet Depth 运行过程中出现错误“urllib3 v2.0 only supports OpenSSL 1.1.1+”如何解决
    10
  • 6
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,laravel zip包使用示例的start.sh脚本启动时出现错误代码如何解决
    11
  • 7
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,服务器调用FC函数时出现 "[Errno -3] Temporary failure in name resolution)" 错误如何解决
    8
  • 8
    Serverless 应用引擎操作报错合集之在Serverless 应用引擎中,部署过程中遇到错误代码如何解决
    12
  • 9
    Serverless 应用引擎操作报错合集之在 Serverless 应用引擎中,遇到“没法通过 head 传递灰度标识”如何解决
    12
  • 10
    Serverless 应用引擎操作报错合集之在阿里函数计算中,函数执行超时,报错Function time out after如何解决
    12