Operasi batch transaksional di Azure Cosmos DB

BERLAKU UNTUK: NoSQL

Batch transaksional menjelaskan sekelompok operasi titik yang perlu berhasil atau gagal bersama dengan kunci partisi yang sama dalam suatu kontainer. Operasi didefinisikan, ditambahkan ke batch, dan batch dijalankan. Jika semua operasi berhasil dalam urutan yang dijelaskan dalam operasi batch transaksional, transaksi akan dilakukan. Namun, jika ada operasi yang gagal, seluruh transaksi digulung balik.

Apa itu transaksi di Azure Cosmos DB

Transaksi dalam database biasa dapat didefinisikan sebagai urutan operasi yang dilakukan sebagai satu unit kerja logis. Setiap transaksi memberikan jaminan properti ACID (Atomicity, Consistency, Isolation, Durability).

  • Atomicity (atomisitas) menjamin bahwa semua operasi yang dilakukan di dalam transaksi diperlakukan sebagai satu unit, dan semuanya diterapkan atau tidak sama sekali.
  • Consistency (konsistensi) memastikan bahwa data selalu dalam keadaan valid di seluruh transaksi.
  • Isolation (isolasi) menjamin bahwa tidak ada dua transaksi yang saling mengganggu; sejumlah sistem komersial menyediakan beberapa tingkat isolasi yang dapat digunakan berdasarkan kebutuhan aplikasi.
  • Durability (durabilitas) memastikan agar setiap perubahan yang diterapkan dalam database akan selalu ada. Azure Cosmos DB mendukung transaksi lengkap yang mematuhi ACID dengan isolasi snapshot untuk operasi dalam kunci partisi logis yang sama.

Operasi batch transaksional dan prosedur tersimpan

Azure Cosmos DB saat ini mendukung prosedur tersimpan, yang juga menyediakan cakupan transaksional pada operasi. Namun, operasi batch transaksional menawarkan keuntungan berikut:

  • Opsi bahasa - Batch transaksional didukung pada SDK dan bahasa yang sudah Anda fungsikan, sementara prosedur tersimpan perlu ditulis dalam JavaScript.
  • Pembuatan versi kode - Pembuatan versi kode aplikasi dan orientasi ke alur CI/CD Anda jauh lebih alami dibandingkan pengaturan pembaruan prosedur tersimpan dan memastikan penerusan terjadi di waktu yang tepat. Ini juga membuat pembatalan berubah lebih mudah.
  • Performa - Menurunkan latensi pada operasi yang setara hingga 30% jika dibandingkan dengan eksekusi prosedur tersimpan.
  • Serialisasi konten – Setiap operasi dalam batch transaksional dapat menggunakan opsi serialisasi kustom untuk payloadnya.

Cara membuat operasi batch transaksional

Saat membuat operasi batch transaksional, mulailah dengan instans kontainer dan panggil CreateTransactionalBatch:

PartitionKey partitionKey = new PartitionKey("road-bikes");

TransactionalBatch batch = container.CreateTransactionalBatch(partitionKey);

Selanjutnya, tambahkan beberapa operasi ke batch:

Product bike = new (
    id: "68719520766",
    category: "road-bikes",
    name: "Chropen Road Bike"
);

batch.CreateItem<Product>(bike);

Part part = new (
    id: "68719519885",
    category: "road-bikes",
    name: "Tronosuros Tire",
    productId: bike.id
);

batch.CreateItem<Part>(part);

Terakhir, panggil ExecuteAsync pada batch:

using TransactionalBatchResponse response = await batch.ExecuteAsync();

Setelah respons diterima, periksa apakah respons berhasil. Jika respons menunjukkan sebuah keberhasilan, ekstrak hasilnya:

if (response.IsSuccessStatusCode)
{
    TransactionalBatchOperationResult<Product> productResponse;
    productResponse = response.GetOperationResultAtIndex<Product>(0);
    Product productResult = productResponse.Resource;

    TransactionalBatchOperationResult<Part> partResponse;
    partResponse = response.GetOperationResultAtIndex<Part>(1);
    Part partResult = partResponse.Resource;
}

Penting

Jika ada kegagalan, operasi yang gagal akan memiliki kode status kesalahan yang sesuai. Semua operasi lainnya akan memiliki kode status 424 (dependensi gagal). Jika operasi gagal karena mencoba membuat item yang sudah ada, kode status 409 (konflik) dikembalikan. Kode status memungkinkan seseorang untuk mengidentifikasi penyebab kegagalan transaksi.