Les transaccions a MongoDB permeten executar múltiples operacions de lectura i escriptura en diversos documents com una sola unitat de treball. Això garanteix que totes les operacions dins de la transacció es completin amb èxit o es revertiran si alguna operació falla, mantenint la integritat de les dades.
Conceptes Clau
- Atomicitat: Les transaccions garanteixen que totes les operacions dins d'una transacció es completin amb èxit o es revertiran.
- Consistència: Les transaccions asseguren que la base de dades passi d'un estat vàlid a un altre estat vàlid.
- Aïllament: Les transaccions aïllen les operacions de manera que les transaccions concurrents no interfereixin entre elles.
- Durabilitat: Un cop una transacció es confirma, els canvis es mantenen fins i tot en cas de fallada del sistema.
Requisits
- MongoDB 4.0 o superior.
- Les transaccions multi-document només estan disponibles en clústers replicats.
Exemple Pràctic
- Iniciant una Transacció
Per iniciar una transacció, primer necessitem una sessió. Utilitzarem el client de MongoDB per a Node.js en aquest exemple.
const { MongoClient } = require('mongodb'); async function run() { const uri = "your_mongodb_connection_string"; const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true }); try { await client.connect(); const session = client.startSession(); session.startTransaction(); // Operacions dins de la transacció const db = client.db('testdb'); const collection = db.collection('testcollection'); await collection.insertOne({ name: "Alice" }, { session }); await collection.updateOne({ name: "Alice" }, { $set: { age: 25 } }, { session }); // Confirmar la transacció await session.commitTransaction(); console.log("Transacció completada amb èxit."); } catch (error) { console.error("Error en la transacció, revertint els canvis.", error); await session.abortTransaction(); } finally { await session.endSession(); await client.close(); } } run().catch(console.dir);
- Operacions dins de la Transacció
Les operacions dins de la transacció es realitzen utilitzant la sessió creada. En aquest exemple, inserim un document i després l'actualitzem dins de la mateixa transacció.
- Confirmant o Revertint la Transacció
- Confirmar la Transacció:
session.commitTransaction()
- Revertir la Transacció:
session.abortTransaction()
Exercici Pràctic
Exercici 1: Crear una Transacció
- Crea una base de dades anomenada
shop
. - Crea dues col·leccions:
customers
iorders
. - Escriu una transacció que:
- Inserte un nou client a la col·lecció
customers
. - Inserte una nova comanda a la col·lecció
orders
per a aquest client.
- Inserte un nou client a la col·lecció
Solució
const { MongoClient } = require('mongodb'); async function run() { const uri = "your_mongodb_connection_string"; const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true }); try { await client.connect(); const session = client.startSession(); session.startTransaction(); const db = client.db('shop'); const customers = db.collection('customers'); const orders = db.collection('orders'); const customer = { name: "John Doe", email: "[email protected]" }; const order = { product: "Laptop", quantity: 1, customerEmail: "[email protected]" }; await customers.insertOne(customer, { session }); await orders.insertOne(order, { session }); await session.commitTransaction(); console.log("Transacció completada amb èxit."); } catch (error) { console.error("Error en la transacció, revertint els canvis.", error); await session.abortTransaction(); } finally { await session.endSession(); await client.close(); } } run().catch(console.dir);
Errors Comuns i Consells
- Error de Connexió: Assegura't que la cadena de connexió a MongoDB és correcta.
- Transaccions en Clústers No Replicats: Les transaccions multi-document només funcionen en clústers replicats.
- Gestió d'Errors: Sempre inclou gestió d'errors per a revertir la transacció en cas de fallada.
Conclusió
Les transaccions a MongoDB proporcionen una manera robusta de garantir la integritat de les dades en operacions complexes. Amb la comprensió dels conceptes clau i la pràctica amb exemples, pots començar a utilitzar transaccions per a les teves necessitats de bases de dades.
Curs de MongoDB
Mòdul 1: Introducció a MongoDB
Mòdul 2: Operacions CRUD a MongoDB
Mòdul 3: Modelatge de Dades a MongoDB
Mòdul 4: Indexació i Agregació
Mòdul 5: Funcions Avançades de MongoDB
Mòdul 6: Rendiment i Seguretat
- Optimització del Rendiment
- Còpia de Seguretat i Restauració
- Millors Pràctiques de Seguretat
- Monitorització i Alertes