Я переношу свое приложение из хранилища данных App Engine в базу данных MongoDB и задаю вопрос о согласованности "обновлений документов". Я понимаю, что обновления одного документа являются атомарными и изолированными, но есть ли способ гарантировать, что они "совместимы" с различными наборами реплик?
В нашем приложении многие пользователи могут (и будут) пытаться обновить один документ одновременно, вставив в него несколько встроенных документов (объектов) во время одного обновления. Мы должны обеспечить, чтобы эти обновления происходили логически последовательным образом во всех репликах, т.е. Когда один пользователь "помещает" несколько встроенных документов в родительский документ, другие пользователи не могут помещать свои внедренные документы в родительский документ, пока мы не гарантируем, что они читать и получать первые обновления для пользователей.
Итак, что я подразумеваю под консистенцией, так это то, что нам нужен способ убедиться, что если два пользователя попытаются выполнить обновление одного документа в одно и то же время, MongoDB разрешает только одно из этих обновлений и отбрасывает другое один (или, по крайней мере, предотвращает их возникновение). Мы не можем использовать стандартное решение "sharding" здесь, потому что одно обновление состоит не только из приращения или уменьшения.
Какой лучший способ гарантировать согласованность одного конкретного документа?