«Атомная секция» в драйвере Ruby MongoDB? - PullRequest
0 голосов
/ 17 ноября 2010

Есть ли способ выполнить набор неатомарных действий на сервере MongoDB (используя драйвер Ruby) как единое атомарное действие?Что мне нужно, так это блокировка определенного объекта / коллекции.

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

Поскольку вы можете выполнять элементарные операции с отдельными документами, есть способы имитации того, что вы хотите. Смотрите эту статью:

http://kylebanker.com/blog/2010/06/07/mongodb-inventory-transactions/

А о некоторых принципах, лежащих в основе идей, см. Вот этот:

http://www.eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf

0 голосов
/ 17 ноября 2010

Нет способа сделать это в драйвере Ruby, потому что нет способа сделать это в MongoDB.Mongo поддерживает только атомарные операции с одним документом.Таким образом, в основном вставка, обновление или удаление одного документа выполняется атомарно, но не операции над несколькими документами.

Вы можете подделать транзакцию, попытавшись выполнить откат вручную, если произойдет ошибка,Откат в этом случае должен был бы заменить любые изменения предыдущими значениями.Но это происходит вручную, и ACID не гарантирует, что вы получите от большинства серверов SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...