

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
<a name="retryable-writes"></a>

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=true`dalam 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
<a name="retryable-writes-requirements"></a>

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 menyertakan`retryWrites=true`, atau driver harus default untuk penulisan yang dapat dicoba ulang (sebagian besar driver saat ini melakukannya).

## Operasi yang didukung
<a name="retryable-writes-supported-operations"></a>

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 dari`insertOne`,`updateOne`,`deleteOne`, atau `replaceOne` operasi)

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

**catatan**  
`commitTransaction`dan `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](#retryable-writes-limitations).

## Batasan
<a name="retryable-writes-limitations"></a>

Batasan berikut berlaku untuk penulisan yang dapat dicoba ulang di Amazon DocumentDB:
+ `updateMany`dan 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.
+ Untuk`findOneAndUpdate`,`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
<a name="retryable-writes-enabling"></a>

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 ke`retryWrites=true`, Anda dapat menghapus eksplisit apa pun `retryWrites=false` dari string koneksi Anda.

Untuk panduan lengkap string koneksi, lihat[Menghubungkan secara terprogram ke Amazon DocumentDB](connect_programmatically.md).

## Cara kerja penulisan yang dapat dicoba ulang
<a name="retryable-writes-how-it-works"></a>

Ketika aplikasi Anda mengirim write with`retryWrites=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` dan`txnNumber`), 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
<a name="retryable-writes-errors"></a>

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
<a name="retryable-writes-migration"></a>

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.

1. Hapus `retryWrites=false` dari string koneksi aplikasi Anda, atau ubah menjadi`retryWrites=true`.

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