【MYSQL】数据库连接池技术
为什么需要连接池
在数据库客户端经过网络与数据库服务端连接时候,需要经历TCP协议的三只握手这个耗时的过程,每次查询一次连接上,返回数据即断开连接,下次再次查询又得重复刚刚的操作,基本步骤是:客户端发起连接请求 → 数据传输 → 关闭连接。每一次这样的连接叫做短连接,而且连接的成本很高,在网络拥塞的情况下会更加耗时。
当并发量很低的时候,连接可以临时建立,但当服务吞吐达到几百、几千的时候,频繁 建立连接 Connect
和 销毁连接 Close
就有可能会成为MYsql服务器的一个瓶颈,那么当MYsql服务器启动的时候,先建立好若干个连接并存放于一个队列中,当需要使用时从队列中取出一个并使用,使用完后再反还到队列去,而对这个队列数据结构进行维护的,就是连接池。
成熟的开源连接池项目
1. Apache commons-dbcp 连接池
2. HikariCP
项目地址:https://github.com/brettwooldridge/HikariCP
HikariCP是日本开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。
HikariCP的高性能
1. 字节码更加精简,所以可以加载更多代码到缓存。
2. 实现了一个无锁的集合类型,来减少并发造成的资源竞争。
3. 使用了自定义的数组类型,相对与ArrayList极大地提升了性能。
4. 针对CPU的时间片算法进行优化,尽可能在一个时间片里面完成各种操作。
3. Druid