2010-04-16 15 views
26

Jugar con MongoDB y NoRM en .NET.Transacciones MongoDB?

Cosa que me confundió - no hay transacciones
(no se puede simplemente decir MongoConnection.Begin/EndTransaction o algo así).

Deseo utilizar el patrón de unidad de trabajo y los cambios de retrotracción en caso de que algo falle.

¿Todavía hay una manera limpia de enriquecer mi repositorio con ITransaction?

Respuesta

28

MongoDB no admite transacciones complejas de varios documentos. Si eso es algo que absolutamente necesitas, probablemente no sea una buena opción para ti.

En la mayoría de los casos, sin embargo, hemos encontrado que las transacciones complejas no son un requisito. Todas las operaciones en MongoDB son atómicas en un solo documento, y admitimos nice update modifiers, que hacen muchas operaciones que necesitarían una transacción fácil de implementar (y rápida).

+0

No he tenido que 'parte modifiers' actualización. ¿Cómo pueden ayudar? (tenga en cuenta que soy completamente novato en esto) :) –

+1

modificadores de actualización le permiten realizar ciertas operaciones complejas atómicamente con una sola operación - piensa como "incrementar el valor de este campo en x" o "agregar un nuevo valor a esta matriz ". – mdirolf

+0

@mdirolf ¿Debería uno refactorizarse si entra en un escenario en el que depende de TRANSACTIONS? – Tushar

17

Es cierto que MongoDB no admite transacciones de forma inmediata, pero puede implementar transacciones optimistas por su cuenta. Se ajustan bien a la unidad de trabajo. Escribí un ejemplo de Java y alguna explicación en un GitHub para que pueda repetir fácilmente en C#.

+2

Este es realmente un buen ejemplo. Qué lástima que no se implemente de esta manera dentro de MongoDB, incluso como una abstracción/plugin intercambiable. – gertas

+1

Impresionante redacción, gracias por hacer eso. +10 si pudiera. – jcollum

+0

Si necesita transacciones en mongodb, debe reconsiderar su diseño/arquitectura de software – dit

1

Algunas notas para el registro.

Mientras MongoDB no tiene soporte de transacciones, que apoya atomicity on a single document:

MongoDB tiene integrado el soporte para las operaciones atómicas dentro de un mismo documento. Dadas las posibilidades que brindan los documentos anidados, esta característica brinda soporte para una gran cantidad de casos de uso.

Además, la entrada manual sobre "Isolate Sequence of Operations" podría ser interesante. P. ej .:

Sin embargo, puede aislar una única operación de escritura que afecte a varios documentos utilizando el operador de aislamiento.

0

Puede utilizar en su lugar MongoDb TokuMX.

http://www.tokutek.com/products/tokumx-for-mongodb/

TokuMXTM es una fuente abierta, la distribución de alto rendimiento de MongoDB que ha mejorado notablemente el rendimiento y la eficiencia operativa en comparación con MongoDB básica. TokuMX es un reemplazo directo para MongoDB, y ofrece mejoras de rendimiento 20X, reducción del 90% en el tamaño de la base de datos y soporte para transacciones ACID con MVCC.

1

A partir de v4.0 (en verano de 2018), MongoDB admitirá transacciones ACID multi-documento. Mediante el aislamiento de instantáneas, las transacciones proporcionarán una vista de datos globalmente coherente y harán cumplir la ejecución de todo o nada para mantener la integridad de los datos. Para obtener más información y versión beta, consulte https://www.mongodb.com/transactions

En este blog post, también describo nuestro viaje a las transacciones ACID de múltiples documentos, en caso de que esté interesado en la historia y nuestro razonamiento.

1

MongoDB 4.0 agregará soporte para transacciones de múltiples documentos.

https://www.mongodb.com/transactions

+0

En lugar de solo proporcionar el enlace, coloque el texto clave en su respuesta. De lo contrario, si el enlace se cae, ¡perderemos la respuesta! :) – sniperd