@zogrog

Как сделать подобное в mongodb?

Добрый день!
Подскажите пожалуйста как в mongodb реализовать подобное:
блокировка ключа, чтение ключа, проверка значения ключа, возможно изменение ключа, снятие блокировки ключа.
при обрыве соединения - снятие блокировки.

мне нужно получить поведение аналогичное поведению postgresql: begin; select for update; update; commit;

мне нужно исключить состояние гонки при изменении значения ключа.

это вообще возможно сделать в mongodb?

findAndModify() не подходит ибо возможна ситуация когда мы выполняем запрос и не получаем ответ или отваливаемся
  • Вопрос задан
  • 322 просмотра
Пригласить эксперта
Ответы на вопрос 2
@SilentFl
вы хотите транзакцию - их в монге нет.
но можно сделать вот так
Ответ написан
Комментировать
@lega
findAndModify() не подходит ибо возможна ситуация когда мы выполняем запрос и не получаем ответ или отваливаемся
ответ вы обязательно получите если все прошло гладко.
Нужно ли что-б при обрыве откатывалось значение или достаточно что-бы лок снимался?

Снятие лока при разрыве и креше можно делать по разному:
Например можно ставить лок с таймаутом при котором лок будет не активен например через минуту, этот вариант не плох с учетом того что это очень редкая ситуация (простые разрывы связи не должны влиять, они автоматом поднимаются).
Если идет первый запуск (например после ребута сервера), то можно просто снести все локи.
Можно выделить отдельный процесс который будет отвечать за key/value (может выдать 10-30Kops/sec).
Можно ещё придумать варианты с привязкой к процессу и т.п.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы