Praktik terbaik untuk menangani pembaruan bersamaan di DynamoDB - Amazon DynamoDB

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 memodifikasi data yang sama pada saat yang sama. Tanpa kontrol konkurensi, penulisan bersamaan ini dapat menyebabkan pembaruan yang hilang, data yang tidak konsisten, atau kondisi balapan. DynamoDB menyediakan beberapa mekanisme untuk membantu Anda mengelola akses bersamaan dan menjaga integritas data.

catatan

Operasi penulisan individual seperti UpdateItem atom dan selalu beroperasi pada versi item terbaru, terlepas dari konkurensi. Strategi penguncian diperlukan ketika aplikasi Anda harus membaca item dan kemudian menulisnya kembali berdasarkan nilai baca ( read-modify-writesiklus), 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 — 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 Pertikaian rendah, percobaan ulang yang murah
Penguncian pesimis (transaksi) TransactWriteItems Atomisitas multi-item, pertengkaran sedang
Penguncian pesimis (klien kunci) Meja kunci khusus dengan sewa dan detak jantung Alur kerja yang berjalan lama, 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 kembali menulis yang gagal tidak mahal.

  • Anda memperbarui satu item pada satu waktu.

Gunakan transaksi saat:
  • Anda perlu memperbarui beberapa item secara atom.

  • Anda memerlukan all-or-nothing semantik di seluruh item atau tabel.

  • Anda perlu menggabungkan pemeriksaan kondisi dengan menulis 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 menimpa penulisan bersamaan di Wilayah lain tanpa pemeriksaan versi. Rancang aplikasi Anda untuk menangani konflik di tingkat aplikasi saat menggunakan tabel global.