1. ホーム
  2. database

[解決済み] データベースプーリングとは何ですか?

2022-04-21 10:18:39

質問

データベース接続プーリングの概念とその実現方法を知りたいのです。

どのように解決するのですか?

データベース 接続 pooling は、データベース接続を開いたままにしておき、他の人が再利用できるようにするための手法です。

一般的に、データベース接続を開くことは、特にデータベースが遠隔地にある場合、コストのかかる操作です。ネットワークセッションを開き、認証を行い、権限を確認する、といった作業が必要になります。プーリングは接続をアクティブにしておくことで、後で接続が要求されたときに、別の接続を作成するよりもアクティブな接続の1つを優先して使用することができます。

次の図を参照してください。

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

最も単純な形としては、"real"と同様のopen-connection APIコール(1)に過ぎない。これはまず、適切な接続がないかプールをチェックし(2)、利用可能であれば、それをクライアントに渡す。そうでなければ、新しい接続が作成されます(3)。

適切なコネクションとは、すでにあるコネクションのことです。 があります。 は、正しい情報 (データベースインスタンス、認証情報、およびその他の情報) を使用してデータベースにアクセスすることができます。

同様に、近いAPIコール(4)があるが、これは実際には リアル close-connectionはむしろ、後で使用するために接続をプールに入れます(5)。ある時点で、プール内のコネクションは 実際に を閉じます(6)。

それはかなり単純化された説明ですね。実際の実装では、複数のサーバや複数のユーザアカウントへの接続を扱うことができるかもしれませんし、接続のベースラインをあらかじめ割り当てて、すぐに接続できるようにするかもしれませんし、使用パターンが落ち着いてきたら古い接続を実際に閉じてしまうかもしれません。