View a markdown version of this page

Penulisan yang dapat dicoba ulang di Amazon DocumentDB - Amazon DocumentDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Penulisan yang dapat dicoba ulang di Amazon DocumentDB

Dimulai dengan mesin versi 8.0.2, Amazon DocumentDB mendukung penulisan yang dapat dicoba ulang. Ketika operasi penulisan gagal karena kesalahan jaringan sementara atau pemilihan primer, pengemudi dapat secara otomatis mencoba kembali operasi tepat sekali. Amazon DocumentDB mendeduplikasi penulisan yang dicoba ulang sehingga operasi diterapkan paling banyak sekali, menjaga idempotensi.

Penulisan yang dapat dicoba ulang memerlukan MongoDB-compatible driver yang mendukung protokol penulisan yang dapat dicoba ulang. Sebagian besar MongoDB-compatible driver saat ini mengaktifkan penulisan yang dapat dicoba ulang secara default (retryWrites=truedalam string koneksi). Jika Anda memutakhirkan ke engine 8.0.2 dari versi sebelumnya, Anda dapat menghapus retryWrites=false dari string koneksi Anda untuk mengaktifkan fitur ini.

Persyaratan

Untuk menggunakan penulisan yang dapat dicoba ulang, Anda harus memenuhi persyaratan berikut:

  • Mesin Amazon DocumentDB versi 8.0.2 atau yang lebih baru.

  • MongoDB-compatible Driver yang mendukung penulisan yang dapat dicoba ulang. Untuk versi minimum, lihat dokumentasi untuk driver Anda.

  • String koneksi harus menyertakanretryWrites=true, atau driver harus default untuk penulisan yang dapat dicoba ulang (sebagian besar driver saat ini melakukannya).

Operasi yang didukung

Penulisan yang dapat dicoba ulang berlaku untuk operasi penulisan di mana setiap penulisan individu mempengaruhi paling banyak satu dokumen. Operasi batch memenuhi syarat, karena setiap penulisan dalam batch dideduplikasi secara terpisah.

Operasi penulisan berikut dapat dicoba ulang:

  • insertOne

  • insertMany

  • updateOne

  • deleteOne

  • findOneAndUpdate

  • findOneAndDelete

  • findOneAndReplace

  • bulkWrite(bila terdiri dariinsertOne,updateOne,deleteOne, atau replaceOne operasi)

Untuk insertMany danbulkWrite, setiap dokumen dalam batch dideduplikasi secara individual. Jika percobaan ulang diperlukan, hanya dokumen yang belum diterapkan yang dimasukkan.

catatan

commitTransactiondan abortTransaction juga dapat dicoba ulang, sebagai perintah kontrol transaksi daripada sebagai tulisan. Penulisan individu di dalam transaksi tidak dapat dicoba ulang. Untuk informasi selengkapnya, lihat Batasan.

Batasan

Batasan berikut berlaku untuk penulisan yang dapat dicoba ulang di Amazon DocumentDB:

  • updateManydan tidak deleteMany dapat dicoba kembali.

  • Penulisan di dalam transaksi multi-pernyataan tidak dapat dicoba ulang. Operasi komit transaksi dan pembatalan dapat dicoba ulang secara terpisah.

  • Dokumen harus menyertakan _id bidang untuk sisipan yang dapat dicoba ulang.

  • Penulisan yang dapat dicoba ulang hanya tersedia pada mesin versi 8.0.2 dan yang lebih baru. Pada versi mesin sebelumnya, atur retryWrites=false string koneksi Anda untuk menghindari kesalahan.

  • Operasi tulis tidak dapat dicoba ulang pada cluster yang menggunakan perencana kueri versi 1.0.

  • UntukfindOneAndUpdate,findOneAndDelete, dan findOneAndReplace operasi yang mengembalikan dokumen besar, penulisan yang dapat dicoba ulang dapat meningkatkan latensi penulisan karena dokumen hasil lengkap di-cache untuk deduplikasi. Jika kinerja penulisan sangat penting dan dokumen yang dikembalikan besar, pertimbangkan pengaturan retryWrites=false untuk beban kerja tersebut.

Mengaktifkan penulisan yang dapat dicoba ulang

Untuk mengaktifkan penulisan yang dapat dicoba ulang, sertakan retryWrites=true dalam string koneksi Anda:

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

Jika driver Anda default keretryWrites=true, Anda dapat menghapus eksplisit apa pun retryWrites=false dari string koneksi Anda.

Untuk panduan lengkap string koneksi, lihatMenghubungkan secara terprogram ke Amazon DocumentDB.

Cara kerja penulisan yang dapat dicoba ulang

Ketika aplikasi Anda mengirim write withretryWrites=true, driver melampirkan ID sesi logis (lsid) dan nomor transaksi (txnNumber) ke perintah write. Amazon DocumentDB menggunakan pengidentifikasi ini untuk mendeduplikasi penulisan:

  • Pada upaya pertama, Amazon DocumentDB mengeksekusi penulisan dan menyimpan hasilnya.

  • Jika driver mencoba lagi penulisan yang sama (sama lsid dantxnNumber), Amazon DocumentDB mengembalikan hasil cache tanpa mengeksekusi ulang penulisan.

  • Amazon DocumentDB menghormati percobaan ulang selama 60 menit setelah penulisan asli. Driver segera mencoba lagi, jadi jendela ini jauh lebih lama dari yang dibutuhkan pengemudi.

Jika percobaan ulang tiba lebih dari 60 menit setelah penulisan asli, Amazon DocumentDB tidak lagi memiliki hasil cache untuk itu dan menjalankan penulisan sebagai operasi baru.

Penanganan kesalahan

Kesalahan berikut ini khusus untuk penulisan yang dapat dicoba ulang di Amazon DocumentDB:

Kode kesalahan Nama Deskripsi
225 TransactionTooOld Nomor transaksi yang lebih baru untuk sesi dan pernyataan yang sama sudah dilakukan, jadi percobaan ulang ini terlalu lama untuk diterapkan.
301 Penulisan yang dapat dicoba ulang tidak didukung Tulisan termasuk bidang tulis yang dapat dicoba ulang, tetapi versi mesin tidak mendukung penulisan yang dapat dicoba ulang, atau operasi tidak dapat dicoba ulang. Atur retryWrites=false saat menghubungkan ke versi mesin lebih awal dari 8.0.2.

Bermigrasi dari retryWrites=false

Jika Anda memutakhirkan ke versi mesin 8.0.2 dan saat ini menggunakan retryWrites=false dalam string koneksi Anda:

  1. Tingkatkan cluster Anda ke versi mesin 8.0.2 atau yang lebih baru.

  2. Hapus retryWrites=false dari string koneksi aplikasi Anda, atau ubah menjadiretryWrites=true.

  3. Tidak diperlukan perubahan kode aplikasi. Pengemudi menangani percobaan ulang secara otomatis.