“Sección atómica” en el controlador de Ruby MongoDB?
-
25-09-2019 - |
Pregunta
¿Hay una manera de realizar un conjunto de acciones no-atómicas en el servidor MongoDB (mediante el controlador de Rubí) como una acción atómica sola? Lo que necesito es básicamente un bloqueo en cierto objeto / colección.
Solución
No hay manera de hacerlo en el controlador de Rubí, porque no hay manera de hacerlo en MongoDB. Mongo sólo es compatible con las operaciones atómicas de un único documento. Así que, básicamente, una inserción, actualización o eliminación de un documento único se realiza de forma atómica, pero no operaciones en varios documentos.
podría ser capaz de falsificar una transacción al intentar un manual de "retroceso" si se produce un error. Un retroceso en este caso sería la de sustituir cualquier cambio con los valores anteriores. Pero eso va a manual y no tener las garantías ACID que se podrían obtener de la mayoría de los servidores SQL.
Otros consejos
Debido a que se pueden realizar operaciones atómicas en un único documento, hay maneras para simular lo que quiere. Ver este artículo:
http://kylebanker.com/blog/2010/06 / 07 / mongodb-inventario-transacciones /
Y para algunos de los principios detrás de las ideas allí, consulte la siguiente:
http://www.eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf