У меня возникают проблемы с подходящими моделями данных и запросами, которые хорошо масштабируются для моделирования данных, аналогичных событиям и ресурсам Календаря Google.
Ресурсы распределяются между пользователями, и ресурс может быть только в одном событии.вовремя.Ресурс будет иметь несколько событий, но эти события не могут перекрываться или происходить одновременно.Событие также может иметь несколько ресурсов.
class event(db.Model):
#user that created/owns the event
user = db.ReferenceProperty(user, collection_name='events',required=True)
#an event can have multiple resources
resources = db.StringListProperty() # resource key(s)
#when the event opens and closes (start/stop)
opendt = db.DateTimeProperty()
closedt = db.DateTimeProperty()
class resource(db.Model):
name = db.StringProperty(required=True)
С этими моделями данных мне не удалось найти быстрый, масштабируемый способ получения списка доступных ресурсов при создании события.
- Получить все ресурсы (простой запрос)
- Получить все события, которые перекрывают новое событие (несколько запросов)
- найти события, которые начинаются до и заканчиваются после нового события
- найти события, которые начинаются до и заканчиваются во время нового события
- находить события, которые начинаются и заканчиваются во время нового события
- находить события, которые начинаются во время и заканчиваются после нового события
- Отфильтровать ресурсы, включенные в перекрывающиеся события
Мне кажется, что этот процесс будет становиться все медленнее и медленнее по мере добавления большего количества событий и ресурсов.Я также не знаю, как это будет работать, чтобы иметь возможность разбивать на страницы конечный результат ресурсов.
Когда пользователь создает новое событие, после того, как он вводит время начала / окончания своего нового события, яхотели бы, чтобы они быстро могли видеть доступные ресурсы для этого периода времени.
Есть ли лучший, более эффективный способ?