2013-04-09 77 views
1

我有一个RMI应用程序, 基本上来自客户端的每个请求,在数据库上创建了一个新的连接(在服务器端),一个SQL查询并将数据转换为一个可序列化的类被送回给客户。了解Java的良好实践rmi

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

回答

2

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

如果查询istself占用时间过长,优化将比这更复杂。各种方法都是可能的,取决于具体情况,例如:

  • 是否只有一个SQL查询,总是与您的问题似乎暗示的SQL查询相同?
  • 数据库是否只读?
  • 如果不是,在相同的应用程序或外部进行的修改?
  • 等...

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

  • 结果在Java应用程序的缓存(但是这是一个庞大的问题...)
  • 优化的SQL请求的数据库架构的
  • 优化的,带有索引或表结构
  • 的更深层次的重构减少数据本身的量nt回到客户端只是最低限度(万一网络是瓶颈)

我希望这有助于。我们真的需要更多关于用例的细节来给你更好的答案。

+0

谢谢,这真的是我在找什么,顺便说一句,有很多不同的SQL查询,不只是只读。并且所有对服务器的调用都由这个1 rmi应用程序完成。 – user1333057 2013-04-09 13:01:44