1.连接池的概念 网络编程中提出了将Socket放入池中,让多个线程共享这些插座(Socket)对应的线缆(Conenction),DB连接池就是基于连接池的一个实现。 ①连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。 @百度百科 ②数
1.连接池的概念
网络编程中提出了将Socket放入池中,让多个线程共享这些插座(Socket)对应的线缆(Conenction),DB连接池就是基于连接池的一个实现。
①连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。
@百度百科
②数据库连接池这一解决方案是指在应用程序启动时,建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态的对池中的连接进行申请/使用/释放。
而对于多于连接池中连接数的并发请求,应在请求队列中排队等待连接的释放。
应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数。
@http://www.myexception.cn/program/1053611.html
③连接池是一个进程
多个连接在同一个进程里面存储管理,该进程保存了所有的连接。当我们打开连接,如果有未用的连接可用,则返回该连接。如果池中连接都被占用了,则创建一个新的连接保存到连接池。
但我们关闭连接的时候,连接池里面并不关闭连接,而是将连接返回到连接池中并标记为可重用的状态,等待重新连接直到等待超时。再次打开连接的时候,我们就可以重用上次的连接。如果在这个时间内没有连接请求(打开连接),这个数据库连接将被关闭,并从连接池中移除这个连接实例。
如果池中连接达到了最大连接数,连接请求将进入等待队列,直到有空闲连接可用。
如果在可获取链接对象之前超时期限已过(由Connection Timeout连接字符串属性来决定),将出错。
④该进程保存连接,并使连接处于活动状态,使得连接可以被重复使用
应用程序访问底层数据源是通过操作系统的数据访问组件或Sql Client数据访问提供程序实现的。连接池是在这些组建之上建立的,存在于应用程序的进程之中。因此,重用连接就是在进程之中重用。
例如:两个WinForm程序在不同的计算机上,他们同时连接一个数据库服务器,这个时候,连接池就没办法起作用,因为连接池是一个进程里面。这时候,我们可以在数据库服务器上层搭建一个Web Service,而Web Service 和数据库服务器之间使用的是连接池,数据库服务器的压力就会小。
@http://blog.gaodaima.com/gtosky4u/article/details/48970591
2.没有连接池之前如何访问DB:
– 建立物理通道(例如套接字或命名管道)
– 与服务器进行初次握手
– 分析连接字符串信息
– 由服务器对连接进行身份验证
– 运行检查以便在当前事务中登记(连接的环境是不是分布式事务)
以下引用@http://blog.gaodaima.com/b_h_l/article/details/8805340
连接池的前世:通过JDBC访问DB:
一般来说,Java应用程序访问数据库的过程(如图1所示)是:
7. 谁在提供连接池:
7.1 应用服务器提供连接池,tomcat通过jndi先初始化好连接池。将来应用程序通过jndi去找对应的连接池获取连接。
7.2.C3P0,DBCP. DBCP是采用装饰模式来覆盖close。
参考:
http://www.zclw.net/article/sort040/sort043/info-170013.html
http://blog.gaodaima.com/driverking/article/details/6741348
连接池优点:
1)通过数据库连接池,应用程序可以重用池中现有的连接中现有的连接,而不必反复与数据库建立新的连接。
2)使用连接池可显著提高应用程序的可伸缩,因为有限数量的数据库连接可以为数量大得多的客户端提供服务。例如:数据库应用里面,上万的用户可能只需要少量的连接,因为客户端不可能同时并发的大量的访问数据库。故少量的连接可以支持大量的服务,提高程序的可伸缩性。
3)同时,由于可以节省建立新连接所需的大由于可以节省建立新连接所需的大量时间,使用连接池还能够改善性能。
4)连接池对于应用程序来说是透明的,例如:conn.Open() 和 conn.Close()。