我正在构建一个基于Java的Web应用程序(主要是使用Tomcat部署的JSP)。用户数量永远不会超过30人。它是一个工作日志,因此用户将不断更新/访问数据库(SQL Server)。 Web应用程序中有许多方法需要连接到数据库。
每次需要时我都会打开一个新的连接(我也适当地关闭它),但这似乎很多连接的打开/关闭。连接池是否适用于这种情况?我试图理解游泳池的作用,但我很困惑;每个用户都会有一个连接池吗?
如果我偏离轨道(我怀疑自己),那么这个问题有更好的解决方案吗?有没有问题?
谢谢!
答案 0 :(得分:2)
是的,我会为30个连接调整池的大小并让它管理它们。您可以通过这种方式分摊在所有请求上打开连接的成本。
有一个池可供许多用户访问以获取连接;每个请求一个连接。
答案 1 :(得分:2)
连接池用于应用程序(不是每个用户)。连接池的概念是尽可能地重用开放连接,并在绝对需要时打开一个新连接。在cpu周期和内存方面,打开与数据库的连接是一项昂贵的操作。这就是为什么需要连接池。对于30个用户,我建议使用连接池。
您可以将池的大小设置为池中15到30个连接之间的任何位置。
答案 2 :(得分:1)
您当然可以将连接池连接到数据库。通常,每个数据库使用一个池(尽管可能有更多的原因)。
你是否有权问是否有问题。连接池将减少必须协商的新连接的数量,因此它将减少服务请求所花费的时间,并减少服务器上的负载。此外,它还将减少使用的插座数量(对于较大的应用程序),这可能是系统性能的一个因素。
但是:您是否遇到了您要解决的性能问题?响应时间是否可接受?负载可以接受吗?平衡您在性能和开发成本方面的收益。存在预构建的连接池,因此可以很容易地集成一个。但它不是免费的,优化通常应该用特定的目标来完成,而不是“因为我应该”。
答案 3 :(得分:1)
这里的要点是用户数量减少,但需要打开连接的请求数量。
如果你有
for (int i = 0; i < 1000 ; i ++ ) {
Connection c = getConnection();
dosomwthingWith(c);
c.close();
}
您仍然可以从连接池中受益,因为c.close()
并未真正关闭连接,只是将其重新放回池中。