Transacciones de MongoDB

Transacciones de MongoDB

MongoDB admite transacciones para combinar y aislar las diversas afirmaciones para procesar en una sola operación. Las operaciones de transacción se agrupan y procesan en un entorno que es distinto de otras consultas en lugar de ser ejecutadas una por una, ya que se proporcionan al servidor. Las propiedades de la transacción ayudan a las colecciones de MongoDB a mantener el cumplimiento del ácido. Se retiene la consistencia de la base de datos y se obtiene la durabilidad cuando la modificación de la transacción no se guarda hasta que se comprometan.

Paso 1: Creación de datos de muestra en MongoDB para la transacción

Para realizar las transacciones en MongoDB, necesitamos una colección que tenga los documentos. Aquí, establecemos la colección MongoDB "PublicBank" y le agregamos tres documentos con la ayuda del método InsertMany. La estructura de consulta de insertar el documento es la siguiente:

db.Banco publico.insertmany ([
Person_name: "Sam",
Person_city: "Los Ángeles",
Account_number: "132309423",
Cantidad: 150000.400,
Person_name: "Emily",
Person_city: "California",
Account_number: "752889411",
Cantidad: 370000.400,
Person_name: "Maddy",
Person_city: "Houston",
Cuenta_number: "34305909",
Cantidad: 560000.400
])

La salida se muestra en la siguiente imagen, lo que indica que los documentos se agregan correctamente a la colección "PublicBank". Ahora, demostramos cómo iniciar y completar las transacciones utilizando estos datos de muestra "PublicBank".

Además, creamos el índice como "Account_number: 1" de cada documento en la colección "PublicBank" utilizando el método CreateIndex () para verificar que el valor de campo de nombre de cada documento sea diferente. Esto es muy útil para validar los requisitos de consistencia mientras procesa las transacciones.

db.Banco publico.createIndex ("cuenta_number": 1, "único": true)

Paso 2: cree la transacción de la colección de muestra especificada de MongoDB

En esta sección, comenzamos la transacción declarando la variable "Sesión". Esta variable de "sesión" almacena todos los objetos de sesión que se utilizan para nuestra transacción. La consulta se proporciona a continuación donde definimos el "DB.getMongo ().Declaración de inicio () "después de declarar la variable" Sesión ". El método getMongo () se utiliza para verificar que la conexión se establece correctamente. Se llama al método de inicio () para comenzar la sesión para las operaciones de transacción, ya que la sesión aún debe iniciarse para realizar una serie de operaciones juntas como una transacción.

sesión = db.getMongo ().startsession ()

Cuando ejecutamos la consulta de sesión en el shell, genera la sesión "ID" como se muestra en la siguiente imagen:

Ahora, establecemos el parámetro: el método startTransaction () con la variable "Sesión" para la operación de lectura y escritura en nuestra transacción MongoDB. La primera vez se proporciona primero con el parámetro "Readconcern". Luego, establecemos la opción Readconcern con el "nivel" de "instantánea" que recupera los datos de una instantánea de la mayoría de los datos comprometidos. La "mayoría" se establece en la opción "W" del parámetro "WriteConcern".

sesión.startTransaction (
"Readconcern": "nivel": "instantánea",
"WriteConcern": "W": "Mayority"

)

Tenga en cuenta que la consulta StartTransaction no devuelve nada como salida porque se ejecuta con éxito. Devuelve la salida si algo salió mal con esta consulta o al comenzar la sesión. Después de ejecutar la consulta reciente, estamos dentro de una transacción que está activa y puede comenzar a ejecutar las declaraciones que forman parte de la transacción.

Paso 3: Trabajar dentro de la sesión de transacción en MongoDB

En lugar de obtener la información directamente del objeto de base de datos "DB", declaramos otra variable que toma una referencia al objeto de sesión. La variable se define antes de trabajar en la transacción activa que representa la colección con la que queremos trabajar dentro del contexto de la sesión.

var banco = sesión.getDatabase ('prueba').GetCollection ('PublicBank')

