Udostępnij za pośrednictwem


Transakcyjne operacje wsadowe w usłudze Azure Cosmos DB

DOTYCZY: NoSQL

Wsad transakcyjny opisuje grupę operacji punktów, które muszą zakończyć się powodzeniem lub niepowodzeniem wraz z tym samym kluczem partycji w kontenerze. Operacje są definiowane, dodawane do partii, a partia jest wykonywana. Jeśli wszystkie operacje kończą się powodzeniem w kolejności, w której zostały opisane w transakcyjnej operacji wsadowej, transakcja zostanie zatwierdzona. Jeśli jednak jakakolwiek operacja zakończy się niepowodzeniem, cała transakcja zostanie wycofana.

Co to jest transakcja w usłudze Azure Cosmos DB

Transakcja w typowej bazie danych może być zdefiniowana jako sekwencja operacji wykonywanych jako pojedyncza jednostka logiczna pracy. Każda transakcja zapewnia gwarancje właściwości ACID (niepodzielność, spójność, izolacja, trwałość).

  • Niepodzielność gwarantuje, że wszystkie operacje wykonywane wewnątrz transakcji są traktowane jako pojedyncza jednostka, a wszystkie z nich są zatwierdzane lub żadna z nich.
  • Spójność zapewnia, że dane są zawsze w prawidłowym stanie między transakcjami.
  • Izolacja gwarantuje, że żadne dwie transakcje nie zakłócają siebie — wiele systemów komercyjnych zapewnia wiele poziomów izolacji, które mogą być używane na podstawie potrzeb aplikacji.
  • Trwałość gwarantuje, że każda zmiana zatwierdzona w bazie danych zawsze będzie obecna. Usługa Azure Cosmos DB obsługuje pełne transakcje zgodne ze standardem ACID z izolacją migawki dla operacji w ramach tego samego klucza partycji logicznej.

Transakcyjne operacje wsadowe i procedury składowane

Usługa Azure Cosmos DB obecnie obsługuje procedury składowane, które zapewniają również zakres transakcyjny operacji. Jednak transakcyjne operacje wsadowe oferują następujące korzyści:

  • Opcja języka — transakcyjna partia jest obsługiwana w zestawie SDK i języku, z którym pracujesz, podczas gdy procedury składowane muszą być napisane w języku JavaScript.
  • Przechowywanie wersji kodu — przechowywanie wersji kodu aplikacji i dołączanie go do potoku ciągłej integracji/ciągłego wdrażania jest znacznie bardziej naturalne niż organizowanie aktualizacji procedury składowanej i upewnienie się, że przerzucanie odbywa się we właściwym czasie. Ułatwia również wycofywanie zmian.
  • Wydajność — mniejsze opóźnienie operacji równoważnych o maksymalnie 30% w porównaniu z wykonaniem procedury składowanej.
  • Serializacja zawartości — każda operacja w partii transakcyjnej może używać niestandardowych opcji serializacji dla ładunku.

Jak utworzyć transakcyjną operację wsadową

Podczas tworzenia transakcyjnej operacji wsadowej rozpocznij od wystąpienia kontenera i wywołaj metodę CreateTransactionalBatch:

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

TransactionalBatch batch = container.CreateTransactionalBatch(partitionKey);

Następnie dodaj wiele operacji do partii:

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

Na koniec wywołaj metodę ExecuteAsync w partii:

using TransactionalBatchResponse response = await batch.ExecuteAsync();

Po odebraniu odpowiedzi sprawdź, czy odpowiedź zakończyła się pomyślnie. Jeśli odpowiedź wskazuje powodzenie, wyodrębnij wyniki:

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

Ważne

Jeśli wystąpi błąd, operacja, która zakończyła się niepowodzeniem, będzie mieć kod stanu odpowiadającego mu błędu. Wszystkie pozostałe operacje będą miały kod stanu 424 (zależność nie powiodła się). Jeśli operacja nie powiedzie się, ponieważ próbuje utworzyć element, który już istnieje, zostanie zwrócony kod stanu 409 (konflikt). Kod stanu umożliwia zidentyfikowanie przyczyny niepowodzenia transakcji.