Docs Menu
Docs Home
/ / /
Node.js ドライバー
/ /

MongoDB Server実行時間の制限

項目一覧

  • Overview
  • timeoutMS オプション
  • タイムアウト継承
  • の上書き
  • トランザクション
  • クライアントの暗号化
  • Cursors
  • カーソル有効期間モード
  • カーソル反復モード
  • API ドキュメント

Node.jsドライバーを使用してサーバー操作を実行する場合、サーバーが操作 を完了するまでの期間も制限できます。そのためには、クライアント側操作タイムアウト(CST) を指定します。タイムアウトは、サーバーの選択、接続のチェックアウト、サーバー側の実行など、操作を完了するために必要なすべてのステップに適用されます。タイムアウトが経過すると、 Node.jsドライバーはタイムアウトの例外を発生させます。

注意

試験用機能

COT 機能は実験的なものであり、今後のドライバー リリースで変更される可能性があります。

MongoDBデプロイに接続するときにタイムアウトを指定するには、timeoutMS 接続オプションをミリ秒単位でタイムアウトの長さに設定します。これは、MongoClient コンストラクターに引数を渡す方法と、接続文字列のパラメーターを使用する方法の 2 つがあります。

次のコード例では、 timeoutMSオプションを使用して30秒のタイムアウトを指定しています。

const uri = "mongodb://<hostname:<port>";
const client = new MongoClient(uri, { timeoutMS: 30000 });
const uri = "mongodb://<hostname:<port>?timeoutMS=30000";
const client = new MongoClient(uri);

注意

timeoutMS 接続オプションは次のオプションよりも優先されます。

  • socketTimeoutMS

  • waitQueueTimeoutMS

  • wTimeoutMS

  • maxTimeMS

  • maxCommitTimeMS

CSO 機能が実験的なものでなくなり、前述のオプションは非推奨になります。

timeoutMS オプションを指定すると、ドライバーはサーバー操作ごとに指定されたタイムアウトを自動的に適用します。次のコード例では、クライアントレベルで 10 秒のタイムアウトを指定し、insertOne() メソッドを呼び出します。

const uri = "<connection string uri>";
const client = new MongoClient(uri, {
timeoutMS: 10000
});
async function run() {
try {
const db = client.db("test-db");
const coll = db.collection("test-collection");
const result = await coll.insertOne({ name: "Yngwie" });
console.log("Insert result:", result);
} finally {
await client.close();
}
}
run().catch(console.dir);

timeoutMS オプションを指定すると、ドライバーは他のNode.jsドライバー オプションと同じ継承動作に従ってタイムアウトを適用します。以下の表は、各レベルでタイムアウト値がどのように継承されるかを示しています。

レベル
継承の説明

操作

優先順位が最も高く、他のレベルに設定されている timeoutMS オプションが上書きされます。

トランザクション

セッション、コレクション、データベース、またはクライアントレベルで設定された timeoutMS よりも優先されます。

セッション

オプションがそれらのレベルに設定されたオプションによって上書きされない限り、そのセッション内のすべてのトランザクションと操作に適用されます。

Database

オプションがそれらのレベルに設定されたオプションによって上書きされない限り、そのデータベース内のすべてのセッションと操作に適用されます。

コレクション

オプションがそれらのレベルに設定されたオプションによって上書きされない限り、そのコレクションに対するすべてのセッションと操作に適用されます。

クライアント

timeoutMSが特に指定されていない、すべてのデータベース、コレクション、セッション、トランザクション、操作に適用されます。

オーバーライドと特定のオプションの詳細については、「 オーバーライド セクション 」を参照してください。

Node.jsドライバーは、データベース操作の動作とパフォーマンスを制御するためのさまざまなレベルの構成をサポートしています。

操作レベルで timeoutMS オプションを指定すると、特定の操作のクライアントレベル構成を上書きできます。これにより、個々のクエリのニーズに基づいてタイムアウトをカスタマイズできます。

