Эксклюзивная блокировка
Я хотел бы приобрести эксклюзивные замки с монго или диваном дБ.
- Является ли это возможным? (Справка по API будет полезна)
- Возможно ли, что исключительная блокировка освобождается, когда клиент внезапно умирает?
1 ответ
Что касается MongoDB:
Mongo не поддерживает его из коробки и очень ограничен, когда дело касается параллелизма. Чтобы получить краткое представление о том, что поддерживается, а что нет, обратитесь к разделу часто задаваемых вопросов по mogo по параллелизму. Это довольно информативно для меня.
Но вы всегда можете подделать это. Создайте коллекцию с объектом для управления вашей эксклюзивной блокировкой. Затем используйте findAndModify, чтобы установить для поля isLocked значение true. Не забудьте добавить опцию запроса для поиска объекта с isLocked = false. Если объект возвращается, это означает, что у вас есть блокировка, если не объект уже заблокирован.
db.lockCollection.findAndModify( {
query: { isLocked: false },
update: { $set: { isLocked: true } },
upsert: true
} );
Чтобы избежать бесконечной блокировки из-за сбоя, вы можете создать индекс TTL, который удалит документ через некоторый произвольный период времени. Основными недостатками этого подхода является то, что он является пользовательским, поэтому он может иметь ошибки, и блокировка фактически на стороне вашего приложения, но не на стороне db, поэтому любой другой код может делать все что угодно.
Надеюсь, поможет!