Задать вопрос
PublicFess
@PublicFess
Front-end, чуть-чуть back-end.

Как сделать довыполнение стека операций в MongoDb?

Суть вопроса в следующем. Мы знаем что в монге нет транзакций. В моем проекте не может быть дедлоков и прочей несуразицы, но каждая операция связана с созданием 5-6 записей в базу, из чего я задаю вопрос, есть ли какой то механизм, что бы продолжать выполнение операций, если упал сервер?
  • Вопрос задан
  • 364 просмотра
Подписаться 4 Оценить 10 комментариев
Пригласить эксперта
Ответы на вопрос 2
@Kano
Есть некий шаблон позволяющий имитировать работу транзакций. В документации к монге он описан тут https://docs.mongodb.com/manual/tutorial/perform-t...
Метод описывает простой сценарий, но дает общее представление как это должно работать.
Правда нет решения с версионностью данных (что будет получать клиент пока идет выполнение "транзакции")
Ответ написан
Комментировать
@napa3um
Если частичное наличие или отсутствие данных в разных коллекциях может сломать бизнес-логику, то реализовывают двухфазовый комит ( https://docs.mongodb.com/manual/tutorial/perform-t... ), либо выбирают транзакционную БД. Однако часто такой проблемы нет, и предварительно созданные документы в отдельных коллекциях не оказывают влияния на бизнес-логику, пока ссылки на них не попадут в некий "главный документ" (например, пока вновь созданный заказчик не попадёт в заказ, который и нужно создавать после всех "подчинённых" документов в качестве факта обработки запроса пользователя). Лучше не "довыполнять" запросы после падения сервера, а наоборот игнорировать "повисшие" записи. И можно завести некий garbage collector, подчищающий мусор без нужных связей (однократно запускаемый при запуске БД, или только при запуске после аварийного останова). Не стоит планировать отказ БД как основной сценарий обработки запросов, иначе отвлечётесь от задачи интернет-доставки к задаче построения подземного бункера с серверами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы