7

Transacciones en MongoDB

Tutorial realizado por el profesor Albert Ramírez

En la versión 4.0 de MongoDB nos trae transacciones ACID (Atomicity, Consistency, Isolation, Durability) entre múltiples documentos, pero antes de sumergirnos en este tema quisiera hacer una breve explicación de que son las transacciones y por que en algunos casos son importantes.

Cuando hablamos de transaccionalidad dentro de una base de datos nos referimos a la capacidad de poder realizar operaciones entre múltiples tablas, colecciones o registros y que se garantice que si una de estas operaciones falla el efecto de todas las operaciones es revertido, esto garantiza la consistencia en los datos y es la manera en que las bases de datos relacionales mantienen la integridad de los datos cuando se realizan operaciones entre múltiples registros.

MongoDB antes de la versión 4.0 garantizaba transacciones ACID a nivel de documento, esto quiere decir que las operaciones realizadas en los subdocumentos dentro de un documento cumplían con la condición de que si un error ocurría la base de datos se encargaba de hacer rollback al estado anterior al inicio de la operación.

Las personas que desarrollan MongoDB estiman que entre el 80%-90% de las aplicaciones no necesitan transacciones entre documentos y que los problemas de consistencia se han podido solucionar con un buen modelamiento en la base de datos empleando subdocumentos.

Sin embargo existen casos de uso en los cuales es absolutamente necesario contar con transaccionalidad entre documentos. Cuando las aplicaciónes se encontraban empleando MongoDB lo que debían hacer es implementar la lógica transaccional dentro del código, esto aumentaba la complejidad y en algunos casos la latencia de la ejecución de las operaciones.
Debido a esto en su versión 4.0 MongoDB implementa las transacciones ACID entre documentos y hace una interfaz agradable para implementar esta funcionalidad dentro de aplicaciones existentes.

El siguiente código en python emplea la API de transacciones:

with client.start_session() ass:
            s.start_transaction()
            collection_one.insert_one(doc_one, session=s)
            collection_two.insert_one(doc_two, session=s)
            s.commit_transaction()

El siguiente código en JAVA emplea la API de transacciones:


try (ClientSession clientSession = client.startSession()) {
                  clientSession.startTransaction();
                  collection.insertOne(clientSession, docOne);
                  collection.insertOne(clientSession, docTwo);
                  clientSession.commitTransaction();
        }

Como vemos agregar la funcionalidad de transacciones entre documentos es muy simple pero hay que hacer énfasis en que a pesar de tener esta característica no hay nada mejor que un buen modelamiento empleando subdocumentos, la idea principal es usar lo mejor de los dos mundos.

Este concepto de transaccionalidad trae una tranquilidad adicional para los desarrolladores y DBAs (Database Administrators) que en algunos casos se abstienen de usar MongoDB por que en sus versiones anteriores carecía de esta característica.

Se espera que en su versión 4.2 MongoDB incluya esta funcionalidad en clusters Sharded

Escribe tu comentario
+ 2
1
6 años

Hi everyone you have read the content of this website, then you are earn the more information are this website download firefox this is they junction of the more information are this website.

1
56139Puntos
6 años

ni Platzi se salva del spam jajaja