«Атомный раздел» в драйвере рубинового монгодб?
-
25-09-2019 - |
Вопрос
Есть ли способ выполнить набор не атомных действий на сервере 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.