接続プール
mongocxx::client
vs mongocxx::pool
スタンドアロンのmongocxx::client
は、シングルスレッド アルゴリズムを使用して、接続されているクラスターの状態を監視します。 レプリカセットに接続すると、スレッドは60秒ごとに「 World を停止 」してクラスターのステータスを確認します。 一方、 mongocxx::pool
は、クラスター内の各サーバーに対して個別のバックグラウンド スレッドを使用します。各スレッドは、 10秒ごとに監視対象サーバーのステータスをチェックします。 「世界を停止」するのではなく、バックグラウンドでクラスターを監視する方がパフォーマンス上の利点があるため、アプリケーションが複数のスレッドにアクセスする場合は、スタンドアロン クライアントのセットではなく、 mongocxx::pool
を使用することを強くお勧めします。は 1 つのスレッドを使用します。
接続プールとスレッドの安全性
mongocxx::pool
は複数のスレッドで共有でき、クライアントの作成に使用できます。 ただし、各mongocxx::client
は 1 つのスレッドでのみ使用できます。 mongocxx::client
をスレッドセーフに使用する方法の詳細については、 スレッドの安全性ドキュメントを参照してください。
接続プールの構成
接続プール内のクライアント数は、URI パラメータminPoolSize
とmaxPoolSize
によって決まります。 minPoolSize
とmaxPoolSize
オプションは、ドライバーがアイドル状態または完全に使用されている場合に のリソース使用量のターゲットを設定します。 完全に使用される場合、最大 MaxPoolSize のクライアントが使用できます。 クライアントがプールに返されると、プールが minPoolSize に再度縮小されるまで、クライアントは破棄されます。
maxPoolSize | mongocx:: プール(プール内とチェックアウトの両方)によって作成されたクライアントの最大数。 デフォルト値は100です。 上限に達すると、 mongocx::Pool::acquire は、別のスレッドがプールにクライアントを返すまでブロックします。 |
minPoolSize | アイドル状態の場合のプールのターゲット サイズを設定します。 この数のクライアントが作成されると、プール内のこの数のクライアントよりも少なくなることはありません。 minPoolSize を超える追加のクライアントが作成された場合、プールに返されるとそれらは破棄されます。 デフォルト値の「 0 」は、この機能を無効にします。 無効にしても、クライアントは破棄されません。 |
接続プールの使用
接続プールを使用するには、まず URI を引数として渡してmongocxx::pool
を作成します。 次に、 mongocxx::pool::acquire
を呼び出してプールからクライアントを受け取ります。 クライアントは、範囲を超えると自動的にプールに返されます。
詳細については、 接続プールの例 を参照してください。