#python #google-app-engine #google-cloud-datastore #nosql
#python #google-app-engine #google-cloud-хранилище данных #nosql
Вопрос:
Я создаю приложение в Google App Engine. Я храню объекты определенного типа с несколькими свойствами, и одним из них является свойство даты и времени.
Мне нужно проверить, превышает ли это свойство даты и времени или «истекает», сравнивая с текущей датой и временем. время.
Я не предпочитаю опрос.
Я подумываю о написании демона, который непрерывно сканирует все объекты, чтобы проверить, истек ли срок его действия или нет.
Дело в том, что мне нужно отправить push-уведомление, если срок действия одного из объектов «Истек».
Возможно, я совершенно ошибаюсь в этой концепции. Пожалуйста, предложите лучший способ.
Комментарии:
1. звучит дорого….. Почему бы просто не сохранить «время с момента эпохи» и GQL для поиска моделей со значением, которое больше / меньше значения, которое сделало бы его недействительным, например, ВЫБЕРИТЕ * ИЗ Contact_Info_Entry, где ВОЗРАСТ> 12345
2. Есть ли лучший способ узнать, когда «истекает» срок действия определенного объекта, вместо сканирования всей базы данных?
3. Индексируйте свойство «date_expire» или «age» (независимо от того, что вы решите использовать) и добавьте фильтр в свой запрос. Хранилище данных будет возвращать только объекты, соответствующие этому запросу. Это очень эффективно.
4. ну, вы могли бы создать объект и в то же время создать задачу, которая рассчитана на выполнение в момент истечения срока действия объекта, а затем «истекает» объект.
5. передача запроса — это не то же самое, что «сканирование всей базы данных», кстати. ну, это так, но это не будет стоить вам столько же, сколько загрузка, а затем просмотр каждой записи по очереди
Ответ №1:
Есть два подхода, которые вы могли бы рассмотреть:
-
Запустите задание cron, которое будет периодически запрашивать хранилище данных для объектов с истекшим сроком действия и отправлять уведомления.
-
Когда вы добавляете объект, создайте задачу для уведомления пользователя о его истечении. Вы можете установить ETA для задачи. Эта опция доступна только в том случае, если срок действия ваших объектов истекает менее чем через 30 дней.
Комментарии:
1. Но подходит ли это для 1 миллиона записей в день, учитывая наихудший случай
2. Это ограничено только вашим воображением (и вашим бюджетом). Модули / серверные части и задачи легко масштабируются.