每个连接是否由数据库连接池中的一个线程支持?

时间:2015-10-29 19:19:40

标签: java multithreading database-connection connection-pooling

在数据库连接池中,

  • 每个连接是否对应数据库中的1个线程?
  • 这真的很重要吗?我的意思是,可能有一个threadPool 执行者,执行对象必须执行的任何连接?

我想知道它是如何工作的,因为这有助于理解这些事情是如何实际调整的。

到目前为止,我的理解是“一个连接 - 一个线程”。否则为什么大多数数据库会阻塞?

1 个答案:

答案 0 :(得分:3)

连接池就是客户端(即Java)中的连接池。

连接池就是这样 - 一个到数据库的开放连接池。这些没有绑定到线程,任何数量的线程都可以在任何给定时间从池请求连接 - 如果连接可用,池将授予请求,如果没有,它将创建一个新的,阻止或拒绝请求(取决于实施)。这里的主要想法是比线程更少的连接,另一个目的是保持这些连接打开如果有很多短数据库操作(创建数据库连接)这是一项昂贵的操作。)

在服务器端,这取决于数据库实现。我希望大多数数据库服务器每个连接使用一个线程 - 毕竟有人必须在开放的套接字上监听。对于许多数据库引擎,这可能要复杂得多,例如,可能有一个模块在套接字上侦听,然后将查询发送到另一个可能运行不同线程数的模块。