Gruppieren mehrerer Vorgänge in Transaktionen in Azure Cosmos DB for MongoDB vCore
GILT FÜR: MongoDB-vCore
Es ist üblich, mehrere Vorgänge in einer einzelnen Transaktion zu gruppieren, um entweder einen Commit oder ein Rollback durchzuführen. In Datenbankprinzipien implementieren Transaktionen in der Regel vier wichtige ACID-Prinzipien. ACID steht für Folgendes:
- Atomarität: Transaktionen werden vollständig oder gar nicht abgeschlossen.
- Konsistenz: Datenbanken wechseln von einem konsistenten Zustand in einen anderen.
- Isolation: Einzelne Transaktionen sind von gleichzeitigen Transaktionen abgeschirmt.
- Dauerhaftigkeit: Abgeschlossene Transaktionen sind dauerhaft und stellen sicher, dass die Daten auch bei Systemausfällen konsistent bleiben.
Die ACID-Prinzipien in der Datenbankverwaltung stellen sicher, dass Transaktionen zuverlässig verarbeitet werden. Azure Cosmos DB for MongoDB vCore implementiert diese Prinzipien, sodass Sie Transaktionen für mehrere Vorgänge erstellen können.
Voraussetzungen
- Ein vorhandener Azure Cosmos DB for MongoDB-vCore-Cluster.
- Falls Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen.
- Wenn Sie über ein Azure-Abonnement verfügen, erstellen Sie einen neuen Azure Cosmos DB for MongoDB vCore Cluster.
Erstellen einer Transaktion
Erstellen Sie eine neue Transaktion mit den entsprechenden Methoden der Entwicklersprache Ihrer Wahl. Diese Methoden umfassen in der Regel einen Wrappingmechanismus zum Gruppieren mehrerer Transaktionen und eine Methode zum Committen der Transaktion.
Hinweis
In den Beispielen in diesem Abschnitt wird davon ausgegangen, dass Sie über eine Sammlungsvariable mit dem Namen collection
verfügen.
Verwenden Sie
startSession()
, um eine Clientsitzung für den Transaktionsvorgang zu erstellen.const transactionSession = client.startSession();
Erstellen Sie mithilfe von
withTransaction()
eine Transaktion, und platzieren Sie alle relevanten Transaktionsvorgänge innerhalb des Rückrufs.await transactionSession.withTransaction(async () => { await collection.insertOne({ name: "Coolarn shirt", price: 38.00 }, transactionSession); await collection.insertOne({ name: "Coolarn shirt button", price: 1.50 }, transactionSession); });
Committen Sie die Transaktion mithilfe von
commitTransaction()
.transactionSession.commitTransaction();
Verwenden Sie
endSession()
, um die Transaktionssitzung zu beenden.transactionSession.endSession();
Durchführen des Rollbacks für eine Transaktion
Gelegentlich müssen Sie eine Transaktion möglicherweise rückgängig machen, bevor sie committet wird.
Wenn Sie eine vorhandene Transaktionssitzung verwenden, brechen Sie die Transaktion mit
abortTransaction()
ab.transactionSession.abortTransaction();
Beenden Sie die Transaktionssitzung.
transactionSession.endSession();