Как Календарь Google делает их напоминания? - PullRequest
1 голос
/ 03 февраля 2011

Я смотрю на календарь Google и задаюсь вопросом, как они делали свои напоминания.

В настоящее время у меня есть только календарь, и они выбирают дату, когда они хотят получать уведомления.Это не очень хорошо расширяется, если я хочу делать напоминания для часов и минут.

Так есть ли у них как поле в их базе данных, которое имеет как "часы, дни, минуты" как возможное поле?

Или они хранят даты, и они просто запрашивают эту дату и время.Так что, если я хочу за час до моей встречи (скажем, это 3 февраля 3:00 вечера), то они просто хранят 3 февраля 2 февраля)

Так что они будут хранить 3 февраля 2 февраля, а в час толькозапросить даты, соответствующие текущему часу?

Ответы [ 3 ]

5 голосов
/ 03 февраля 2011

Любой, кто знает такую ​​информацию, вряд ли раскроет ее на таком публичном форуме. Вместо того, чтобы узнать, как работает Календарь Google, я предлагаю вам подумать о ваших требованиях. Помимо всего прочего, я сомневаюсь, что вы должны масштабировать столько же, сколько Google Calendar:)

Возможно, вы захотите сохранить количество минут для напоминания в качестве наименьшего общего знаменателя - так что вы будете хранить час как 60 минут. Я сомневаюсь, что пользователь будет возражать, если он введет 60 минут, и это будет отображаться как один час.

Сохранение абсолютного времени полезно в некоторых отношениях (простые запросы), но это означает, что если вы изменяете дату / время начала, вам также необходимо пересчитать дату / время напоминания.

(Как я уже сказал, это не дает никаких намеков на то, как работает Календарь Google.)

0 голосов
/ 18 апреля 2011

Я пришел сюда, чтобы задать этот вопрос сам. Моя личная теория заключается в том, что они каким-то образом создали рабочие места cron для увольнения в установленное время. Но они также должны иметь возможность удалять / обновлять эти задания. Я использую сервис в стиле напоминаний, лучшее, что я сделал, - это запускал запланированное задание один раз в день, чтобы отправить что-нибудь с этой датой. Я хотел бы предложить больше гибкости, но не теоретизировал, как это сделать, и подумал, что коллектив стека может придумать лучший способ, чем я ...

0 голосов
/ 03 февраля 2011

Нет смысла рассуждать о том, как это делает Google;Независимо от того, что использует Google, он опирается на действительно массивный кластер серверов и, вероятно, гораздо более сложен, чем вам нужно.Для небольших приложений, даже приложений корпоративного уровня, для этого есть простые методы.

Для схемы я бы сохранил встречу как обычную дату / время, а напоминание - как другую дату /время (которое вы можете рассчитать по заданным часам и минутам, используя структуру TimeSpan) или как число тиков в TimeSpan.Есть преимущества и недостатки либо;используя напоминание о дате / времени, вы должны пересчитать эту дату / время, если встреча изменится.Но время напоминания читается человеком при хранении в схеме.Обратное верно для хранения значения в виде тиков;15 минут в метках TimeSpan - это 15 минут, и вы можете добавить это к любой дате и времени, которые они указывают для фактической встречи.Но в БД это будет большое число, требующее, чтобы пользователи использовали ваше приложение для понимания данных.

Вы можете сохранить одно напоминание о встрече в самой записи о встрече, или вы можете разрешить многозаранее запланированные напоминания для каждой встречи, ведя отдельную таблицу, которая ссылается на запись встречи и содержит время напоминания.

Для фактической реализации напоминания - приложение (или часть функциональности в нем), которое вы создаете для обработки этих напоминаний.должен запросить базу данных для первого напоминания, представляющего интерес для текущего пользователя, который появится первым, и установить таймер для истечения в назначенное время.Этот поток будет просто спать в течение необходимого количества миллисекунд, а затем запустит событие, которое вы будете использовать для отображения напоминания.

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