五大主流数据库连接池的深度剖析与对比

简介: HikariCP通过优化concurrentBag和fastStatementList等集合,提升了并发的读写效率。它采用threadlocal缓存连接,并大量运用CAS机制,以最大程度地减少lock的使用。从字节码的维度进行代码优化,确保方法尽量控制在35个字节码以内,以提升JVM处理效率。HikariCP在此基础上的进一步优化措施包括:利用ping命令进行mysql连接,以及通过Sharding-JDBC的Driver、Server和Sidecar三个版本,构建灵活多样的生态系统,满足不同需求和环境。对于线上应用,Sharding-JDBC-Driver可提供直连数据库的最优性能,而Sha

本文旨在深入探讨主流数据库连接池在Java语言中的应用与比较,通过详细的内容解析,为Java语言学习者提供有益的参考和指导。

011.主流数据库连接池介绍

◉ C3P0特点

C3P0是一个支持JDBC3规范的开源连接池,它不仅实现了数据源与JNDI的绑定,还支持JDBC2的标准扩展。尽管C3P0在小型系统中表现尚可,但其单线程性能限制影响了其在大型系统中的应用。

◉ DBCP特点

DBCP基于commons-pool,适合小型系统,具有简单的特性。作为Apache推出的Java数据库连接池项目,DBCP基于Jakarta commons-pool的对象池机制,为Tomcat等容器提供了连接池组件。虽然它简单易用,但单线程的特性限制了其并发性能。

◉ Tomcat Jdbc Pool特点

Tomcat Jdbc Pool是Tomcat在7.0版本后引入的新连接池模块,相较于之前的common-dbcp,它提供了高并发性能,异步获取连接,支持XA Connection,适用于高并发应用环境。它基于Tomcat JULI日志框架,支持异步获取连接,并集成了JMX和XA Connection功能。

◉ BoneCP特点

BoneCP性能优越,集成于Hibernate,支持多种高级功能,代码 lean。官方宣称BoneCP为高效、免费且开源的Java数据库连接池。其设计初衷在于提升数据库连接池性能,据测试数据显示,BoneCP的速度极为出色。此外,BoneCP已完美融入Hibernate和DataNucleus等持久化产品中。其特色包括高度可扩展性、快速性能、连接状态切换的回调机制、直接连接访问、自动化重置、JMX支持、懒加载能力,以及XML和属性文件的灵活配置方式。

◉ Druid特点

Druid提供监控功能,高可用性,适合大数据分析,开源。Druid不仅是一个高性能的数据库连接池,还提供了强大的监控功能,使其成为大数据实时查询和分析的理想选择。即便在代码部署、机器故障或其他系统问题时,Druid仍能保持100%的稳定性。其特色包括为分析监控而设计、快速的交互式查询、高可用性、可扩展性,以及开源特性。

022.主流连接池功能对比<h1><p id="9tl.jxust.org.cn">5</p></h1> <h1><p id="xx1.kdd6a2.org.cn">8</p></h1> <h1><p id="9kv.zhaoyu.mobi">1</p></h1> <h1><p id="osw.goodchirping.org.cn">3</p></h1> <h1><p id="qr5.zhaomu.mobi">1</p></h1> <h1><p id="mx6.fqgf.org.cn">7</p></h1> <h1><p id="oih.menghu.org.cn">0</p></h1> <h1><p id="8py.xinjia.org.cn">3</p></h1> <h1><p id="yrw.51dior.org.cn">3</p></h1> <h1><p id="oih.cyrus.org.cn">8</p></h1>  

◉ HikariCP性能剖析

HikariCP通过优化集合提升读写效率,采用threadlocal缓存连接,优化字节码以提升JVM性能,与Sharding-JDBC结合提供灵活生态系统。HikariCP通过优化concurrentBag和fastStatementList等集合,提升了并发的读写效率。它采用threadlocal缓存连接,并大量运用CAS机制,以最大程度地减少lock的使用。从字节码的维度进行代码优化,确保方法尽量控制在35个字节码以内,以提升JVM处理效率。HikariCP在此基础上的进一步优化措施包括:利用ping命令进行mysql连接,以及通过Sharding-JDBC的Driver、Server和Sidecar三个版本,构建灵活多样的生态系统,满足不同需求和环境。对于线上应用,Sharding-JDBC-Driver可提供直连数据库的最优性能,而Sharding-JDBC-Server则便于通过MySQL命令行或UI客户端进行数据查询和DDL语句执行。它们共享同一注册中心集群,实现配置自动推送。当数据库拆分导致连接数激增时,可以考虑在线上直接使用Sharding-JDBC-Server来有效控制连接数。未来,Sharding-JDBC-Sidecar也将加入,其部署架构值得期待。


相关文章
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
存储 缓存 NoSQL
把ruoyi-vue前后端分离项目的redis缓存改为本地缓存cache
把ruoyi-vue前后端分离项目的redis缓存改为本地缓存cache
1824 0
|
11月前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;
3683 77
|
Java Spring
SpringBoot: 启动Banner在线生成工具
SpringBoot: 启动Banner在线生成工具
41870 1
SpringBoot: 启动Banner在线生成工具
|
缓存 Java 数据库连接
Mybatis一级缓存、二级缓存详讲
本文介绍了MyBatis中的查询缓存机制,包括一级缓存和二级缓存。一级缓存基于同一个SqlSession对象,重复查询相同数据时可直接从缓存中获取,减少数据库访问。执行`commit`操作会清空SqlSession缓存。二级缓存作用于同一namespace下的Mapper对象,支持数据共享,需手动开启并实现序列化接口。二级缓存通过将数据存储到硬盘文件中实现持久化,为优化性能,通常在关闭Session时批量写入缓存。文章还说明了缓存的使用场景及注意事项。
1138 7
Mybatis一级缓存、二级缓存详讲
|
存储 消息中间件 druid
Druid 架构原理及核心特性详解
Druid 是一个分布式、支持实时多维OLAP分析的列式存储数据处理系统,适用于高速实时数据读取和灵活的多维数据分析。它通过Segment、Datasource等元数据概念管理数据,并依赖Zookeeper、Hadoop和Kafka等组件实现高可用性和扩展性。Druid采用列式存储、并行计算和预计算等技术优化查询性能,支持离线和实时数据分析。尽管其存储成本较高且查询语言功能有限,但在大数据实时分析领域表现出色。
3332 19
|
缓存 监控 druid
对比各大数据库连接池技术-Jdbc-Dbcp-C3p0-Druid-Hikaricp
对比各大数据库连接池技术-Jdbc-Dbcp-C3p0-Druid-Hikaricp
753 0
|
JavaScript 前端开发 IDE
【编程向导】Js与Ts差异详解:选择与权衡
JavaScript 一直是 Web 开发的基石,以其灵活性和动态性著称,但其松散类型可能导致大型项目中出现难以调试的错误。TypeScript 作为 JavaScript 的超集,通过引入静态类型系统,提供了更高的类型安全性和更好的工具支持,尤其适合大型团队和复杂项目。本文详细对比了 JavaScript 和 TypeScript 的优缺点,并提供了实际代码示例,帮助开发者根据项目需求选择合适的工具。
2167 2
|
Java 调度
HashMap为什么会死循环?
本文分析了在Java中HashMap导致死循环的原因,主要由于在JDK 1.7及之前版本中,多线程环境下进行扩容操作时,头插法导致的链表反转,以及线程调度问题,从而形成循环链表。
1930 1
HashMap为什么会死循环?
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
3148 0

热门文章

最新文章