1

私はRMIアプリケーションを持っています。基本的にクライアントからのすべてのリクエストは、データベースへの新しい接続を(サーバー側で)作成し、SQLクエリを実行し、データをシリアル化可能なクラスに変換してクライアントに送り返しました。

アプリのユーザー ベースが拡大し、リクエストが完了するまでに非常に長い時間がかかりました。以前のプログラマーが思いついた解決策は、サーバーから DB への固定サイズの接続プールを作成し、すべてのクライアントの要求で最も古い (最近使用されていないもの) を使用して SQL クエリを実行することでした。私の質問は次のとおりです。そのような問題を解決する正しい方法は何ですか?

4

1 に答える 1

2

接続を確立するにはコストがかかるため、DB 接続をプールすることはすでに重要なステップです。ただし、独自のプールを実装する代わりに、DBCP や C3P0 などの既存の実証済みのプールされたデータ ソース実装を使用します。サイズの変更、自動接続チェックなど、多くの便利な機能があります...

時間がかかりすぎるのがクエリ自体である場合、最適化はそれ以上に複雑になります。さまざまなアプローチが可能であり、状況の詳細によって異なります。たとえば、次のようになります。

  • あなたの質問が暗示しているように、常に同じSQLクエリは1つしかありませんか?
  • データベースは読み取り専用ですか?
  • そうでない場合、変更は同じアプリケーション内または外部で行われていますか?
  • 等...

リクエスト時間を短縮するための可能なアプローチ(私は今考えることができます):

  • Java アプリでの結果のキャッシュ (ただし、これは膨大なテーマです...)
  • SQL リクエストの最適化
  • インデックスまたはテーブル構造のより深いリファクタリングによる DB スキーマの最適化
  • クライアントに送り返すデータの量を最小限に減らします (ネットワークがボトルネックになっている場合)。

これが役立つことを願っています。より良い回答を得るには、ユースケースの詳細が本当に必要です.

于 2013-04-09T10:38:15.253 に答える