«Атомный раздел» в драйвере рубинового монгодб?

StackOverflow https://stackoverflow.com/questions/4205061

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

А для некоторых принципов за идеями там см.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top