Операции с документами MongoDB являются атомарными и изолированными, но согласованы ли они?

Я занимаюсь переносом своего приложения из хранилища данных App Engine на серверную часть MongoDB, и у меня есть вопрос относительно согласованности «обновлений документов». Я понимаю, что все обновления в одном документе являются атомарными и изолированными, но есть ли способ гарантировать, что они «согласованы» для разных наборов реплик?

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

Под согласованностью я подразумеваю то, что нам нужен способ гарантировать, что если два пользователя попытаются выполнить обновление одного документа в точно одновременно, MongoDB разрешит выполнение только одного из этих обновлений. через и отбрасывает другой (или, по крайней мере, предотвращает возникновение обоих). Мы не можем использовать здесь стандартное решение «сегментирования», потому что одно обновление состоит не только из увеличения или уменьшения.

Как лучше всего гарантировать непротиворечивость одного конкретного документа?

17
задан depthfirstdesigner 10 November 2011 в 15:07
поделиться