В каких случаях для бронирования слота нужны блокировки существующих данных, если обычно в базе создаётся новая запись о бронировании, а свободные слоты заранее не хранятся?

Нельзя заблокировать отсутствующую строку обычным SELECT FOR UPDATE. Для исключения конкурирующих броней блокируют существующий ресурс, используют ограничение непересечения или иной согласованный механизм.

Короткий ответ

Что ответить на собеседовании

Нельзя заблокировать отсутствующую строку обычным SELECT FOR UPDATE. Для исключения конкурирующих броней блокируют существующий ресурс, используют ограничение непересечения или иной согласованный механизм.

Подробный разбор

Ответ с пояснениями

Нельзя заблокировать отсутствующую строку обычным SELECT FOR UPDATE. Для исключения конкурирующих броней блокируют существующий ресурс, используют ограничение непересечения или иной согласованный механизм.

Например, транзакция блокирует строку мастера или помещения, проверяет интервал и создаёт бронь; все писатели обязаны следовать этому порядку. В PostgreSQL range и exclusion constraint могут запретить пересекающиеся интервалы одного ресурса непосредственно в БД. Для дискретного фиксированного слота иногда достаточно UNIQUE. Проверка свободного времени без атомарной защиты оставляет гонку: два клиента одновременно увидят отсутствие брони.

Источник: www.postgresql.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее