Transakční dávkové operace ve službě Azure Cosmos DB

PLATÍ PRO: NoSQL

Transakční dávka popisuje skupinu operací bodu, které musí být úspěšné nebo neúspěšné společně se stejným klíčem oddílu v kontejneru. Operace se definují, přidají do dávky a dávka se spustí. Pokud všechny operace proběhnou úspěšně v pořadí, v jakém jsou popsány v rámci transakční dávkové operace, transakce se potvrdí. Pokud ale nějaká operace selže, celá transakce se vrátí zpět.

Co je transakce ve službě Azure Cosmos DB

Transakce v typické databázi lze definovat jako posloupnost operací provedených jako jedna logická jednotka práce. Každá transakce poskytuje záruky vlastností ACID (Atomicity, Consistency, Isolation, Durability).

  • Atomicita zaručuje, že všechny operace provedené uvnitř transakce jsou považovány za jednu jednotku a všechny z nich jsou potvrzeny nebo žádné z nich nejsou.
  • Konzistence zajišťuje, že data jsou vždy v platném stavu napříč transakcemi.
  • Izolace zaručuje, že žádné dvě transakce vzájemně nezasahují – mnoho komerčních systémů poskytuje více úrovní izolace, které lze použít na základě potřeb aplikace.
  • Stálost zajišťuje, že všechny změny, které jsou potvrzeny v databázi, budou vždy přítomny. Azure Cosmos DB podporuje úplné transakce kompatibilní se službou ACID s izolací snímků pro operace v rámci stejného klíče logického oddílu.

Transakční dávkové operace a uložené procedury

Azure Cosmos DB v současné době podporuje uložené procedury, které také poskytují transakční obor operací. Transakční dávkové operace však nabízejí následující výhody:

  • Možnost jazyka – Transakční dávka je podporována v sadě SDK a jazyce, se kterým už pracujete, zatímco uložené procedury musí být napsané v JavaScriptu.
  • Správa verzí kódu – Kód aplikace pro správu verzí a jeho onboarding do kanálu CI/CD je mnohem přirozenější než orchestrace aktualizace uložené procedury a zajištění toho, aby se vrácení stalo ve správný čas. Usnadňuje také vrácení změn zpět.
  • Výkon – Nižší latence ekvivalentních operací až o 30 % ve srovnání s prováděním uložené procedury.
  • Serializace obsahu – Každá operace v transakční dávce může pro svou datovou část používat vlastní možnosti serializace.

Vytvoření transakční dávkové operace

Při vytváření transakční dávkové operace začněte s instancí kontejneru a volejte CreateTransactionalBatch:

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

TransactionalBatch batch = container.CreateTransactionalBatch(partitionKey);

V dalším kroku přidejte do dávky více operací:

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

Nakonec v dávce zavolejte ExecuteAsync :

using TransactionalBatchResponse response = await batch.ExecuteAsync();

Po přijetí odpovědi zkontrolujte, jestli je odpověď úspěšná. Pokud odpověď značí úspěch, extrahujte výsledky:

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

Důležité

Pokud dojde k selhání, operace, která selhala, bude mít stavový kód odpovídající chyby. Všechny ostatní operace budou mít stavový kód 424 (neúspěšná závislost). Pokud operace selže, protože se pokusí vytvořit položku, která již existuje, vrátí se stavový kód 409 (konflikt). Stavový kód umožňuje určit příčinu selhání transakce.