誰かが接続とステートメントのプーリングとは何か、またプールされていないデータソースよりも優れている点を説明できますか? プロジェクトで c3p0 や proxool などのテクノロジーを使用するのが良いアイデアである場合を理解しようとしています。まず、それらが何をするのか、いつそれらを使用するのが興味深いのかを理解する必要があります。どうもありがとうございました。
5 に答える
ハッピーコネクション
毎回新しい接続を作成するのはとても簡単です。1 行:それだけです。考えることはあまりありません。素晴らしい人生。
持続する。お皿で食べますか?
お皿は使い終わったら捨てますか?
いいえ、洗って食器棚に置くので、次の食事で再び使用できます。毎回新しいプレートを購入することは問題外です。そんなことをしたら、1 年で新しい iPad を買うのに十分なお金を無駄にしてしまうことになります。
接続プールについてもう一度考えてみてください。
しかし今回は、接続が皿であり、接続プールがディッシュ ラックです。ウォレットとエネルギーは、システム リソース (メモリと帯域幅) を表します。
洗うか使うか?
あなたはむしろ何をしたいですか:
a. 皿を洗う
b. それとも食事のたびにモールに行って新しい皿を買いますか?
接続プーリングにはタスクが伴いますが、毎回新しい接続を作成するよりも、長期的には負担が少なくなります。重要なのは、家族 (アプリケーション) が特定の日に必要とするプレート (接続) の数を知ることです。
プールは、データベース接続、スレッド、エンティティ Bean、およびその他のファクトリ派生オブジェクトに使用できます。
データベース サーバーへのネットワーク接続の作成には、(比較的) コストがかかります。同様に、サーバーに SQL ステートメントの準備を依頼するのは (比較的) コストがかかります。
接続/ステートメント プールを使用すると、既存の接続/準備済みステートメントを再利用して、接続の開始や SQL の解析などのコストを回避できます。
私は c3p0 に詳しくありませんが、接続とステートメントをプールする利点には次のようなものがあります。
パフォーマンス。データベースへの接続はコストがかかり、低速です。プールされた接続は、データベースに物理的に接続したままにし、データベースへのアクセスを必要とするさまざまなコンポーネント間で共有できます。そうすれば、接続コストは一度支払われ、消費するすべてのコンポーネントで償却されます。
診断。データベースへの接続を担当するサブシステムが 1 つある場合、データベース接続の使用状況の診断と分析が容易になります。
保守性。繰り返しになりますが、データベース接続の配布を担当するサブシステムが 1 つある場合は、各コンポーネントがデータベース自体に接続されている場合よりも、コードの保守が容易になります。
データベースへの接続と切断は、コストのかかる操作です。プーリングを使用すると、コードを記述して接続を開閉できますが、プールは実際にいつそれを行うかを決定し、一定数の接続を一定時間開いたままにします。
ステートメントのプーリング? ステートメントキャッシングについて話しているのですか?
Java Persistance with Hibernateという本の引用
プールを使用する理由は 3 つあります。
新しい接続の取得にはコストがかかります。データベース管理システムの中には、接続ごとにまったく新しいサーバー プロセスを開始するものさえあります。
多くのアイドル状態の接続を維持することは、データベース管理システムにとってコストがかかります。プールは、アイドル状態の接続の使用を最適化できます (または、要求がない場合は切断します)。
一部のドライバーでは、準備済みステートメントの作成にもコストがかかります。また、接続プールは、複数の要求にまたがる接続のステートメントをキャッシュできます。