Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR:  NoSQL
Transaktionsbatch beskriver en grupp punktåtgärder som antingen måste lyckas eller misslyckas tillsammans med samma partitionsnyckel i en container. Åtgärder definieras, läggs till i batchen och batchen körs. Om alla åtgärder lyckas i den ordning de beskrivs i den transaktionella batchåtgärden kommer transaktionen att genomföras. Men om någon åtgärd misslyckas återställs hela transaktionen.
Vad är en transaktion i Azure Cosmos DB
En transaktion i en typisk databas kan definieras som en sekvens med åtgärder som utförs som en enda logisk arbetsenhet. Varje transaktion ger ACID-egenskapsgarantier (Atomicity, Consistency, Isolation, Durability).
- Atomicitet garanterar att alla åtgärder som utförs i en transaktion behandlas som en enda enhet, och antingen genomförs alla eller ingen av dem.
- Konsekvens säkerställer att data alltid är i ett giltigt tillstånd mellan transaktioner.
- Isolering garanterar att inga två transaktioner stör varandra – många kommersiella system tillhandahåller flera isoleringsnivåer som kan användas baserat på programmets behov.
- Hållbarhet säkerställer att alla ändringar som görs i en databas alltid kommer att finnas. Azure Cosmos DB stöder fullständiga ACID-kompatibla transaktioner med ögonblicksbildisolering för åtgärder inom samma logiska partitionsnyckel.
Transaktionella batchåtgärder och lagrade procedurer
Azure Cosmos DB stöder för närvarande lagrade procedurer, vilket även ger transaktionsomfånget för åtgärder. Transaktionella batchåtgärder erbjuder dock följande fördelar:
- Språkalternativ – Transaktionsbatch stöds på det SDK och språk som du redan arbetar med, medan lagrade procedurer måste skrivas i JavaScript.
- Kodversionshantering – Versionshantering av programkod och implementering i en CI/CD-pipeline är mycket mer naturligt än att samordna uppdateringen av en lagrad procedur och se till att övergången sker vid rätt tidpunkt. Det gör det också enklare att återställa ändringar.
- Prestanda – Kortare svarstid för motsvarande åtgärder med upp till 30 % jämfört med körningen av den lagrade proceduren.
- Innehållsserialisering – Varje åtgärd i en transaktionsbatch kan använda anpassade serialiseringsalternativ för nyttolasten.
Hur man skapar en batchtransaktionsoperation
När du skapar en transaktionell batchåtgärd börjar du med en containerinstans och anropar CreateTransactionalBatch:
PartitionKey partitionKey = new PartitionKey("road-bikes");
TransactionalBatch batch = container.CreateTransactionalBatch(partitionKey);
Lägg sedan till flera åtgärder i batchen:
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);
Anropa slutligen ExecuteAsync på batchen:
using TransactionalBatchResponse response = await batch.ExecuteAsync();
När svaret har tagits emot undersöker du om svaret är framgångsrikt. Om svaret indikerar ett lyckat resultat extraherar du resultatet:
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;
}
Viktigt!
Om det uppstår ett fel kommer den åtgärd som har misslyckats att ha en statuskod för sitt motsvarande fel. Alla andra åtgärder har statuskoden 424 (misslyckat beroende). Om åtgärden misslyckas eftersom den försöker skapa ett objekt som redan finns returneras en statuskod på 409 (konflikt). Statuskoden gör det möjligt för en att identifiera orsaken till transaktionsfelet.
Så här körs transaktionella batchåtgärder
När transactional Batch körs grupperas alla åtgärder i transactional Batch, serialiseras till en enda nyttolast och skickas som en enda begäran till Azure Cosmos DB-tjänsten.
Tjänsten tar emot begäran och kör alla åtgärder inom ett transaktionsomfång och returnerar ett svar med samma serialiseringsprotokoll. Det här svaret är antingen en framgång eller ett misslyckande, och tillhandahåller enskilda svar för varje operation.
SDK:t exponerar svaret så att du kan verifiera resultatet och eventuellt extrahera vart och ett av de interna åtgärdsresultaten.
Begränsningar
För närvarande finns det två kända gränser:
- Storleksgränsen för Azure Cosmos DB-begäranden begränsar storleken på transaktionsbatchnyttolasten till högst 2 MB och den maximala körningstiden är 5 sekunder.
- Det finns en aktuell gräns på 100 åtgärder per transaktionell batch för att säkerställa att prestanda är som förväntat och inom serviceavtal.