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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top