"Seção atômica" no driver Ruby MongoDB?
-
25-09-2019 - |
Pergunta
Existe uma maneira de executar um conjunto de ações não atômicas no servidor MongoDB (usando o driver Ruby) como uma única ação atômica? O que eu preciso é basicamente um bloqueio em determinado objeto/coleção.
Solução
Não há como fazer isso no motorista do rubi, porque não há como fazê -lo no MongoDB. O Mongo suporta apenas operações atômicas de documentos únicos. Portanto, basicamente, uma inserção, atualização ou exclusão de um único documento é feita atomicamente, mas não operações em vários documentos.
Você poderá fingir uma transação tentando uma "recuperação" manual se ocorrer um erro. Um roll-back neste caso seria substituir quaisquer alterações pelos valores anteriores. Mas isso vai manual e não ter o ácido garante que você obteria da maioria dos servidores SQL.
Outras dicas
Como você pode executar operações atômicas em documentos únicos, existem maneiras de simular o que você deseja. Veja este artigo:
http://kylebanker.com/blog/2010/06/07/mongodb-inventory-transactions/
E para alguns dos princípios por trás das idéias lá, veja esta:
http://www.eaipatterns.com/docs/ieee_software_design_2pc.pdf