1

我有一个 RMI 应用程序,基本上来自客户端的每个请求都创建了一个到数据库的新连接(在服务器端),运行 SQL 查询并将数据转换为可序列化的类,然后发送回客户端。

该应用程序的用户群不断增长,请求需要很长时间才能完成。以前的程序员提出的解决方案是创建一个从服务器到数据库的固定大小的连接池,每个客户端的请求都使用最旧的(最近最少使用的)来运行 SQL 查询。我的问题是:解决此类问题的正确方法是什么?

4

1 回答 1

2

我想说,汇集数据库连接已经是一个重要的步骤,因为建立一个连接是昂贵的。但是,我不会使用我自己的池,而是使用现有且经过验证的池化数据源实现,例如 DBCP 或 C3P0。它们具有许多有用的功能,例如不同的大小、自动连接检查等...

如果是查询本身占用的时间太长,那么优化会比这更复杂。各种方法都是可能的,具体取决于情况的细节,例如:

  • 正如您的问题似乎暗示的那样,是否只有一个 SQL 查询,总是相同的?
  • 数据库是只读的吗?
  • 如果没有,修改是在同一个应用程序内进行还是在外部进行?
  • ETC...

减少请求时间的可能方法(我现在能想到的):

  • 在 java 应用程序中缓存结果(但这是一个庞大的主题......)
  • SQL请求的优化
  • 优化数据库架构,使用索引或更深入地重构表结构
  • 将发送回客户端的数据量减少到最低限度(以防网络成为瓶颈)

我希望这有帮助。我们确实需要有关用例的更多详细信息,以便为您提供更好的答案。

于 2013-04-09T10:38:15.253 回答