【发布时间】:2011-05-01 18:21:29
【问题描述】:
我只是想知道数据库连接池的概念以及它是如何实现的。
【问题讨论】:
标签: database database-connection connection-pooling
我只是想知道数据库连接池的概念以及它是如何实现的。
【问题讨论】:
标签: database database-connection connection-pooling
数据库连接池是一种用于保持数据库连接打开以便其他人可以重用的方法。
通常,打开数据库连接是一项昂贵的操作,尤其是在远程数据库的情况下。您必须打开网络会话、进行身份验证、检查授权等等。池化使连接保持活动状态,以便在稍后请求连接时,使用其中一个活动连接,而不是必须创建另一个连接。
接下来的几段请参考下图:
+---------+
| |
| Clients |
+---------+ |
| |-+ (1) +------+ (3) +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
| | | +------+ +----------+
+---------+ | ^
| | (2)
| /------\
| | Pool |
| \------/
(4) | ^
| | (5)
| +-------+ (6) +-----------+
#===> | Close | ======> | RealClose |
+-------+ +-----------+
在最简单的形式中,它只是一个类似于“真实”的开放连接 API 调用的 API 调用 (1)。这首先检查池中是否存在合适的连接 (2),如果可用,则将其提供给客户端。否则会创建一个新的 (3)。
“合适的连接”只是一个已经拥有使用正确信息(例如数据库实例、凭据和可能的其他信息)访问数据库的连接。
同样,有一个关闭 API 调用 (4),它实际上并不调用 real 关闭连接,而是将连接放入池 (5) 以供以后使用。在某些时候,池中的连接可能实际上关闭 (6)。
这是一个非常简单的解释。真正的实现可能能够处理与多个服务器和多个用户帐户的连接,它们可能会预先分配一些连接基线,以便立即准备好一些连接,并且当使用模式平静下来时,它们实际上可能会关闭旧连接。
【讨论】:
数据库连接池只是缓存到数据库的连接,以便下次可以重用它们,以减少每次我们要连接到数据库时建立新连接的成本。
【讨论】:
顾名思义。如果几个人想游泳,可以在同一个游泳池游泳,每次有人加入就建一个新的游泳池真的有意义吗?时间和成本是重中之重。
【讨论】:
连接池概念不仅适用于 Java,而且适用于许多编程语言。创建一个新的连接对象成本很高,因此在创建虚拟池的生命周期中建立和维护固定数量的连接 Java Just (http://javajust.com/javaques.html) 请参阅此页面上的问题 14
【讨论】:
图片说出一千个单词(paxdiablo 给出了很棒的描述):
【讨论】: