1

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

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

如果我偏离了轨道(我怀疑我是),那么有没有更好的解决这个问题的方法?甚至有问题吗?

谢谢!

4

4 回答 4

2

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

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

于 2011-05-02T19:44:50.407 回答
2

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

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

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

于 2011-05-02T19:45:15.463 回答
1

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

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

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

于 2011-05-02T19:48:33.133 回答
1

这里的重点不是用户数量,而是需要打开连接的请求数量。

如果你有

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

您仍然会从连接池中受益,因为它c.close()并没有真正关闭连接,而只是将其放回池中。

于 2011-05-02T19:48:33.507 回答