Share via


Transactionele batchbewerkingen in Azure Cosmos DB

VAN TOEPASSING OP: NoSQL

Transactionele batch beschrijft een groep puntbewerkingen die samen met dezelfde partitiesleutel in een container moeten slagen of mislukken. Bewerkingen worden gedefinieerd, toegevoegd aan de batch en de batch wordt uitgevoerd. Als alle bewerkingen slagen in de volgorde waarin ze worden beschreven in de transactionele batchbewerking, wordt de transactie doorgevoerd. Als een bewerking echter mislukt, wordt de hele transactie teruggedraaid.

Wat is een transactie in Azure Cosmos DB?

Een transactie in een typische database kan worden gedefinieerd als een reeks bewerkingen die worden uitgevoerd als één logische werkeenheid. Elke transactie biedt ACID-eigenschapsgaranties (Atomiciteit, Consistentie, Isolatie, Duurzaamheid).

  • Atomiciteit garandeert dat alle bewerkingen die binnen een transactie worden uitgevoerd, worden behandeld als één eenheid, en dat ze allemaal worden doorgevoerd of geen van deze bewerkingen.
  • Consistentie zorgt ervoor dat de gegevens altijd een geldige status hebben tussen transacties.
  • Isolatie garandeert dat geen twee transacties elkaar verstoren: veel commerciële systemen bieden meerdere isolatieniveaus die kunnen worden gebruikt op basis van de toepassingsbehoeften.
  • Duurzaamheid zorgt ervoor dat elke wijziging die wordt doorgevoerd in een database altijd aanwezig is. Azure Cosmos DB ondersteunt volledige ACID-compatibele transacties met momentopname-isolatie voor bewerkingen binnen dezelfde logische partitiesleutel.

Transactionele batchbewerkingen en opgeslagen procedures

Azure Cosmos DB ondersteunt momenteel opgeslagen procedures, die ook het transactionele bereik bieden voor bewerkingen. Transactionele batchbewerkingen bieden echter de volgende voordelen:

  • Taaloptie : transactionele batch wordt ondersteund op de SDK en de taal waarmee u al werkt, terwijl opgeslagen procedures moeten worden geschreven in JavaScript.
  • Codeversiebeheer : toepassingscode voor versiebeheer en onboarding in uw CI/CD-pijplijn is veel natuurlijker dan het organiseren van de update van een opgeslagen procedure en ervoor zorgen dat de rollover op het juiste moment plaatsvindt. Het maakt ook het terugdraaien van wijzigingen eenvoudiger.
  • Prestaties : verminderde latentie voor equivalente bewerkingen met maximaal 30% in vergelijking met de uitvoering van de opgeslagen procedure.
  • Inhoudsserialisatie : elke bewerking in een transactionele batch kan aangepaste serialisatieopties gebruiken voor de nettolading.

Een transactionele batchbewerking maken

Wanneer u een transactionele batchbewerking maakt, begint u met een containerinstantie en roept u CreateTransactionalBatch aan:

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

TransactionalBatch batch = container.CreateTransactionalBatch(partitionKey);

Voeg vervolgens meerdere bewerkingen toe aan de 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);

Roep ten slotte ExecuteAsync aan in de batch:

using TransactionalBatchResponse response = await batch.ExecuteAsync();

Zodra het antwoord is ontvangen, controleert u of het antwoord is geslaagd. Als het antwoord aangeeft dat het is gelukt, extraheert u de resultaten:

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

Belangrijk

Als er een fout optreedt, heeft de mislukte bewerking een statuscode van de bijbehorende fout. Alle andere bewerkingen hebben een 424-statuscode (mislukte afhankelijkheid). Als de bewerking mislukt omdat er wordt geprobeerd een item te maken dat al bestaat, wordt een statuscode van 409 (conflict) geretourneerd. Met de statuscode kunt u de oorzaak van transactiefouten identificeren.