Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Go Driver
/ /

接続プール

このガイドでは、 Goドライバーが接続プールを使用してMongoDBデプロイへの接続を管理する方法と、アプリケーションで接続プール設定を構成する方法について学習できます。

接続プールは、 Goドライバーによって維持されるオープンなデータベース接続のキャッシュです。アプリケーションがMongoDBへの接続を要求すると、 Goドライバーはプールからシームレスに接続を取得し、操作を実行し、再利用するためにプールに接続を返します。

接続プールは、アプリケーションのレイテンシとGoドライバーによって新しい接続が作成される回数を削減するのに役立ちます。

すべての Clientインスタンスには、 MongoDBトポロジー内の各サーバーに対する接続プールが組み込まれています。minPoolSize オプションを構成しない場合、接続プールはオンデマンドでソケットを開きます。これらのソケットは、アプリケーション内で同時MongoDB操作、または goroutine をサポートします。

新しい Clientインスタンスがインスタンス化されると、サーバーの状態を監視するためにMongoDBトポロジー内のサーバーごとに 2 つのソケットが開きます。

例、3 ノードのレプリカセットに接続されたクライアントは6 つの監視ソケットを開きます。アプリケーションがmaxPoolSize のデフォルト設定を使用し、 プライマリ (デフォルト)ノードのみをクエリする場合、接続プールには最大で 106 個のソケットと 100 接続が存在できます。アプリケーションが読み込み設定 (read preference)を使用してセカンダリ ノードをクエリする場合、それらのプールも大きくなり、合計接続数が 306 になる可能性があります。

効率には、プロセスごとに 1 回クライアントを作成し、すべての操作でそれを再利用します。レイテンシが増加するため、リクエストごとに新しいクライアントを作成することは避けます。

ネットワークエラーによってソケットが閉じ、ソケットの合計数(使用中とアイドル状態の両方)が最小値を下回ると、最小値に達するまでソケットが開きます。

接続プールの設定は、接続文字列を使用するか、options.Client メソッドを使用して指定できます。

対応する構文を確認するには、Connection String タブまたは ClientOptionsタブを選択します。

以下は、接続プールを構成するために使用できる接続文字列設定です。

設定
説明

maxPoolSize

プールで開始されている接続の最大数。接続プールで maxPoolSize の接続が開いているときに操作に新しい接続が必要な場合、新しい操作は新しい接続が開くことを待機します。この待機時間を制限するには、単一のタイムアウト設定を使用します。

デフォルト: 100

minPoolSize

プールで開始されている接続の最小数。接続プールはこのソケット数で初期化されます。minPoolSize の値は maxPoolSize の値より小さくなければなりません。

デフォルト: 0

maxConnecting

プールが同時に確立できる接続の最大数。

デフォルト: 2

maxIdleTimeMS

このオプションはすべてのドライバーでサポートされているわけではありません。

デフォルト: None (no limit)

waitQueueTimeoutMS`

接続可能になるまでスレッドが待機できる最大待機時間をミリ秒単位で指定します。この定義時間よりも長時間ソケットを待機する操作では、接続エラーが発生します。

Default: 0 (no limit)

次の表では、 設定に連鎖させてドライバーの動作を変更できる方法について説明します。

設定
説明

SetMaxPoolSize()

プールで開始されている接続の最大数。接続プールで構成された最大接続数が開いているときに操作に新しい接続が必要な場合、新しい操作は新しい接続が開くことを待機します。この待機時間を制限するには、単一のタイムアウト設定を使用します。

デフォルト: 100

SetMinPoolSize()

プールで開始されている接続の最小数。MinPoolSize の値は MaxPoolSize の値より小さくなければなりません。

デフォルト: 0

SetMaxConnecting()

プールが同時に確立できる接続の最大数。

デフォルト: 2

SetMaxConnIdleTime()

このオプションはすべてのドライバーでサポートされているわけではありません。

デフォルト: 0 (no limit)

対応する例を表示するには、Connection String タブまたは ClientOptionsタブを選択します。

次のコードでは、接続文字列を使用して、最大接続プールサイズ(50)、最小プールサイズ(10)、最大アイドル時間(30000 ミリ秒(30 秒)を構成します。

// Connection string with connection pool options
const uri = "mongodb://localhost:27017/?maxPoolSize=50&minPoolSize=10&maxIdleTimeMS=30000"

次のコードではクライアントを作成し、接続文字列をApplyURI() メソッドに渡します。

// Creates a new client and connects to the server
client, err := mongo.Connect(options.Client().ApplyURI(uri))
if err != nil {
log.Fatal(err)
}

次のコードでは、クライアントを作成し、の接続プールオプションを最大接続プールサイズで 50、最小プール サイズが 10、最大アイドル時間が 30000 ミリ秒(30 秒)に設定されています。

// Sets client options with connection pool settings
clientOptions := options.Client().
ApplyURI(uri).
SetMaxPoolSize(50).
SetMinPoolSize(10).
SetMaxConnIdleTime(30 * time.Second)
// Creates a new client and connects to the server
client, err := mongo.Connect(clientOptions)
if err != nil {
log.Fatal(err)
}

接続プールにはレート制限があり、各接続プールはいつでも最大で maxConnecting の接続のみを並列に作成できます。新しい goroutine は、次の場合に待機を停止します。

  • 既存の goroutine の 1 つが接続の作成を完了するか、既存の接続がプールにチェックバックされます。

  • 接続作成のレート制限により、既存の接続を再利用するドライバーの能力が向上します。

ドライバーはソケットが使用可能になるまで待機できる操作の数を制限しないため、操作キューを管理するのはアプリケーションの責任です。waitQueueTimeoutMS オプションを定義しない限り、操作は任意の時間待機できます。

ソケットを対象にwaitQueueTimeoutMSで定義された時間以上待機する操作では、接続エラーが発生します。 すべての操作を完了することよりも、負荷急増中に操作の継続時間を制限することが重要な場合は、このオプションを使用します。

任意の goroutine から Client.Disconnect() を呼び出すと、ドライバーはすべてのアイドル ソケットを閉じ、プールに返されるすべてのソケットを閉じます。

接続プールの使用の詳細については、サーバー マニュアルの 接続プール に関するドキュメントを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

戻る

MongoDB Server実行時間の制限

項目一覧