Overview
このガイドでは、 Rustドライバーが接続プールを使用してMongoDBデプロイへの接続を管理する方法と、アプリケーションで接続プール設定を構成する方法を学習できます。
接続プールはとはオープンデータベース接続のキャッシュであり、ドライバーによって維持されます。アプリケーションで操作を実行する必要がある場合、ドライバーは プールから接続をチェックアウトし、その接続を使用して操作を実行し、 再利用するためにプールへの接続を返します。接続を再利用すると、アプリケーションのレイテンシが削減され、操作ごとに新しい接続を作成するオーバーヘッドが回避されます。
接続プールの使用
MongoDBに接続するには、 Clientインスタンスを作成します。各 Client は内部接続プールを維持し、サーバートポロジーの検出や配置のモニタリングなど、接続管理のほとんどの要素を自動的に処理します。
次のコードは、デフォルトの接続設定を使用するクライアントを作成する方法を示しています。
let client_default = Client::with_uri_str(uri).await?;
ワークロードに特定のパフォーマンスまたは同時実行要件がある場合は、Client を構築する前に ClientOptions にオプションを設定することで接続プールを調整できます。
接続プールの構成
すべての Clientインスタンスには、 MongoDBトポロジー内の各サーバーに対する組み込み接続プールがあります。 min_pool_size オプションを構成しない場合、ドライバーはアプリケーションからの同時リクエストをサポートするためにオンデマンドでソケットを開きます。
接続プールの動作を構成するには、 ClientOptionsインスタンスで次のオプションを設定します。
オプション | 説明 |
|---|---|
| Maximum number of concurrent connections that each pool maintains. Default: 10 |
| Maximum number of connections that each pool can establish concurrently. Default: 2 |
| Minimum number of concurrent connections that each pool maintains. Default: 0 |
| Maximum amount of time that a connection can remain idle in the pool before the driver removes and replaces it. Default: 0 (no limit) |
次の例は、クライアント の作成時に接続プールオプションを構成する方法を示しています。
let mut client_options = ClientOptions::parse(uri).await?; client_options.max_pool_size = Some(20); client_options.max_connecting = Some(3); client_options.min_pool_size = Some(1); client_options.max_idle_time = Some(Duration::new(90, 0)); let client_custom = Client::with_options(client_options)?;
最大プール サイズの設定
max_pool_size オプションは、特定のサーバーに対して各プールが維持する最大接続数を制御します。デフォルトは 10 です。サーバーへの使用中の接続の数がこの制限に達すると、そのプールからの接続を必要とする後続のリクエストは、既存の接続がチェックインするまで待機する必要があります。
アプリケーションのリクエストを処理するために使用されるソケットに加えて、各 Client はトポロジー内のサーバーごとに 2 つの追加のソケットを開き、サーバーの状態を監視します。例、3 ノードのレプリカセットは次のアクションを実行します。
ドライバーは 6 つの監視ソケットを開きます。または、ノードごとに 2 つの監視ソケットを開きます。
アプリケーションがデフォルトの
max_pool_sizeを使用し、プライマリからの読み取りとプライマリへの書き込みのみを使用する場合、接続プールは最大16 の接続を保持できます。この合計は、10 のアプリケーション接続と6 のモニタリング接続で構成されています。アプリケーションが セカンダリ も対象とする読み込み設定 (read preference)を使用している場合、ドライバーはそれらのノードのプールも維持し、すべてのプールとモニタリング ソケットにわたる合計接続数は36 になる可能性があります。
1 つのプロセスからの高レベルの同時実行を必要とするワークロードの場合は、max_pool_size を増やして同時接続を増やします。次の例では、max_pool_size から 20 の接続を増やします。
let mut client_options = ClientOptions::parse(uri).await?; client_options.max_pool_size = Some(20); let client_max_pool = Client::with_options(client_options)?;
同時接続オプションの構成
接続プールは、並行して作成される新しい接続の数を制限します。 max_connecting オプションは、各プールが同時に確立できる最大接続数を制御します。デフォルト値は 2 です。
例、max_connecting が 2 に設定されている場合、新しい接続を必要とする 3 番目の同時リクエストは、次のいずれかの状況が発生した後にのみ成功します。
プールは接続の作成を完了し、接続の合計数が
max_pool_size以下です。使用中の接続はプールに返されます。
この方法で接続作成をレート制限すると、ドライバーは新しい接続を開始する代わりに既存の接続を再利用することになります。
並列に作成できる接続の数を増やすには、次の例に示すように、max_connecting の値を高く設定します。
let mut client_options = ClientOptions::parse(uri).await?; client_options.max_connecting = Some(3); let client_concurrent = Client::with_options(client_options)?;
最小プール サイズの設定
min_pool_size オプションは、サーバーに対して各プールが維持する接続の最小数を設定します。デフォルトは 0 です。正の min_pool_size を設定すると、ドライバーはその数の接続でプールを初期化し、少なくともその数の接続を常に開いたままにします。
接続が閉じられ、使用中の接続とアイドル状態の接続の合計数が min_pool_size を下回ると、プールは設定された最小値に達するまで新しい接続を開きます。これは、トラフィックが急増した際に準備ができた接続のプールを必要とするワークロードに役立ちます。
最小プールサイズを設定するには、次の例に示すように、Client を作成するときに、min_pool_size を必要な接続数に設定します。
let mut client_options = ClientOptions::parse(uri).await?; client_options.min_pool_size = Some(1); let client_min_pool = Client::with_options(client_options)?;
最大アイドル時間の設定
max_idle_time オプションは、ドライバーが接続を削除して置き換える前に、プール内で接続がアイドル状態を維持する時間を制御します。デフォルト値は 0 であり、アイドル時間制限がないことを意味します。
接続が max_idle_time で指定された期間、アイドル状態になると、プールはその接続を破棄し、必要に応じて置換を開きます。これにより、アプリケーションが、ファイアウォールやネットワーク インフラストラクチャによって閉じられる可能性のある長時間アイドル接続を保持するのを防ぎます。
次の例では、最大アイドル時間を 90 秒に設定する方法を示しています。
let mut client_options = ClientOptions::parse(uri).await?; client_options.max_idle_time = Some(Duration::new(90, 0)); let client_idle = Client::with_options(client_options)?;
接続を閉じる
Client によって管理されている接続を積極的に閉じるには、Client::shutdown() メソッドを呼び出します。このメソッドを呼び出すと、ドライバーは次のアクションを実行します。
プール内のすべてのアイドル ソケットを閉じます
現在使用中のソケットはプールに返されるときに閉じます
Client::shutdown() を呼び出しても、進行中の操作は中断されません。ドライバーは、関連する操作が完了し、接続がプールにチェックバックされた後にのみソケットを閉じます。プロセスが終了すると、ドライバーは残りのソケットも閉じます。
詳細情報
接続プールの詳細については、 MongoDB Serverマニュアルの 接続プール設定の調整 を参照してください。
API ドキュメント
このガイドで説明するメソッドとタイプの詳細については、次の API ドキュメントを参照してください。