Aquí, creamos la variable "banco" especificando el modificador "var". Luego, hacemos referencia al objeto "Sesión" que invoca el método getDatabase () y el método getCollection (). El método getDatabase () toma el nombre de la base de datos MongoDB "Test" y forma la base de datos "Prueba". Proporcionamos la colección "PublicBank" en el método getCollection ().

Inserte el documento único dentro de la sesión de transacción

Ahora, dentro de la sesión activa, realizamos la operación de transacción de insertar otro documento en la colección "PublicBank" utilizando el método InsertOne (). El método InsertOne () se llama con el "banco" e inserta el documento con los siguientes campos:

Banco.insertone (
"Person_name": "James",
"Person_city": "Nueva York",
"Account_number": "99931001",
"Cantidad": 450000.900
)

El MongoDB devuelve un mensaje de éxito que indica que se realiza la operación de transacción. Como la sesión de transacción aún está activa, el documento que se inserta anteriormente no se mostrará en la colección original. Puede haber casos en los que la transacción incluye el nuevo registro o los resultados en una reversión a la condición inicial de la sesión de transacción.

Actualizar el documento dentro de la sesión de transacción

Nuevamente, realizamos otra transacción en la misma colección "PublicBank" que se especifica con dos comandos. Primero, tomamos una referencia de sesión y luego damos un nombre de colección al método getDatabase (). Después de eso, usamos la palabra clave de "transacción" sobre la colección. Actualizar el valor del campo dado con el método updateOne (). Aquí, el método UpdateOne () se asigna con dos expresiones: "Account_Number:" 132309423 "y" $ SET: Cantidad: 6700000.000 ". Primero, encontramos el "Account_Number" que es igual al valor "132309423". Cuando se obtiene este valor, establecemos el campo de documento de "cantidad" con el nuevo valor de "670000.000 ”usando el operador de $ set.

sesión.getDatabase ('PublicBank').actas.UpdateOne (Account_Number: "132309423", $ set: cantidad: 6700000.000)

Ahora, cuando se ejecuta la consulta, genera los resultados reconocidos con el valor verdadero. Aquí, el MatchCount: 1 establece que se combina un documento que satisface la condición. El "ModifiedCount: 1" indica que un documento se actualiza con la condición que se aplica a ella. Todavía no cometimos la transacción, por lo que la colección fuera de la sesión de transacción no se modifica.

Comprometer la sesión de transacción con el método commitTransaction ()

Una confirmación en una transacción de base de datos se refiere al almacenamiento permanente de los datos después de una serie de actualizaciones tentativas. Utilizamos el siguiente comando en MongoDB para confirmar la sesión de transacción activa:

sesión.commitTransaction ()

Ahora, todos los cambios se almacenan en la colección "PublicBank" ejecutando el comando de confirmación de MongoDB. Vimos los cambios que hicimos dentro de la transacción. El siguiente es el documento que insertamos en la colección "PublicBank" cuando la transacción está activa:

db.Banco publico.Find (Person_name: James ”)

A continuación, tenemos una transacción de actualizar el documento con el nuevo valor del campo "Cantidad". El valor también se actualiza cuando el comando de confirmación se aplica a la transacción.

db.Banco publico.Find (Account_Number: "132309423")

Abortar la sesión de transacción con el método ABortTRANSACTIONS ()

A veces, no queremos la operación de confirmación sobre la transacción. Para esto, abortamos la transacción que no afecta el valor de la transacción. La transacción se restaura a su estado anterior. La siguiente declaración debe ejecutarse mientras aborta la transacción:

sesión.aborttransaction ()

La sesión de transacción termina aquí. Se descartan cualquier cambio relevante. La base de datos revierte las alteraciones y regresa a su estado inicial en lugar de crear un nuevo estado consistente.

Conclusión

Cubrimos conceptualmente la transacción MongoDB en esta guía. Aprendimos a comenzar las transacciones en MongoDB. También insertamos el nuevo documento y actualizamos el valor del documento dado dentro de la transacción. Luego, las declaraciones de confirmación se utilizan para completar las transacciones. Además, la forma de revertir los cambios que se realizan a las transacciones también se logra a través de la declaración de abortes.