Docs Menu

FAQ

このページでは、よくある質問とその回答を見つけることができます。

Tip

このページで質問に対する回答が見つからない場合は、問題を報告する方法についてはの問題とヘルプページを参照してください。

MongoDB 配置への接続に問題がある場合は、考えられる解決策について接続トラブルシューティング ガイドを参照してください。

Kotlin ドライバーは、 Kotlin の公式 MongoDB ドライバーです。 これは MongoDB チームによって開発され、 Kotlin アプリケーションが MongoDB に接続してデータを操作するためのネイティブ API を提供します。 これは MongoDB Java ドライバーをラップすることで実装されています。

KMongo は、 KotlinアプリケーションからMongoDBを操作するための一般的なコミュニティ開発ライブラリです。これは、公式のKotlinドライバーの作成より前に作成されたJavaドライバーを囲み、 Kotlinコミュニティのニーズに対応するためのラッパーです。

重要

2023 年 7 月現在、KMongo は非推奨としてマークされています。

Kotlin ドライバーは、KMongo の作成者である MongoDB Atlas と連携して開発され、ユーザーは公式にサポートされているドライバーを提供できます。

公式の Kotlin ドライバーと KMongo の API はほぼ同様です。 Kotlin ドライバーと KMongo 間の注目すべき類似性は次のとおりです。

  • 同期操作とコルーチンベースの操作のサポート

  • データ クラスを使用した MongoDB ドキュメントの表現をサポートする

  • KotlinX直列化のサポート

  • MongoDB CRUD APIおよび集計APIのサポート

公式の Kotlin ドライバーと KMongo は似ていますが、いくつか重要な違いがあります。

詳細については、「 KMongo からの移行 」を参照してください。

すべての MongoClientインスタンスには、MongoDB トポロジー内の各サーバーに対する接続プールが組み込まれています。 接続プールはオンデマンドでソケットを開き、マルチスレッド アプリケーションで同時 MongoDB 操作をサポートします。

各接続プールの最大サイズはmaxPoolSizeオプションによって設定され、デフォルトは100になります。 サーバーへの使用中の接続数がmaxPoolSizeの値に達した場合、そのサーバーへの次のリクエストは、接続が利用可能になるまで待機します。

MongoClientインスタンスは、サーバーの状態を監視するために MongoDB トポロジー内のサーバーごとに 2 つの追加のソケットを開きます。

たとえば、3 ノードのレプリカセットに接続されたクライアントは 6 個の監視ソケットを開きます。 また、各サーバー上でアプリケーションのスレッドをサポートするために必要な数のソケットを開きます(上限はmaxPoolSizeの値まで)。 maxPoolSize100で、アプリケーションがプライマリ(デフォルト)のみを使用している場合、プライマリ接続プールのみが増加し、合計接続数は最大106になります。 アプリケーションが 読み込み設定( read preference ) を使用してセカンダリ ノードをクエリする場合、それらのプールも大きくなり、合計接続数が306になる可能性があります。

さらに、接続プールにはレート制限があり、各接続プールは一度に最大でmaxConnectingの接続のみを並列に作成できます。 次の場合、追加のスレッドは待機を停止します。

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

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

minPoolSizeオプションを使用して、各サーバーへの同時接続の最小数を設定できます。デフォルトは0になります。 接続プールはこのソケット数で初期化されます。 ネットワークエラーによってソケットが閉じられ、ソケットの合計数(使用中とアイドル状態の両方)が最小値を下回る場合、最小値に達するまでさらにソケットが開かれます。

接続が削除され、 maxIdleTimeMSオプションに置き換えられる前に、プール内でアイドル状態を維持できる最大数を設定できます。この値のデフォルトは0 (制限なし)です。

MongoClientの次のデフォルト構成はほとんどのアプリケーションで動作します。

val client = MongoClient("<connection string>")

クライアントはプロセスごとに 1 回作成し、すべての操作で再利用します。 リクエストごとに新しいクライアントを作成することがよくあり、非常に非効率的です。

1 つのプロセス内で多数の同時 MongoDB 操作をサポートするには、 maxPoolSizeを増やすことができます。 プールが最大サイズに達すると、追加のスレッドはソケットが使用可能になるまで待機します。

ドライバーはソケットが利用可能になるまで待機できるスレッド数を制限しません。負荷が急増したときにプールのサイズを境界のあるキューに制限するのはアプリケーションの責任です。 スレッドはwaitQueueTimeoutMSオプションで指定された時間だけ待機します。デフォルトは120000 (120 秒)です。

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

MongoClient.close()が任意のスレッドによって呼び出されると、ドライバーはすべてのアイドル ソケットを閉じ、プールに返されるときに使用中のすべてのソケットを閉じます。

MongoDB への接続の詳細については、「接続ガイド」を参照してください。