Agrupación de varias operaciones en transacciones en Azure Cosmos DB para núcleo virtual de MongoDB
SE APLICA A: núcleo virtual de MongoDB
Es habitual querer agrupar varias operaciones en una sola transacción para confirmarlas o revertirlas juntas. En los principios de la base de datos, las transacciones suelen implementar cuatro principios clave ACID. ACID es un acrónimo que, en inglés, está formado por:
- Atomicidad: las transacciones se completan completamente o no.
- Coherencia: las bases de datos pasan de un estado coherente a otro.
- Aislamiento: las transacciones individuales están blindadas de las simultáneas.
- Durabilidad: las transacciones terminadas son permanentes, lo que garantiza que los datos sean coherentes, incluso durante los errores del sistema.
Estos principios de ACID en la administración de bases de datos garantizan que las transacciones se procesan de forma confiable. El núcleo virtual de Azure Cosmos DB for MongoDB implementa estos principios, lo que le permite crear transacciones para varias operaciones.
Requisitos previos
- Un clúster existente de núcleos virtuales de Azure Cosmos DB for MongoDB.
- Si no tiene una suscripción de Azure, cree una cuenta gratuita.
- Si tiene una suscripción de Azure existente, cree un clúster de núcleo virtual de Azure Cosmos DB for MongoDB.
Creación de una transacción
Cree una transacción con los métodos adecuados del lenguaje de desarrollador que prefiera. Estos métodos suelen incluir algún mecanismo de ajuste para agrupar varias transacciones y un método para confirmar la transacción.
Nota:
En los ejemplos de esta sección se asume que tiene una variable de colección denominada collection
.
Use
startSession()
para crear una sesión de cliente para la operación de transacción.const transactionSession = client.startSession();
Cree una transacción mediante
withTransaction()
y coloque todas las operaciones de transacción pertinentes dentro de la devolución de llamada.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); });
Confirme la transacción mediante
commitTransaction()
.transactionSession.commitTransaction();
Use
endSession()
para finalizar la sesión de transacción.transactionSession.endSession();
Reversión de una transacción
En ocasiones, es posible que tenga que deshacer una transacción antes de confirmarla.
Con una sesión de transacción existente, anule la transacción con
abortTransaction()
.transactionSession.abortTransaction();
Finalice la sesión de transacción.
transactionSession.endSession();