再試行可能な読み取り
再試行可能な読み取りを使用すると、MongoDB は、特定のネットワークまたはサーバーのエラーが発生した場合に、特定の読み取り操作を 1 回自動的に再試行できます。
前提条件
- ドライバーの最小バージョン
MongoDB Server 4.2 以降と互換性のある公式の MongoDB ドライバーは、再試行可能な読み取りをサポートしています。
公式 MongoDB ドライバーの詳細については、「 MongoDB ドライバー 」を参照してください。
- サーバーの最小バージョン
- ドライバーは MongoDB Server 3.6 以降に接続されている場合にのみ、読み取り操作を再試行できます。
再試行可能な読み取りの有効化
MongoDB Server 4.2以降と互換性のある公式の MongoDB ドライバーは、デフォルトで再試行可能な読み取りを有効にします。 再試行可能な読み取りを明示的に無効にするには、配置用のretryReads=false
接続string で {5 を指定します。
mongosh
では、再試行可能な読み取りはサポートされていません。
再試行可能な読み取り操作
MongoDB ドライバーは、次の読み取り操作の再試行をサポートしています。 リストは、各メソッドの一般的な説明を参照します。 具体的な構文と使用方法については、そのメソッドのドライバーのドキュメントを参照してください。
メソッド | 説明 |
---|---|
Collection.aggregate Collection.count Collection.countDocuments Collection.distinct Collection.estimatedDocumentCount Collection.find Database.aggregate
| CRUD API 読み取り操作 |
Collection.watch Database.watch MongoClient.watch | ストリーム操作の変更 |
MongoClient.listDatabases Database.listCollections Collection.listIndexes | 列挙操作 |
Collection.find による GridFS 操作(例: GridFSBucket.openDownloadStream ) | GridFS ファイルのダウンロード操作 |
MongoDB ドライバーには、ヘルパー メソッドや再試行可能な読み取り操作をラップするメソッドなど、他の操作の再試行可能なサポートが含まれている場合があります。 メソッドが再試行可能な読み取りを明示的にサポートしているかどうかは、ドライバー のドキュメントを参照してください。
サポートされていない読み取り操作
次の操作では、再試行可能な読み取りはサポートされていません。
読み取りコマンドや書込みコマンドには依存しない汎用の
Database.runCommand
ヘルパーに渡される任意の読み取りコマンド。
動作
永続的なネットワークエラー
MongoDB の再試行可能な書き込みでは、再試行は1 回だけです。 これは、一時的なネットワークエラーやレプリカセットの選挙には役立ちますが、永続的なネットワークエラーには対応できません。
フェイルオーバー期間
ドライバーは、読み取り操作を再試行する前に、読み取りコマンドの元の 読み込み設定( read preference )を使用して サーバーを選択 します。ドライバーが元の読み込み設定(read preference)を使用して再試行対象のサーバーを選択できない場合、ドライバーは元のエラーを返します。
ドライバーはサーバー選択を実行する前にserverSelectionTimeoutMS
ミリ秒待機します。 再試行可能な読み取りでは、 serverSelectionTimeoutMS
待機した後に適格なサーバーが存在しないインスタンスには対応しません。