Overview
このガイドでは、 Javaドライバーが接続プールを使用してMongoDBデプロイへの接続を管理する方法と、アプリケーションで接続プール設定を構成する方法について学習できます。
接続プールはとはオープンデータベース接続のキャッシュであり、 Javaドライバーによって維持されます。アプリケーションがMongoDBへの接続を要求すると、 Javaドライバーはプールからシームレスに接続を取得し、操作を実行し、再利用するためにプールに接続を返します。
接続プールは、アプリケーションのレイテンシとJavaドライバーによって新しい接続が作成される回数を削減するのに役立ちます。
接続プールの作成
すべての MongoClient
インスタンスには、MongoDB トポロジー内の各サーバーに対する接続プールが組み込まれています。 接続プールはオンデマンドでソケットを開き、マルチスレッド アプリケーションで同時 MongoDB 操作をサポートします。
maxPoolSize
オプションは各接続プールの最大サイズを設定します。デフォルトは 100 です。サーバーへの使用中の接続数が maxPoolSize
の値に達した場合、そのサーバーへの次のリクエストは、接続が利用可能になるまで待機します。
各 MongoClient
インスタンスは、サーバーの状態を監視するためにMongoDBトポロジー内のサーバーごとにさらに 2 つのソケットを開きます。
接続プールを構成する
接続プールの設定を指定するには、接続文字列を使用するか、MongoClientSettings
オブジェクトを MongoClients.create()
メソッドに渡すことで指定できます。
対応する構文を確認するには、Connection String タブまたは MongoClientSettingsタブを選択します。
以下は、接続プールを構成するために使用できる接続文字列設定です。
設定 | 説明 |
---|---|
| プールが同時に確立できる接続の最大数。 デフォルト: |
| このオプションはすべてのドライバーでサポートされているわけではありません。 デフォルト: |
| プールで開始されている接続の最大数。接続プールで デフォルト: |
| プールで開始されている接続の最小数。 デフォルト: |
| このオプションは非推奨です。このタイムアウトは、代わりにクライアントレベルのタイムアウトを設定することで構成できます。 接続が利用可能になるまで操作が待機できる最大待機時間(ミリ秒)。値が デフォルト: |
| 接続を閉じる前に、Java ドライバーがプールされた接続を引き続き使用する最大時間をミリ秒単位で指定します。 値が デフォルト: |
次のコードでは、最大接続プールサイズが 50
のクライアントを作成します。
ConnectionString connectionString = "mongodb://<host>:<port>/?maxPoolSize=50" MongoClient mongoClient = MongoClients.create(connectionString)
これらのパラメータの詳細については、 ConnectionString APIドキュメントを参照してください。
applyToConnectionPoolSettings() メソッドをチェーンして、ドライバーが接続プールを管理する方法を変更します。
次の表では、 設定に連鎖させてドライバーの動作を変更できる方法について説明します。
方式 | 説明 |
---|---|
| 接続プール関連のイベントのリスナーを追加します。 |
|
|
|
|
| メンテナンス ジョブを実行する頻度を設定します。 |
| 最初のメンテナンス ジョブを実行する前に待機する時間を設定します。 |
| 接続が閉じられる前にアイドル状態を維持できる最大時間を設定します。 |
| プールされた接続が閉じられる前に存在できる最大時間を設定します。 |
|
デフォルト: |
| 接続可能になるまで待機する最大時間を設定します。 デフォルト: |
|
デフォルト: |
注意
このmaxSize
とminSize
の設定は、ドライバーを接続するクラスター内の各サーバーに適用されます。
たとえば、3 つのmongos
サーバーを持つクラスターにドライバーを接続するとします。 つまり、各mongos
サーバーには最大でmaxSize
接続、少なくともminSize
接続が存在します。
次の例では、applyToConnectionPoolSettings()
メソッドをチェーンして、利用可能な接続を最大で 10 SECONDS
待機するようにスレッドを設定し、接続プールの maxSize
を 200 に設定します。
MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder().applyConnectionString( new ConnectionString("<your connection string>")) .applyToConnectionPoolSettings(builder -> builder.maxSize(50)) .build());
詳細情報
接続プールの使用の詳細については、サーバー マニュアルの 接続プール に関するドキュメントを参照してください。