Я пытаюсь создать небольшой сайт, на котором люди могут заказывать пользователей на дневные концерты. Я использую пакет счетов от метеора, и мой план должен приложить следующее:Проектирование схемы доступности mongodb/meteor
user.availability: [
{
status: n, //where n is 0-# of status types (5 atm) : single char rather than float
date: ddmmyyy, //string as well, no need for time as its day long
job_id: {Job}
}, ...
]
Работа только имеет информацию, как, где, что, когда.
Есть 5 штатов: нейтрально, доступно, явно недоступно, забронировано, удержание. Пользователи естественно нейтральны и явно должны заявить о доступности. Они выбирают между первыми тремя состояниями: n, a, u и разрешено устанавливать доступность максимум две недели в будущем. Работа «дающие» - это те, которые устанавливают другие два состояния готовности. Нейтральное состояние для меня означает, что им не нужна запись в db (массив user.availability).
Этот стиль устанавливает меня на следующий запрос:
db.users.find({ availability: { status: 'a', date: { $in: search_dates_array }});
И когда пользователь входит в систему/доступ к сайту, я могу стереть какие-либо параметры доступности, которые они имеют за период до текущей даты. Неактивные пользователи обрезаны на гораздо более длительный интервал.
Я рассматриваю это решение как полезное в том, что он хранит минимальное количество информации, требует небольшого обслуживания, которое может быть вызвано конкретными событиями, и его легко запросить. Но я не уверен на 100%, если это правильный способ использовать сильные стороны монгодба. Я был бы признателен за любую помощь по этому поводу, и если бы кто-нибудь мог указать мне (относительно) легко переварить статью об оптимизации схем mongodb, это было бы потрясающе.
спасибо.
На первый взгляд это кажется прекрасным. Поскольку вы держите даты как строки, вы не можете выполнять поиск по дате, но с горизонтом в 2 недели, что не имеет большого значения. Однако один запрос не является идеальной схемой. Вы должны думать о других запросах, которые могут возникнуть позже. Кто работал в прошлом месяце? Какие концерты были отменены или не были показаны? Кто является лучшим доступным человеком для проведения концерта (например, на основе навыков и близости)? –
Хмм много наших текущих потребностей не основано в прошлом, большинство записей, датированных до текущего дня, удаляются. Но с новой системой появляются новые возможности, и я определенно подумаю о нескольких запросах, которые могут помочь нам в будущих поисках и посмотреть, все ли это возможно. даже с предложением Миккеля ниже, чтобы вывести его из учетной записи, все это имеет смысл. –