Система бронирования MongoDB, Apollo предотвращает бронирование на одну комнату - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь внедрить систему бронирования номеров с MongoDB в качестве базы данных, Apollo GraphQL и экспресс-сервером.

У меня есть коллекции в моей базе данных: одна для комнат и одна для бронирования.Чтобы проверить доступность, система находит все заказы, которые в настоящее время находятся в базе данных, и проверяет, в какой комнате есть доступность для указанного временного интервала.Если система бронирует комнату, она вставляет новую запись в базу данных.

Проблема заключается в следующем сценарии: два запроса на бронирование для одной и той же комнаты одновременно:

booking request 1 -> check for available rooms
booking request 2 -> check for available rooms
booking request 1 -> read request success (display available rooms)
booking request 2 -> read request success (display available rooms)
booking request 1 -> write a new record to the db (new booking)
booking request 2 -> write a new record to the db (new booking) but this conflicts with booking 1.

Как я могу гарантировать, что одна комната никогда не будет иметь конфликтующих бронирований?

Проблема в том, что у меня есть одна заявка на доступность и другая заявка, записывающая бронь в БД.

1 Ответ

0 голосов
/ 05 декабря 2018

я сделал то же самое с postgres, но я уверен, что MongoDB обладает той же функциональностью.

в вашей таблице бронирования, ключом будет комбинация номера и диапазона дат.

выможно определить ограничение для таблицы, чтобы сырье с тем же room_id не могло иметь диапазон дат перекрытия.

, если вы хотите вставить новое бронирование, просто вставьте его, и БД следует избегать вставки необработанного текста, перекрывающегося со временемдиапазон (из-за ограничения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...