来自多个servlet的远程数据库连接池

时间:2012-02-27 21:45:10

标签: java mysql database servlets connection-pooling

这是一个多部分问题,所以请耐心等待。

我正在使用java servlet开发基于Web的应用程序。将有多个应用程序服务器来对系统进行负载平衡。这些服务器访问中央远程数据库(它们都不在LAN中)来执行请求。系统的一个要求是能够动态地将新的应用服务器添加到网络,并使其能够连接到数据库并立即开始处理请求。

我的问题:

  • 要设置远程MySQL数据库服务器,我需要修改一些配置文件以允许外部连接。哪些文件是这些文件,如何在实际启动之前为新添加的IP地址未知的服务器动态修改它们?
  • 对于远程数据库访问,我应该使用连接池吗?是否为每个servlet单独完成连接池?如何为新添加的服务器扩展池(更多请求)?
  • 对应用程序服务器的每个请求都经过多个单独的数据库调用(例如:查找和更新)。我是应该在这些操作中使用相同的连接还是每次都释放它?

谢谢

1 个答案:

答案 0 :(得分:1)

我对MySQL知之甚少,所以我不会回答第一部分。

但是,你应该使用连接池。对于远程数据库而言,连接建立时间将比附近的数据库更糟糕,因此重用连接更为重要。

可以根据需要配置池,但通常是每个服务器,因此它们将由给定服务器中的所有servlet共享。如果为池配置最大大小,则数据库中的连接总数将与服务器数成比例。这是需要注意的事项 - 由于大量客户群中的池大小不合适,我看到数据库出现了几次下降。

是的,您应该在每个请求的持续时间内重复使用单个连接(可能)。对于初学者,如果要在整个请求中使用单个事务,则必须执行此操作,您几乎肯定会这样做。除此之外,获取和释放连接不是免费的,因此重复使用可以分摊多个操作的成本。

一个警告:在请求的生命周期中保持连接可能会增加必要的池大小而不是为每个操作抓取和释放。通常,这是一个很好的权衡。但是如果你受到连接数量的严重限制,它可能不是。它在某种程度上取决于您的请求持续多长时间,以及它们执行多少数据库工作,以及更短,更繁忙的请求,从而更好地利用重用连接。如果您正在提供可以在不参考数据库的情况下生成的大型媒体流,那么您的应用程序可能不适合这种模式。

最后一点:如果您的数据库距离很远,那么您将从缓存中受益更多。仔细查看是否有数据可以有效地缓存,甚至存储在每个服务器的本地数据库中,以避免访问中央数据库。