Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Praktik terbaik untuk menangani pembaruan bersamaan di DynamoDB
Dalam sistem terdistribusi, beberapa proses atau pengguna dapat mencoba untuk memodifikasi data yang sama pada saat yang sama. Tanpa kontrol konkurensi, penulisan bersamaan ini dapat menyebabkan hilangnya pembaruan, data yang tidak konsisten, atau kondisi balapan. DynamoDB menyediakan beberapa mekanisme untuk membantu Anda mengelola akses bersamaan dan menjaga integritas data.
catatan
Operasi penulisan individu seperti UpdateItem bersifat atom dan selalu beroperasi pada versi terbaru dari item, terlepas dari konkurensinya. Strategi penguncian diperlukan ketika aplikasi Anda harus membaca item dan kemudian menulisnya kembali berdasarkan nilai baca (siklus baca-modifikasi-tulis), karena proses lain dapat memodifikasi item antara baca dan tulis.
Ada dua strategi utama untuk menangani pembaruan bersamaan:
-
Penguncian optimis — Mengasumsikan konflik jarang terjadi. Ini memungkinkan akses bersamaan dan mendeteksi konflik pada waktu penulisan menggunakan penulisan bersyarat. Jika konflik terdeteksi, penulisan gagal dan aplikasi dapat mencoba lagi.
-
Penguncian pesimis tis — Mengasumsikan konflik mungkin terjadi. Ini mencegah akses bersamaan dengan memperoleh akses eksklusif ke sumber daya sebelum memodifikasinya. Proses lain harus menunggu sampai kunci dilepaskan.
Tabel berikut merangkum pendekatan yang tersedia di DynamoDB:
| Pendekatan | Mekanisme | Terbaik untuk |
|---|---|---|
| Penguncian optimis | Atribut versi+penulisan bersyarat | Perselisihan rendah, percobaan ulang murah |
| Penguncian pesimis (transaksi) | TransactWriteItems |
Multi-item atomisitas, perselisihan sedang |
| Penguncian pesimis (kunci klien) | Meja kunci khusus dengan sewa dan detak jantung | Long-running alur kerja, koordinasi terdistribusi |
Memilih strategi kontrol konkurensi
Gunakan panduan berikut untuk memilih pendekatan yang tepat untuk beban kerja Anda:
- Gunakan penguncian optimis saat:
-
Konflik jarang terjadi.
Mencoba ulang penulisan yang gagal tidak mahal.
Anda memperbarui satu item pada satu waktu.
- Gunakan transaksi saat:
-
Anda perlu memperbarui beberapa item secara atomik.
Anda memerlukan semantik semua atau tidak sama sekali di seluruh item atau tabel.
Anda perlu menggabungkan pemeriksaan kondisi dengan penulisan dalam satu operasi.
- Gunakan klien kunci saat:
-
Anda perlu mengoordinasikan akses ke sumber daya eksternal di seluruh proses terdistribusi.
Bagian kritis sudah berjalan lama dan mencoba kembali konflik itu mahal.
Anda memerlukan kedaluwarsa kunci otomatis untuk menangani kegagalan proses.
catatan
Jika Anda menggunakan tabel global DynamoDB, ketahuilah bahwa tabel global menggunakan strategi rekonsiliasi “penulis terakhir menang” untuk pembaruan bersamaan. Penguncian optimis dengan nomor versi tidak berfungsi seperti yang diharapkan di seluruh Wilayah karena penulisan di satu Wilayah dapat mengganti penulisan bersamaan di Wilayah lain tanpa pemeriksaan versi. Rancang aplikasi Anda untuk menangani konflik di tingkat aplikasi saat menggunakan tabel global.