一、数据库连接:1、短连接 2、长连接 3、连接池
二、短连接
短连接是指程序与数据库通信时建立的连接,执行操作后,马上就关闭。
短连接简单地来说,就是每次操作数据库,都要打开和关闭数据连接,基本操作是:连接,数据传输,关闭连接。
三、长连接
长连接是指程序之间的连接建立后,就一直打开,被后续程序重复使用,
使用长连接的初衷是减少连接的开销。当收到一个永久连接的请求时,检查是否已经存在一个相同的永久连接,存在则重复使用,不存在则重新建立一个连接。
四、连接池
数据库连接池是一些网络代理服务或应用服务器实现的特性,实现一个持久连接的池,允许其他程序,客户端来连接,这个连接池将被所有连接的客户端共享使用。
连接池可以加速连接,也可以减少数据连接,降低数据服务器的负载。
五、长连接和连接池的区别
长连接是一些驱动,驱动框架,ORM工具的特性,有驱动来保持句柄的打开,以便后续数据库操作可以重复使用连接,
从而减少数据库的连接开销,而连接池是应用服务器的组件,它可以通过参数来配置累计额数,连接检测,连接的生命周期等。
六、连接池
1、jdbc
DriverManagerDataSource没有实现连接池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。
所以,一般这种方式常用于开发时测试,不用于生产。
2、dbcp
spring框架推荐使用dbcp
3、c0p3
hibernate框架推荐使用c3p0。
c3p0与dbcp相比较,c3p0能够更好的支持高并发,但是在稳定性方面略逊于dpcp。
4、hikariCP
hikariCP连接池快于其他连接池的,原因是:
1、相对其他普通连接,在ConnectionProxy中使用ArrayList来存储Statement对象。
hikariCP改用Fatlist来存储对象,二其中的区别就是:ArrayList在每次执行get() 方法时,
都需要List的范围进行检查,而FastList不需要。
2.另外在Java代码中,很多关于Connection的操作,都是在使用完之后直接关闭连接,以前都是从头到尾遍历,来关闭对应的Connection,而HikariCP则是从尾部对Connection集合进行扫描,整体上来说,从尾部开始的性能更好一些。
3.内部使用一个无锁的集合来存储,并对其中的切换操作做了优化。
4.从字节码指令的角度去优化,连接池使用