连接池:是否合适

时间:2011-05-02 19:42:44

标签: java database tomcat connection pool

我正在构建一个基于Java的Web应用程序(主要是使用Tomcat部署的JSP)。用户数量永远不会超过30人。它是一个工作日志,因此用户将不断更新/访问数据库(SQL Server)。 Web应用程序中有许多方法需要连接到数据库。

每次需要时我都会打开一个新的连接(我也适当地关闭它),但这似乎很多连接的打开/关闭。连接池是否适用于这种情况?我试图理解游泳池的作用,但我很困惑;每个用户都会有一个连接池吗?

如果我偏离轨道(我怀疑自己),那么这个问题有更好的解决方案吗?有没有问题?

谢谢!

4 个答案:

答案 0 :(得分:2)

是的,我会为30个连接调整池的大小并让它管理它们。您可以通过这种方式分摊在所有请求上打开连接的成本。

有一个池可供许多用户访问以获取连接;每个请求一个连接。

答案 1 :(得分:2)

连接池用于应用程序(不是每个用户)。连接池的概念是尽可能地重用开放连接,并在绝对需要时打开一个新连接。在cpu周期和内存方面,打开与数据库的连接是一项昂贵的操作。这就是为什么需要连接池。对于30个用户,我建议使用连接池。

您可以将池的大小设置为池中15到30个连接之间的任何位置。

看看http://commons.apache.org/dbcp/

答案 2 :(得分:1)

您当然可以将连接池连接到数据库。通常,每个数据库使用一个池(尽管可能有更多的原因)。

你是否有权问是否有问题。连接池将减少必须协商的新连接的数量,因此它将减少服务请求所花费的时间,并减少服务器上的负载。此外,它还将减少使用的插座数量(对于较大的应用程序),这可能是系统性能的一个因素。

但是:您是否遇到了您要解决的性能问题?响应时间是否可接受?负载可以接受吗?平衡您在性能和开发成本方面的收益。存在预构建的连接池,因此可以很容易地集成一个。但它不是免费的,优化通常应该用特定的目标来完成,而不是“因为我应该”。

答案 3 :(得分:1)

这里的要点是用户数量减少,但需要打开连接的请求数量。

如果你有

 for (int i = 0; i < 1000 ; i ++ ) { 
       Connection c = getConnection();
       dosomwthingWith(c);
       c.close();
 }

您仍然可以从连接池中受益,因为c.close()并未真正关闭连接,只是将其重新放回池中。