Azure Cosmos DB'de işlem toplu işlemleri

UYGULANANLAR: NoSQL

İşlem toplu işlemi, kapsayıcıdaki aynı bölüm anahtarıyla birlikte başarılı olması veya başarısız olması gereken bir grup nokta işlemini açıklar. İşlemler tanımlanır, toplu işe eklenir ve toplu iş yürütülür. Tüm işlemler işlem toplu işlemi içinde tanımlandığı sırayla başarılı olursa, işlem işlenir. Ancak herhangi bir işlem başarısız olursa tüm işlem geri alınır.

Azure Cosmos DB'de işlem nedir?

Tipik bir veritabanındaki bir işlem, tek bir mantıksal iş birimi olarak gerçekleştirilen bir işlem dizisi olarak tanımlanabilir. Her işlem ACID (Bölünmezlik, Tutarlılık, Yalıtım, Dayanıklılık) özellik garantileri sağlar.

  • Bölünmezlik , bir işlem içinde yapılan tüm işlemlerin tek bir birim olarak ele alınıp bunların tümünün işlenmediğini veya hiçbirinin işlenmediğini garanti eder.
  • Tutarlılık , verilerin işlemler arasında her zaman geçerli bir durumda olmasını sağlar.
  • Yalıtım , iki işlemin birbirini engellemesini garanti eder. Birçok ticari sistem, uygulama gereksinimlerine göre kullanılabilecek birden çok yalıtım düzeyi sağlar.
  • Dayanıklılık , veritabanında işlenen tüm değişikliklerin her zaman mevcut olmasını sağlar. Azure Cosmos DB, aynı mantıksal bölüm anahtarı içindeki işlemler için anlık görüntü yalıtımına sahip tam ACID uyumlu işlemleri destekler.

İşlem toplu işlemleri ve saklı yordamlar

Azure Cosmos DB şu anda işlemlerde işlem kapsamını da sağlayan saklı yordamları destekler. Ancak işlem toplu işlemleri aşağıdaki avantajları sunar:

  • Dil seçeneği – İşlem toplu işlemi zaten çalıştığınız SDK'da ve dilde desteklenirken saklı yordamların JavaScript'te yazılması gerekir.
  • Kod sürümü oluşturma – Uygulama kodunun sürümü oluşturma ve CI/CD işlem hattınıza ekleme, saklı yordamın güncelleştirilmesini düzenlemekten ve geçişin doğru zamanda gerçekleştiğinden emin olmaktan çok daha doğaldır. Ayrıca değişiklikleri geri döndürmeyi de kolaylaştırır.
  • Performans – Saklı yordam yürütmeye kıyasla eşdeğer işlemlerde gecikme süresi %30'a kadar azaltıldı.
  • İçerik serileştirme – İşlem toplu işlemi içindeki her işlem yükü için özel serileştirme seçenekleri kullanabilir.

İşlem toplu işlemi oluşturma

İşlem toplu işlemi oluştururken bir kapsayıcı örneğiyle başlayın ve CreateTransactionalBatch öğesini çağırın:

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

TransactionalBatch batch = container.CreateTransactionalBatch(partitionKey);

Ardından toplu işe birden çok işlem ekleyin:

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);

Son olarak, toplu işlemde ExecuteAsync'i çağırın:

using TransactionalBatchResponse response = await batch.ExecuteAsync();

Yanıt alındıktan sonra yanıtın başarılı olup olmadığını inceleyin. Yanıt başarılı olduğunu gösteriyorsa sonuçları ayıklayın:

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;
}

Önemli

Bir hata varsa, başarısız olan işlem ilgili hatanın durum koduna sahip olur. Diğer tüm işlemlerin 424 durum kodu (başarısız bağımlılık) olacaktır. zaten var olan bir öğe oluşturmaya çalıştığı için işlem başarısız olursa, 409 (çakışma) durum kodu döndürülür. Durum kodu, işlem hatasının nedenini belirlemesini sağlar.