摘要
承接上篇数据库连接(1)从jdbc到mybatis,介绍下数据库连接池技术
为什么需要连接池
在上一篇中我们介绍说客户端建立一次连接耗时太长(建立连接,设置字符集,autocommit等),如果在每个sql操作都需要经历建立连接,关闭连接。不仅应用程序响应慢,而且会产生很多临时对象,应用服务器GC压力大。另外数据库server端对连接也有限制,比如MySQL默认151个连接(实际环境中一般会调大这个值,尤其是多个服务时)
现在面临的问题就是如何提高对稀缺性的资源高效管理。因为客户端与数据库的连接本质就是tcp请求,加上基于tcp协议封装的mysql请求。那么通常解决这类问题,我们有两种方式,一种是池话技术,即使用一个容器,提前创建好连接,请求时直接从池子里面拿,另外一种就是利用IO多路复用技术。利于在spring5中,mongo ,cassandra等数据库的访问就可以利用reactive来实现了,但是关系型数据库不行,原因在于关型数据库的访问目前都是基于JDBC,JDBC操作数据库的流程,建立connection,构建Statement,执行这一套是串行的,阻塞型。一个事务中的多个操作只能在同一个连接中完成。所以不能使用IO多路复用技术,是受限于JDBC的阻塞。对于其他语言,是可以的,比如nodejs
所以我们使用池话技术来提供数据库访问
数据库连接池与线程池的区别
通常,程序员在业务开发中经常使用的是线程池,利用CPU多核,来并发处理任务,提高效率。数据库连接池与线程池同属于池化技术,没有太大区别,都是需要管理池的大小,资源控制。不同的数据库连接池中放的是connection,同时还需要管理事务,所以通常数据库连接池中会对这个进行优化
从连接池中取连接执行sql操作,多了两步设置connection autocommit属性操作

通过将connection分成两组,来提供效率

开源连接池技术介绍

一个基本的数据库连接池包括几大部分
-
取出连接
-
放回连接
-
异步/同

本文探讨了为何C3P0数据库连接池在高并发场景下性能较差的原因,分析了连接池与线程池的异同,介绍了C3P0、DBCP的不足之处,以及Druid和HikariCP的高性能优化策略。通过对并发容器实现的讨论,揭示了锁机制对性能的影响,并建议关注并发控制在数据库连接池中的重要性。
最低0.47元/天 解锁文章
254

被折叠的 条评论
为什么被折叠?



