データベースプーリングとは何ですか?


回答:


217

データベース接続プーリングは、他のユーザーが再利用できるようにデータベース接続を開いたままにするために使用される方法です。

通常、データベース接続を開くことは、特にデータベースがリモートである場合、負荷の高い操作です。ネットワークセッションを開いたり、認証したり、承認を確認したりする必要があります。プーリングは接続をアクティブに保ち、後で接続が要求されたときに、アクティブな接続の1つを使用して、別の接続を作成する必要がないようにします。

次のいくつかの段落については、次の図を参照してください。

  +---------+
  |         |
  | Clients |
+---------+ |
|         |-+  (1)   +------+   (3)    +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
|         |    |     +------+          +----------+
+---------+    |         ^
               |         | (2)
               |     /------\
               |     | Pool |
               |     \------/
           (4) |         ^
               |         | (5)
               |     +-------+   (6)   +-----------+
               #===> | Close | ======> | RealClose |
                     +-------+         +-----------+

最も単純な形式では、「実際の」呼び出しに似たオープン接続API呼び出しに似たAPI呼び出し(1)です。これはまず、適切な接続(2)があるかどうかプールをチェックし、利用可能な場合は、それがクライアントに与えられます。そうでなければ、新しいものが作成されます(3)。

「適切な接続は」ちょうどもう一つ有する(例えば、データベース・インスタンス、資格情報、およびおそらく他のもののような)正しい情報を使用してデータベースにアクセスします。

同様に、実際に呼び出すことはありません近いAPIの呼び出し(4)がありますリアルクローズ接続は、むしろそれは、後で使用するためにプール(5)への接続を置きます。ある時点で、プール内の接続が実際に閉じられることがあります(6)。

これはかなり単純な説明です。実際の実装では、複数のサーバーと複数のユーザーアカウントへの接続を処理でき、接続のベースラインを事前に割り当てて、すぐに使用できるようにし、使用パターンが静まると実際に古い接続を閉じる場合があります。


9
あなたはどこから素敵な小さなグラフを持っていますか?
Adrian Grigore、

19
私は一から作りました(ばかげた)。きちんとしたグラフィックスを見たい場合は、zengrの答えを見てください。
paxdiablo 2010年

1
1つが利用可能な場合、それはクライアントに提供され、それ以外の場合は新しいものが作成されます。同様に、実際の実際の接続を実際に呼び出すのではなく、後で使用するために接続をプールに入れる、閉じるAPI呼び出しがあります。これについての言及として、私はほとんど質問がありません。1000クライアントが接続を要求し、閉じられていない場合。したがって、1000接続はプールで有効です。これはプールのパフォーマンスに適していますか?そして、私の理解が少し間違っていることを教えてください?
Ye Win

@YeWin、いいですね。1000の接続がプールに残っているという質問に答えてください。それは起こり得ますが、一般に、ある時点で1000の同時アクティブ接続が発生した場合に限られます。それ以外の場合は、再利用が発生し、1000に到達しません。このことに関しては、最後から2番目の段落を参照してください。
paxdiablo 2015年

1
@DiegoMariani、私が手作業で行った場合よりも遅く、MS Wordを強制してより簡単にしようとする場合よりも速く:-)
paxdiablo

104

画像は千の言葉を話します(paxdiabloは素晴らしい説明をしました):

代替テキスト

ソース


35
そして、どうやら、優れた画像は数百のアスキーアートも
物語っ

@sagarが最も役立つと思われる回答を選択してください。受理記録がありません。
zengr

1
プールで4つの接続を確認しました。接続数は、このプールではプールタイプによって制限されていますか?クライアントは接続を待つ必要がありますか?
Ye Win

1
@DEADEND接続プールの実装方法によって異なります。ほとんどのプールは、接続が最大容量に達すると、新しい接続を作成します。これは、dbがしきい値に達するまで成長を続けることができます。(oracle jdbcのような)場合によっては、プールの構築中に「初期サイズ」と「最大サイズ」を指定できます。
zengr 2017

2
残念ながら、画像は最も重要なことを言っていません。つまり、10、20、30、...の接続数を開いたままにしておくと、必要なときに1つの接続を開くよりも、メモリとシステム全体のパフォーマンスが低下するのはなぜですか。それはどうですか?30対1の方が低コストですか?どうやって?
グリーン

16

その名のとおり。少数の人が泳ぎたい場合、同じスイミングプールで泳ぐことができます。誰かが追加するたびに新しいスイミングプールを構築することは本当に意味がありますか?時間とコストが優先事項です。


7

データベース接続プールは、データベースへの接続をキャッシュするだけなので、次回データベースを再利用して、データベースに接続するたびに新しい接続を確立するコストを削減できます。



1

接続プーリングの概念は、Javaだけでなく、多くのプログラミング言語にまたがっています。新しい接続オブジェクトの作成にはコストがかかるため、固定数の接続が作成され、ライフサイクルで維持され、仮想プールが作成されます。JavaJusthttp://javajust.com/javaques.html)このページの質問14を参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.