Tranzakciós kötegműveletek az Azure Cosmos DB-ben

A KÖVETKEZŐRE VONATKOZIK: NoSQL

A tranzakciós köteg olyan pontműveletek egy csoportját írja le, amelyeknek sikeresnek vagy sikertelennek kell működnie egy tároló ugyanazon partíciókulcsával együtt. A műveletek definiálva vannak, hozzáadva a köteghez, és a köteg végrehajtása történik. Ha minden művelet sikeres a tranzakciós kötegműveletben leírt sorrendben, a tranzakció véglegesítése történik. Ha azonban egy művelet meghiúsul, a teljes tranzakció vissza lesz állítva.

Mi az a tranzakció az Azure Cosmos DB-ben?

A tipikus adatbázisok tranzakciói úgy határozhatók meg, mint egyetlen logikai munkaegységként végrehajtott műveletek sorozata. Minden tranzakció ACID (Atomitás, Konzisztencia, Elkülönítés, Tartósság) tulajdonsággaranciát biztosít.

  • Az atomiság garantálja, hogy a tranzakción belül végrehajtott összes művelet egyetlen egységként lesz kezelve, és vagy mindegyik véglegesített, vagy egyik sem.
  • A konzisztencia biztosítja, hogy az adatok mindig érvényes állapotban legyenek a tranzakciók között.
  • Az elkülönítés garantálja, hogy két tranzakció ne zavarja egymást – számos kereskedelmi rendszer több elkülönítési szintet biztosít, amelyek az alkalmazás igényeinek megfelelően használhatók.
  • A tartósság biztosítja, hogy az adatbázisban véglegesített módosítások mindig jelen legyenek. Az Azure Cosmos DB támogatja a teljes ACID-kompatibilis tranzakciókat pillanatkép-elkülönítéssel az ugyanazon logikai partíciókulcson belüli műveletekhez.

Tranzakciós kötegműveletek és tárolt eljárások

Az Azure Cosmos DB jelenleg támogatja a tárolt eljárásokat, amelyek a műveletek tranzakciós hatókörét is biztosítják. A tranzakciós kötegműveletek azonban a következő előnyöket kínálják:

  • Nyelvi beállítás – A tranzakciós köteg támogatott az SDK-ban és a már meglévő nyelven, míg a tárolt eljárásokat JavaScriptben kell írni.
  • Kódverziózás – Az alkalmazáskód verziószámozása és a CI/CD-folyamatra való előkészítése sokkal természetesebb, mint a tárolt eljárás frissítésének vezénylése, és annak biztosítása, hogy az átállás a megfelelő időben történjen. Emellett megkönnyíti a módosítások visszaállítását is.
  • Teljesítmény – A tárolt eljárás végrehajtásához képest az egyenértékű műveletek késése akár 30%-kal is csökkenthető.
  • Tartalom szerializálása – A tranzakciós kötegek minden egyes művelete egyéni szerializálási lehetőségeket használhat a hasznos adatokhoz.

Tranzakciós kötegművelet létrehozása

Tranzakciós kötegművelet létrehozásakor kezdje egy tárolópéldánysal, és hívja meg a CreateTransactionalBatch parancsot:

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

TransactionalBatch batch = container.CreateTransactionalBatch(partitionKey);

Ezután adjon hozzá több műveletet a köteghez:

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

Végül hívja meg az ExecuteAsync parancsot a kötegen:

using TransactionalBatchResponse response = await batch.ExecuteAsync();

A válasz beérkezése után ellenőrizze, hogy a válasz sikeres-e. Ha a válasz sikerességet jelez, nyerje ki az eredményeket:

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

Fontos

Ha hiba történik, a sikertelen művelet állapotkódja a megfelelő hibával fog rendelkezni. Az összes többi művelet 424 állapotkóddal (sikertelen függőség) fog rendelkezni. Ha a művelet meghiúsul, mert egy már létező elemet próbál létrehozni, a rendszer egy 409-s állapotkódot (ütközést) ad vissza. Az állapotkód lehetővé teszi a tranzakciós hiba okának azonosítását.