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