Эксклюзивная блокировка

Я хотел бы приобрести эксклюзивные замки с монго или диваном дБ.

  1. Является ли это возможным? (Справка по API будет полезна)
  2. Возможно ли, что исключительная блокировка освобождается, когда клиент внезапно умирает?

1 ответ

Решение

Что касается MongoDB:

Mongo не поддерживает его из коробки и очень ограничен, когда дело касается параллелизма. Чтобы получить краткое представление о том, что поддерживается, а что нет, обратитесь к разделу часто задаваемых вопросов по mogo по параллелизму. Это довольно информативно для меня.

Но вы всегда можете подделать это. Создайте коллекцию с объектом для управления вашей эксклюзивной блокировкой. Затем используйте findAndModify, чтобы установить для поля isLocked значение true. Не забудьте добавить опцию запроса для поиска объекта с isLocked = false. Если объект возвращается, это означает, что у вас есть блокировка, если не объект уже заблокирован.

db.lockCollection.findAndModify( {
   query: { isLocked: false },
   update: { $set: { isLocked: true } },
   upsert: true
} );

Чтобы избежать бесконечной блокировки из-за сбоя, вы можете создать индекс TTL, который удалит документ через некоторый произвольный период времени. Основными недостатками этого подхода является то, что он является пользовательским, поэтому он может иметь ошибки, и блокировка фактически на стороне вашего приложения, но не на стороне db, поэтому любой другой код может делать все что угодно.

Надеюсь, поможет!

Другие вопросы по тегам