(Умный) Планировщик заданий
Здравствуйте, господа.
В замешательстве, как обозвать тему релевантнее %) Кто поправит - исправим на более корректную.
Заканчивая предисловия - начнём с конкретного сферического примера:
Есть некий сервис (интранет), представляющий собой наколенную нано-CRM: задачи, распределение, выполнение, проверка, радость.
Для сервиса нужно реализовать систему уведомлений о всяческих хитрых событий, как-то:
- программер не прочитал ни разу распределённый на него тикет - ежедневно ему + ежедневно боссу;
- программер долго выполняет тикет - раз в неделю;
итд итп
Уходя от этого сферического примера: в интернете мне попадался ряд сервисов (из последних навскидку - livemocha.com), которые, после некоторого периода неактивности начинают напоминать о себе, расспрашивая почему ты перестал заходить и какие же они клёвые (теперь стали).
Вопрос о реализации этой вещи. Навскидку в голову приходят 2 варианта. Начну с менее перспективного, на мой взгляд:
1.
Заводим таблицу, в неё пишем события (факты) уведомлений.
Пример workflow: по шедулеру дёргается приложение, которое находит пользователя, который был неактивен более месяца. Далее проверяем таблицу уведомлений, смотрим когда было отослано уведомление по событию "давно не появлялись онлайн", и если оно было давнее, чем месяц назад (предполагаем, что рассылать подобные вещи будем раз в месяц) - тогда шлём напоминалку + добавляем запись о событии в таблицу.
2.
(Вариант второй, более интересный, на мой взгляд)
Заводим аналогичную таблицу, НО, принципиальная разница в том, что события в неё пишем упреждающие.
Т.е. пользователь авторизовался - пишем в таблицу событие "мы о тебе соскучились" в момент времени NOW() + 1 MONTH, все старые уведомления этого типа удаляем (или делаем REPLACE, не важно - конкретная реализация неинтересна)
Затем шедулер проходится по этой таблице и выполняет те задания, которые уже пора выполнить. Выполненные задания удаляет или помечает флажком.
Мысли? Предложения?
Здравствуйте, господа.
В замешательстве, как обозвать тему релевантнее %) Кто поправит - исправим на более корректную.
Заканчивая предисловия - начнём с конкретного сферического примера:
Есть некий сервис (интранет), представляющий собой наколенную нано-CRM: задачи, распределение, выполнение, проверка, радость.
Для сервиса нужно реализовать систему уведомлений о всяческих хитрых событий, как-то:
- программер не прочитал ни разу распределённый на него тикет - ежедневно ему + ежедневно боссу;
- программер долго выполняет тикет - раз в неделю;
итд итп
Уходя от этого сферического примера: в интернете мне попадался ряд сервисов (из последних навскидку - livemocha.com), которые, после некоторого периода неактивности начинают напоминать о себе, расспрашивая почему ты перестал заходить и какие же они клёвые (теперь стали).
Вопрос о реализации этой вещи. Навскидку в голову приходят 2 варианта. Начну с менее перспективного, на мой взгляд:
1.
Заводим таблицу, в неё пишем события (факты) уведомлений.
Пример workflow: по шедулеру дёргается приложение, которое находит пользователя, который был неактивен более месяца. Далее проверяем таблицу уведомлений, смотрим когда было отослано уведомление по событию "давно не появлялись онлайн", и если оно было давнее, чем месяц назад (предполагаем, что рассылать подобные вещи будем раз в месяц) - тогда шлём напоминалку + добавляем запись о событии в таблицу.
2.
(Вариант второй, более интересный, на мой взгляд)
Заводим аналогичную таблицу, НО, принципиальная разница в том, что события в неё пишем упреждающие.
Т.е. пользователь авторизовался - пишем в таблицу событие "мы о тебе соскучились" в момент времени NOW() + 1 MONTH, все старые уведомления этого типа удаляем (или делаем REPLACE, не важно - конкретная реализация неинтересна)
Затем шедулер проходится по этой таблице и выполняет те задания, которые уже пора выполнить. Выполненные задания удаляет или помечает флажком.
Мысли? Предложения?