Cервис бронирования на Node.js + MongoDB. Как хранить даты для максималь удобного поиска?
Доброго времени суток!
Я пишу сервис бронирования для узкой b2b ниши в качестве дипломной работы (то есть это не просто диплом чтобы написать и забыть, а проект, который будет использован в существующем бизнесе). Вдаваться в специфику бизнеса не буду, но для простоты скажем, что это бронирование мест в сети хостелов.
Для разработки использую Node.js и MongoDB. Это мой первый более-менее крупный проект в веб-разработке в целом и с использованием mongo в частности.
Node.js привлек своей структурой, гибкостью в расширении, асинхронным I/O и (что греха таить) трендовостью. Над вопросом, подходит ли mongo для такого рода проекта, решил не задумываться и принял на веру, что подходит ("сделаю как получится а потом, если что, переделаю как надо").
Так вот. Самой неочевидной архитектурной штукой в бек-энде оказался календарь бронирования и поиск по датам. Никак не могу решить, каким образом в mongodb организовать хранение данных о местах и забронированных датах так, чтобы поиск свободных мест в определенном диапазоне дат производится с наименьшими затратами ресурсов.
Буду рад услышать как ответы на вопрос, так и общие мысли, которые могли бы облегчить pain in the ass!
Возможно, лучше будет хранить в формате UTC гггг-мм-дд чч.мм.сс: тогда запрос "на день" можно сделать {'date': {'$regex': '^2014-04-20'}} и сразу же всё и получить.
А вот как быть с датами на несколько дней? Мне нужно будет создать коллекцию с временнЫми промежутками для каждого места, прописать в каждом поле is_availible?... или сделать два подкласса временных промежутков availible и booked, и во втором хранить айдишник объекта booking... кажется я понял)
Кстати как лучше, проверять instanceof без поля is_availible или хранить is_availible и в зависимости от его значения потом кастить к booked и забирать нужные данные?...