2012-02-27 10 views
0

これは複数の質問ですので、私にご負担ください。複数のサーブレットからのリモートデータベース接続プーリング

私はJavaサーブレットを使ってWebベースのアプリケーションを開発しています。システムの負荷を分散する複数のアプリケーションサーバーが存在します。これらのサーバーは、中央のリモートデータベースにアクセスします(いずれもLANにはありません)。システムの要件の1つは、新しいアプリケーションサーバーをネットワークに動的に追加し、データベースに接続してすぐに要求を処理できるようにすることです。

私の質問:

  • セットアップするには、リモートのMySQLデータベースサーバは、私は外部の接続を許可するように、いくつかの設定ファイルを変更する必要があります。これらのファイルはどれですか?また、実際に起動するまでIPアドレスがわからない新しい追加サーバーの場合は、それらを即座に変更できますか?
  • リモートデータベースアクセスの場合、接続プーリングを使用する必要がありますか?接続プーリングはサーブレットごとに個別に実行されますか?新しく追加されたサーバーのプール規模はどのくらいになりますか(より多くの要求)?
  • アプリケーションサーバーへの各要求は、複数の別々のデータベース呼び出し(例:検出と更新)を経由します。これらの操作で同じ接続を使用するか、毎回解放する必要がありますか?

あなたは

+0

JEE/JPAを見ていない理由は何ですか?これは、あなたのためのこれらの懸念(半)を自動的に処理します。 – Perception

+0

当初、SOAP Webサービスを使用して説明しましたが、オーバーヘッドが大きすぎます。私たちのアプリケーションはjspを提供しません。 HTTP応答には、クライアントアプリケーション上のオーディオファイルに変換されるバイトストリームが含まれています。応答は可能な限り軽くする必要があります。それは本当にここでの問題ではありません。 JPAのJPQLがリモート・データベースに接続するチュートリアルにリンクできますか? –

+0

複数の質問をしないことをお勧めします。 –

答えて

1

私は、MySQLについて多くを知らないありがとう、私は最初の部分に応答しません。

しかし、はい、間違いなく接続プールを使用する必要があります。離れたデータベースの場合、接続のセットアップ時間は近くのデータベースよりもさらに悪くなるため、接続の再利用がさらに重要になります。

プールは、好きなように設定できますが、通常はサーバごとに設定できるため、特定のサーバのすべてのサーブレットで共有されます。プールの最大サイズを設定すると、データベースでの接続の合計数はサーバーの数に比例します。これは注意が必要なことです。大規模なクライアントではプールサイズが不適切なため、データベースが数回ダウンするのが見られました。

はい、各リクエストの継続時間(たぶん)ごとに単一の接続を再利用する必要があります。初心者にとっては、ほとんどの場合、リクエスト全体で単一のトランザクションを使用したい場合は、これを行う必要があります。それとは別に、接続の取得と解放は無料ではないため、再利用すると、複数の操作でコストが償却されます。

1つの注意点:リクエストの存続期間中接続を保持すると、各操作のために必要なプールサイズが増加し、解放される可能性があります。通常、それは良いトレードオフです。しかし、あなたが接続の数によって厳しく制限されている場合、それはそうではないかもしれません。要求がどれくらい持続するか、データベースの作業量、使用された接続の使い勝手を向上させるために、時間がかかります。データベースを参照せずに生成できる膨大なメディアストリームを処理している場合、アプリケーションがこのパターンに適合しない可能性があります。

最後の点:データベースが遠くにある場合は、キャッシュよりも通常より多くのメリットがあります。中央データベースへの移動を避けるために、各サーバーにキャッシュするか、ローカルデータベースに格納することができます。