Delen via


Transactionele batchbewerkingen in Azure Cosmos DB

VAN TOEPASSING OP: NoSQL

Transactionele batch beschrijft een groep puntoperaties die samen moeten slagen of mislukken, met dezelfde partitiesleutel in een container. 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, als één eenheid worden beschouwd, en dat ofwel ze allemaal worden doorgevoerd, of geen van alle.
  • 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 - Het versiebeheer en onboarden van toepassingscode in uw CI/CD-pijplijn is veel natuurlijker dan het organiseren van de update van een stored procedure en ervoor zorgen dat de overgang 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.

Zo maak je een transactionele batchbewerking

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.

Hoe worden transactionele batchbewerkingen uitgevoerd

Wanneer de Transactionele Batch wordt uitgevoerd, worden alle bewerkingen in de transactionele batch gegroepeerd, geserialiseerd in één nettolading en verzonden als één aanvraag naar de Azure Cosmos DB-service.

De service ontvangt de aanvraag en voert alle bewerkingen uit binnen een transactioneel bereik en retourneert een antwoord met hetzelfde serialisatieprotocol. Dit antwoord is een succes of een fout en levert afzonderlijke bewerkingsreacties per bewerking.

De SDK toont het antwoord voor u om het resultaat te verifiëren en, optioneel, elk van de interne bewerkingsresultaten te extraheren.

Beperkingen

Er zijn momenteel twee bekende limieten:

  • De maximale aanvraaggrootte van Azure Cosmos DB beperkt de grootte van de transactionele Batch-nettolading tot niet meer dan 2 MB en de maximale uitvoeringstijd is 5 seconden.
  • Er is een huidige limiet van 100 bewerkingen per transactionele batch om ervoor te zorgen dat de prestaties naar verwachting en binnen SLA's worden uitgevoerd.

Volgende stap