View a markdown version of this page

Amazon DocumentDB での再試行可能な書き込み - Amazon DocumentDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon DocumentDB での再試行可能な書き込み

エンジンバージョン 8.0.2 以降、Amazon DocumentDB は再試行可能な書き込みをサポートしています。一時的なネットワークエラーまたはプライマリ選択が原因で書き込みオペレーションが失敗した場合、ドライバーは自動的にオペレーションを 1 回だけ再試行できます。Amazon DocumentDB は、再試行された書き込みを重複排除して、操作が最大 1 回適用されるようにし、べき等性を維持します。

再試行可能な書き込みには、再試行可能な書き込みプロトコルをサポートする MongoDB 互換ドライバーが必要です。最新の MongoDB 互換ドライバーは、デフォルトで再試行可能な書き込みを有効にします (retryWrites=true接続文字列の )。以前のバージョンからエンジン 8.0.2 にアップグレードする場合は、接続文字列retryWrites=falseから を削除してこの機能を有効にできます。

要件

再試行可能な書き込みを使用するには、次の要件を満たす必要があります。

  • Amazon DocumentDB エンジンバージョン 8.0.2 以降。

  • 再試行可能な書き込みをサポートする MongoDB 互換ドライバー。最小バージョンについては、ドライバーのドキュメントを参照してください。

  • 接続文字列には が含まれている必要があります。含まれていない場合retryWrites=true、ドライバーはデフォルトで再試行可能な書き込みにする必要があります (最新のドライバーは です)。

サポートされているオペレーション

再試行可能な書き込みは、個々の書き込みが最大 1 つのドキュメントに影響する書き込みオペレーションに適用されます。バッチ内の各書き込みは個別に重複排除されるため、バッチオペレーションは適格です。

次の書き込みオペレーションは再試行可能です。

  • insertOne

  • insertMany

  • updateOne

  • deleteOne

  • findOneAndUpdate

  • findOneAndDelete

  • findOneAndReplace

  • bulkWrite (insertOne、、updateOne、deleteOneまたは replaceOneオペレーションで構成される場合)

insertMany および の場合bulkWrite、バッチ内の各ドキュメントは個別に重複排除されます。再試行が必要な場合は、まだ適用されていないドキュメントのみが挿入されます。

注記

commitTransaction および abortTransactionは、書き込みとしてではなくトランザクション制御コマンドとして再試行することもできます。トランザクション内の個々の書き込みは再試行できません。詳細については、「制限事項」を参照してください。

制限事項

Amazon DocumentDB での再試行可能な書き込みには、次の制限が適用されます。

  • updateMany と deleteManyは再試行できません。

  • マルチステートメントトランザクション内の書き込みは再試行できません。トランザクションのコミットオペレーションと中止オペレーションは個別に再試行できます。

  • ドキュメントには、再試行可能な挿入の _idフィールドが含まれている必要があります。

  • 再試行可能な書き込みは、エンジンバージョン 8.0.2 以降でのみ使用できます。以前のエンジンバージョンでは、エラーを回避するために接続文字列retryWrites=falseに を設定します。

  • クエリプランナーバージョン 1.0 を使用するクラスターでは、書き込みオペレーションを再試行できません。

  • 大きなドキュメントを返す findOneAndUpdate、findOneAndDelete、および findOneAndReplaceオペレーションでは、完全な結果ドキュメントが重複排除のためにキャッシュされるため、再試行可能な書き込みによって書き込みレイテンシーが増加する可能性があります。書き込みパフォーマンスが重要で、返されるドキュメントが大きい場合は、それらのワークロードretryWrites=falseに対して を設定することを検討してください。

再試行可能な書き込みの有効化

再試行可能な書き込みを有効にするには、接続文字列retryWrites=trueに を含めます。

mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=true

ドライバーのデフォルトが の場合retryWrites=true、接続文字列retryWrites=falseから明示的なものをすべて削除できます。

完全な接続文字列のチュートリアルについては、「」を参照してくださいプログラムによる Amazon DocumentDB への接続。

再試行可能な書き込みの仕組み

アプリケーションで を使用して書き込みを送信するとretryWrites=true、ドライバーは論理セッション ID (lsid) とトランザクション番号 (txnNumber) を書き込みコマンドにアタッチします。Amazon DocumentDB は、これらの識別子を使用して書き込みを重複排除します。

  • 最初の試行では、Amazon DocumentDB は書き込みを実行し、結果をキャッシュします。

  • ドライバーが同じ書き込みを再試行した場合 (同じ lsidと txnNumber)、Amazon DocumentDB は書き込みを再実行せずにキャッシュされた結果を返します。

  • Amazon DocumentDB は、元の書き込みから 60 分間の再試行を受け入れます。ドライバーはすぐに再試行するため、このウィンドウはドライバーが必要とするよりもはるかに長くなります。

元の書き込みから 60 分以上後に再試行が到着した場合、Amazon DocumentDB にはキャッシュされた結果はなく、新しいオペレーションとして書き込みが実行されます。

エラー処理

次のエラーは、Amazon DocumentDB での再試行可能な書き込みに固有のものです。

エラーコード 名前 説明
225 TransactionTooOld 同じセッションとステートメントの新しいトランザクション番号がすでにコミットされているため、この再試行は古すぎて適用できません。
301 再試行可能な書き込みはサポートされていません 書き込みには再試行可能な書き込みフィールドが含まれていましたが、エンジンバージョンは再試行可能な書き込みをサポートしていないか、オペレーションは再試行できません。8.0.2 より前のエンジンバージョンに接続するretryWrites=falseときに を設定します。

retryWrites=false からの移行

エンジンバージョン 8.0.2 にアップグレードし、現在接続文字列retryWrites=falseで を使用している場合:

  1. クラスターをエンジンバージョン 8.0.2 以降にアップグレードします。

  2. アプリケーションの接続文字列retryWrites=falseから を削除するか、 に変更しますretryWrites=true。

  3. アプリケーションコードの変更は必要ありません。ドライバーは再試行を自動的に処理します。