Penguncian optimis menggunakan DynamoDB dan model persistensi objek AWS SDK for .NET - Amazon DynamoDB

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

Penguncian optimis menggunakan DynamoDB dan model persistensi objek AWS SDK for .NET

Dukungan penguncian optimis dalam model persistensi objek memastikan bahwa versi item untuk aplikasi Anda sama dengan versi item di sisi server sebelum memperbarui atau menghapus item. Misalkan Anda mengambil item untuk pembaruan. Namun, sebelum Anda mengirimkan pembaruan Anda kembali, beberapa aplikasi lain memperbarui item yang sama. Sekarang aplikasi Anda memiliki salinan item yang sudah usang. Tanpa penguncian optimis, setiap pembaruan yang Anda lakukan akan menimpa pembaruan yang dibuat oleh aplikasi lain.

Fitur penguncian optimis model persistensi objek menyediakan tanda DynamoDBVersion yang dapat Anda gunakan untuk mengaktifkan penguncian optimis. Untuk menggunakan fitur ini, Anda menambahkan properti ke kelas Anda untuk menyimpan nomor versi. Anda menambahkan atribut DynamoDBVersion untuk properti. Ketika Anda pertama kali menyimpan objek, DynamoDBContext menetapkan nomor versi dan menambah nilai ini setiap kali Anda memperbarui item.

Permintaan perbarui atau hapus Anda akan berhasil hanya jika versi objek sisi kliennya cocok dengan nomor versi item yang sesuai di sisi server. Jika aplikasi Anda memiliki salinan yang sudah usang, aplikasi tersebut harus mendapatkan versi terbaru dari server sebelum dapat memperbarui atau menghapus item.

Contoh kode C# berikut mendefinisikan kelas Book dengan atribut persistensi objek yang memetakannya ke tabel ProductCatalog. Properti VersionNumber di kelas yang dilengkapi dengan atribut DynamoDBVersion menyimpan nilai nomor versi.

contoh
[DynamoDBTable("ProductCatalog")] public class Book { [DynamoDBHashKey] //Partition key public int Id { get; set; } [DynamoDBProperty] public string Title { get; set; } [DynamoDBProperty] public string ISBN { get; set; } [DynamoDBProperty("Authors")] public List<string> BookAuthors { get; set; } [DynamoDBVersion] public int? VersionNumber { get; set; } }
catatan

Anda dapat menerapkan atribut DynamoDBVersion hanya untuk jenis primitif numerik yang dapat di-null-kan (seperti int?).

Penguncian optimis memiliki dampak berikut terhadap operasi DynamoDBContext:

  • Untuk item baru, DynamoDBContext menetapkan nomor versi awal 0. Jika Anda mengambil item yang ada, memperbarui satu atau beberapa properti, dan mencoba untuk menyimpan perubahan, operasi simpan hanya akan berhasil jika nomor versi di sisi klien dan sisi server cocok. DynamoDBContext menambahkan nomor versi. Anda tidak perlu mengatur nomor versi.

  • Metode Delete menyediakan beban berlebih yang dapat mengambil nilai kunci primer atau objek sebagai parameter, seperti yang ditunjukkan dalam contoh kode C# berikut.

    contoh
    DynamoDBContext context = new DynamoDBContext(client); ... // Load a book. Book book = context.Load<ProductCatalog>(111); // Do other operations. // Delete 1 - Pass in the book object. context.Delete<ProductCatalog>(book); // Delete 2 - Pass in the Id (primary key) context.Delete<ProductCatalog>(222);

    Jika Anda menyediakan objek sebagai parameter, penghapusan berhasil hanya jika versi objek cocok dengan versi item sisi server yang sesuai. Namun, jika Anda memberikan nilai kunci primer sebagai parameter, DynamoDBContext tidak mengenali nomor versi apa pun, dan menghapus item tanpa melakukan pemeriksaan versi.

    Perhatikan bahwa implementasi internal penguncian optimis dalam kode model persistensi objek menggunakan pembaruan bersyarat dan tindakan API penghapusan bersyarat di DynamoDB.

Menonaktifkan penguncian optimis

Untuk menonaktifkan penguncian optimis, gunakan properti konfigurasi SkipVersionCheck. Anda dapat mengatur properti ini saat membuat DynamoDBContext. Dalam kasus ini, penguncian optimis dinonaktifkan untuk permintaan apa pun yang Anda buat menggunakan konteks. Untuk informasi selengkapnya, lihat Menentukan parameter opsional untuk D ynamoDBContext .

Alih-alih menetapkan properti pada tingkat konteks, Anda dapat menonaktifkan penguncian optimis untuk operasi tertentu, seperti yang ditunjukkan dalam contoh kode C# berikut. Contoh ini menggunakan konteks untuk menghapus item buku. Metode Delete menetapkan properti SkipVersionCheck opsional ke true, menonaktifkan pemeriksaan penentuan versi.

contoh
DynamoDBContext context = new DynamoDBContext(client); // Load a book. Book book = context.Load<ProductCatalog>(111); ... // Delete the book. context.Delete<Book>(book, new DynamoDBContextConfig { SkipVersionCheck = true });