次の例は、操作レベルの timeoutMS 構成がクライアントレベルの timeoutMS 構成を無効にする方法を示しています。

// Creates a new MongoClient with a client-level timeoutMS configuration
const uri = "<connection string uri>";
const client = new MongoClient(uri, {
// Client-level timeout: 15 seconds
timeoutMS: 15000
});
async function run() {
try {
const db = client.db("test-db");
const coll = db.collection("test-collection");
// Performs a query operation with an operation-level timeoutMS configuration
const docs = await coll.find({},
// Operation-level timeout: 10 seconds
{ timeoutMS: 10000 })
.toArray();
console.log(docs);
} finally {
await client.close();
}
}
run().catch(console.dir);

トランザクションを実装するために新しい ClientSessionインスタンスを作成する場合は、defaultTimeoutMS オプションを使用します。 defaultTimeoutMS を設定すると、次の目的で使用する timeoutMS 値を指定できます。

defaultTimeoutMS を指定しない場合、ドライバーは親の MongoClient に設定された timeoutMS 値を使用します。

withTransaction()コールバックによって提供されるトランザクション セッション内の操作に timeoutMS オプションを設定して、defaultTimeoutMS を上書きすることはできません。指定すると、エラーがスローされます。

クライアント側フィールドレベル暗号化(CSFLE)を使用する場合、ドライバーは timeoutMS オプションを使用して暗号化と復号化操作に許可される時間を制限します。

ClientEncryptionインスタンス を構築するときに timeoutMS オプションを指定すると、そのインスタンスで実行されるすべての操作の有効期間が制御されます。 timeoutMS を指定しない場合、インスタンスはClientEncryption コンストラクターで使用される MongoClient から timeoutMS 設定を継承します。

クライアントと ClientEncryption の両方で直接 timeoutMS を設定すると、ClientEncryption に提供された値が優先されます。

カーソルは、CSO 機能を使用する場合に構成可能なタイムアウト設定を提供します。必要に応じて、カーソルの有効期間またはカーソルの反復モードを構成することで、カーソルの処理を調整できます。モードを構成するには、timeoutMode オプションを cursorLifetime(デフォルトの )または iteration に設定します。

timeoutMSカーソル有効モードでは、カーソルの有効期間全体が制限されます。このモードでは、カーソルの初期化とカーソル メソッドに対する後続のすべての呼び出しは、timeoutMS オプションで指定された制限内に完了する必要があります。すべてのドキュメントはこの制限内で返される必要があります。停止しない場合、カーソルの有効期限が切れ、タイムアウトのエラーが発生します。

toArray() メソッドまたは close() メソッドを呼び出してカーソルを閉じると、killCursors コマンドのタイムアウトがリセットされ、サーバー側のリソースがクリーンアップされるようになります。

次の例は、 timeoutMS オプションを設定して、カーソルが初期化され、すべてのドキュメントが 10 秒以内に取得されるようにする方法を示しています。

const docs = await collection.find({}, {timeoutMS: 10000}).toArray();

カーソル反復モードでは、 timeoutMS オプションを使用して、各呼び出しを next()hasNext()、または tryNext() メソッドに制限します。タイムアウトは、各呼び出しが完了した後に更新されます。これは、Cappedコレクションや変更ストリームで find() メソッドによって返される追尾可能 (tailable) カーソルなど、すべての追尾可能 (tailable) カーソルのデフォルトモードです。

次のコード例では、 timeoutModeiteration に設定されているカーソルを使用して、mflixコレクション内のドキュメントを反復処理し、各映画ドキュメントの imdb_url を取得してログに記録します。

for await (const movie of mflix.find({}, { timeoutMode: 'iteration' })) {
const imdbResponse = await fetch(movie.imdb_url);
console.log(await imdbResponse.text());
}

Node.jsドライバーでタイムアウトを使用する方法の詳細については、次のAPIドキュメントを参照してください。

戻る

SOCKS5 プロキシのサポート