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

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

  1. 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ó.

  1. Confirmant o Revertint la Transacció

  • Confirmar la Transacció: session.commitTransaction()
  • Revertir la Transacció: session.abortTransaction()

Exercici Pràctic

Exercici 1: Crear una Transacció

  1. Crea una base de dades anomenada shop.
  2. Crea dues col·leccions: customers i orders.
  3. 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.

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.

© Copyright 2024. Tots els drets reservats