什么是数据库池?

我只想知道数据库连接池的概念以及如何实现。

数据库连接池是一种用于保持数据库连接打开的方法,以便其他人可以重用数据库连接。

通常,打开数据库连接是一项昂贵的操作,特别是在数据库处于远程的情况下。 您必须打开networking会话,进行身份validation,检查授权等。 共享池保持连接处于活动状态,以便稍后请求连接时,将使用其中一个活动连接,而不是必须创build另一个活动连接。

请参考下面的几段:

+---------+ | | | Clients | +---------+ | | |-+ (1) +------+ (3) +----------+ | Clients | ===#===> | Open | =======> | RealOpen | | | | +------+ +----------+ +---------+ | ^ | | (2) | /------\ | | Pool | | \------/ (4) | ^ | | (5) | +-------+ (6) +-----------+ #===> | Close | ======> | RealClose | +-------+ +-----------+ 

最简单的forms就是类似于“真实”API调用的类似API调用(1)。 首先检查池是否有合适的连接(2),如果可用,则将其提供给客户端。 否则创build一个新的(3)。

同样,有一个closures的API调用(4),实际上并没有调用真正的closures连接,而是将连接放入池(5)中供以后使用。 在某些时候,游泳池中的连接可能实际上是closures的(6)。

这是一个非常简单的解释。 真正的实现可能能够处理到多个服务器和多个用户帐户的连接,它们可以预先分配一些连接的基线,以便一些立即准备好,并且当使用模式平息下来时,它们实际上可以closures旧的连接。

图片说一千个字(paxdiablo给了一个真棒描述):

替代文字

资源

你可以透明地使用apache commons库来实现连接池的实现: http : //commons.apache.org/dbcp/

DBCP也是支持的Hibernate池: http : //www.informit.com/articles/article.aspx? p=353736&seqNum =4

连接池概念不仅在Java中,而且在许多编程语言中。 创build一个新的连接对象代价昂贵,因此在生命周期中创build并维护固定数量的连接以创build虚拟池Java Just( http://javajust.com/javaques.html )请参阅本页的问题14