Java 数据库连接池中的每个连接都有一个线程支持吗?

Java 数据库连接池中的每个连接都有一个线程支持吗?,java,multithreading,database-connection,connection-pooling,Java,Multithreading,Database Connection,Connection Pooling,在数据库连接池中 每个连接是否对应于数据库中的一个线程 这真的重要吗?我是说,可能会有一个线程池 执行器,执行连接对象必须执行的任何操作 我想知道它是如何工作的,因为这将有助于理解这些东西实际上是如何调整的 到目前为止,我的理解是“一个连接-一个线程”。否则,为什么大多数数据库会被阻塞?连接池是客户端的功能(即Java) 连接池就是一个开放的数据库连接池。这些线程不绑定到线程,任何数量的线程都可以在任何给定时间请求池中的连接-如果连接可用,池将授予请求,如果连接不可用,则池将创建新的连接、阻

在数据库连接池中

  • 每个连接是否对应于数据库中的一个线程
  • 这真的重要吗?我是说,可能会有一个线程池 执行器,执行连接对象必须执行的任何操作
我想知道它是如何工作的,因为这将有助于理解这些东西实际上是如何调整的


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

连接池是客户端的功能(即Java)

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


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

您使用的是什么数据库管理系统?您使用的是什么java驱动程序/连接器?@kdbanman我认为了解您正在做的事情的总体情况与您可能实现的特定代码一样重要。一点抽象并不是坏事。不过为了回答你的问题,我正在与一个名为Stardog的TripleStore合作。数据库客户端,建议设置池大小。供应商给出了一些建议。但总的来说,我认为理解如何调整这些东西,需要对线程和数据库的功能有更深的理解。这取决于游泳池。在我的服务器创建的连接中,每个池连接相当于数据库中的一个线程。这就是我的“it”的特点。这并不能保证所有的“它”都是这样工作的。我想你的回答对我有帮助。很高兴能提醒我客户方面的事情。然而,我认为无论你在客户端做什么,都会受到你在服务器端做什么的影响,我认为这是有根据的。但是,它们似乎没有区分线程池和数据库上发生的事情?或者我错了,这个人只考虑客户端的线程数。尽管如此,似乎假设每个连接一个线程(在客户端),我认为说“这里的主要思想是拥有比线程更少的连接”太简单了。我分享的博客对此有更多的说明。但原因更多的是,要注意机器的架构,并与之成正比的连接数量。在这种情况下,他的意思是,每个连接都有一个线程数,这反映了你拥有的核心数,将一些公式模化以考虑到,磁盘访问和网络等等…这是最后一个让我困惑的部分,因为磁盘访问将与数据库的实际位置相关,这更像是一个服务器问题,而不是一个客户端问题,因为你似乎很小心地加以区分。