sql >> Base de Datos >  >> NoSQL >> MongoDB

Transacciones MongoDB 4.0:ACID Read + Write?

La respuesta corta es sí para la atomicidad.

En MongoDB, Transacciones (también llamadas transacciones de documentos múltiples) están asociadas con una sesión . Es decir, inicia una transacción para una sesión. En un momento dado, puede tener como máximo uno transacción abierta para una sesión.

No puede bloquear toda la colección para escrituras. Es posible que desee crear varias transacciones para asegurarse de que las escrituras no se entrelacen/anulen entre sus procesos. MongoDB usa Optimistic Locking en lugar de Bloqueo pesimista .

De manera similar en MongoDB transacciones de documentos múltiples. Por ejemplo, usando mongo shell :

s1 = Mongo().startSession() 
sessionTest = s1.getDatabase("databaseName").test;
s1.startTransaction() 
sessionTest.find({a:"foo"})
> {_id: ObjectId(..), a:"foo", b:1}

// Let's update the record outside of the session (i.e. another process)
db.test.update({a:"foo"}, {$set:{b:2}})

sessionTest.update({a:"foo"}, {$set:{b:9}})
// You'll get a WriteConflict error because the the document has been modified outside of the session. 

También tenga en cuenta que mientras la transacción está abierta, no se ven cambios de datos realizados por operaciones en la transacción fuera de la transacción.

  • Cuando se confirma una transacción, todos los cambios de datos se guardan y son visibles fuera de la transacción y la transacción finaliza.
  • Cuando se cancela una transacción, todos los cambios de datos realizados por las escrituras en la transacción se descartan sin volverse visibles y la transacción finaliza.

Consulte también Ejemplo de atomicidad .

Vale la pena señalar que MongoDB es una base de datos distribuida , por lo que también debe conocer las diferentes opciones de coherencia. Puede especificar estas opciones al iniciar Session.startTransaction() dependiendo del caso de uso:

Las transacciones de varios documentos admiten la preferencia de lectura primary y todas las operaciones en una transacción determinada deben dirigirse al mismo miembro.

También puede estar interesado en Tiza y charlas de ingeniería:Transacciones de MongoDB videos que contienen algunas explicaciones técnicas detrás de las transacciones de MongoDB.