“La sezione atomica” in conducente Rubino MongoDB?
-
25-09-2019 - |
Domanda
C'è un modo per eseguire una serie di azioni non-atomiche su server di MongoDB (utilizzando il driver Ruby) come singola azione atomica? Quello che mi serve è fondamentalmente un blocco su certo oggetto / collezione.
Soluzione
Non c'è modo di farlo nel driver di Ruby, perché non c'è modo di farlo in MongoDB. Mongo supporta solo operazioni atomiche singolo documento. Quindi, fondamentalmente un inserto, aggiornare o cancellare di un unico documento avviene atomicamente, ma non operazioni in più documenti.
Si potrebbe essere in grado di falsificare una transazione tentando un manuale di "roll-back" in caso di errore. Un roll-back in questo caso sarebbe sostituire qualsiasi cambiamento dei valori precedenti. Ma che sta per manuale e non hanno le garanzie acido che si otterrebbe da maggior parte dei server SQL.
Altri suggerimenti
Poiché è possibile eseguire operazioni atomiche su singoli documenti, ci sono modi per simulare ciò che si desidera. Si veda questo articolo:
http://kylebanker.com/blog/2010/06 / 07 / mongodb-inventario-transazioni /
E per alcuni dei principi alla base delle idee lì, vedere questo:
http://www.eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf