什么是数据库池?


Answers:


217

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

通常,打开数据库连接是一项昂贵的操作,尤其是在数据库是远程的情况下。您必须打开网络会话,进行身份验证,检查授权等。池化使连接保持活动状态,以便在以后请求连接时,优先使用活动的连接之一,而不必创建另一个连接。

接下来的几段内容请参考下图:

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

在最简单的形式中,它只是与开放式API调用类似的API调用(1),类似于“真实”调用。这首先检查池中是否有合适的连接(2),如果有可用的连接,则将其提供给客户端。否则,将创建一个新的(3)。

“合适的连接”仅仅是一个已经拥有访问使用正确的信息(如数据库实例,凭证,以及其他可能的事情)数据库。

类似地,有一个关闭API调用(4),它实际上并未调用真正的关闭连接,而是将连接放入池(5)中供以后使用。在某个时候,池中的连接可能实际上已关闭(6)。

这是一个非常简单的解释。实际的实现可能能够处理与多个服务器和多个用户帐户的连接,它们可能会预先分配一些连接基线,以便立即进行准备,并且在使用模式趋于平静时,它们实际上可能会关闭旧连接。


9
您从哪里获得漂亮的小图?
阿德里安·格里戈里

19
我是从头开始制作的(对不起,我)。如果您想查看一些不错的图形,请查看zengr的答案。
paxdiablo

1
如果有一个可用的,则将其提供给客户端,否则将创建一个新的。类似地,存在一个close API调用,它实际上并不调用真正的close-connection,而是将连接放入池中以供以后使用。就像您提到的那样,我毫不怀疑。当1000个客户端请求连接并且未关闭时。因此,池中有1000个连接处于活动状态。这将有助于提高池性能?并让我知道我的理解没有错吗?
Ye Win

@YeWin,听起来不错。再问一下有关池中剩余1000个连接的问题,这种情况可能会发生,但是通常只有在某个时候最终有1000个并发活动连接时才会发生。否则,将会被重用,并且不会达到1000。关于这种情况,请参阅我的倒数第二段,特别是“当使用模式平静下来时,实际上可能会关闭旧连接”位。
paxdiablo 2015年

1
@DiegoMariani,比我手工完成要慢,比我要强迫MS Word使其变得更容易的速度要快:-)
paxdiablo 2016年

104

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

替代文字

资源


35
显然,好的图像也可以说出几百种ASCII艺术:-)
paxdiablo

@sagar,请选择您认为最有用的答案。您没有接受记录。
zengr 2010年

1
我在Pool中看到了4个连接。所以该连接池中的连接数受池类型的限制?或者当Pool中的连接不空闲时会发生什么?客户端需要等待免费连接吗?
Ye Win

1
@DEADEND实际上取决于连接池的实现方式。当连接达到最大容量时,大多数池会创建一个新连接。这可以持续增长,直到数据库达到阈值为止。在某些情况下(例如oracle jdbc),您可以在池构建过程中指定“初始大小”和“最大大小”。
zengr

2
不幸的是,图像并没有说明最重要的事情。那就是:为什么在需要时保持10、20、30,...个打开的连接数比打开一个连接对内存和整个系统性能的花费要小?怎么可能 30比1便宜吗?怎么样?
绿色,

16

顾名思义。如果有几个人想游泳,他们可以在同一个游泳池里游泳,那么每次有人增加一个新的游泳池真的有意义吗?时间和成本是重中之重。


7

数据库连接池只是将与数据库的连接缓存起来,以便下次可以重用它们,以减少每次我们要连接到数据库时建立新连接的成本。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.