Я пытаюсь создать систему напоминаний, и я использую кварц для своего планирование. Однако я придумываю несколько возможных способов сделать то, что мне нужно, но я не уверен, какой из них лучший и как его проверить.
В основном у меня есть система напоминаний, в которой пользователи могут устанавливать напоминания. Это похоже на Календарь Google. Вы устанавливаете дату и время вашего мероприятия, а затем устанавливаете напоминание, говоря «напомнить мне за 15 минут до»
. Так что у вас может быть мероприятие 10 мая, 2011 9:59, и вы могли бы сказать, напомнили мне "15 минут до"
Так что это будет 10 мая, 10:44.
Я буду в хостинговой среде. (Мой сайт и расписание будут работать в одной среде и даже в одном решении. Так что это не может сильно замедлить пользователей, просматривающих мой сайт.)
Я также использую nhibernate и fluent nhibernate, чтобы делать запрос БД. Для своего веб-сайта я использую asp.net mvc 3.
Вариант 1.
Выполняйте запросы к базе данных каждую минуту и получайте все напоминания, которые должны быть отправлены в эту минуту. Это, конечно, будет означать запрос к базе данных каждую минуту и, вероятно, будет слишком интенсивным для общей среды.
Вариант 2.
Выполняйте запрос к базе данных каждые 5 минут и собирайте все напоминания, которые должны быть отправлены в этом 5-минутном блоке, и сохраняйте их в коллекции (то есть в памяти), а затем каждую минуту проверяйте, какие из них необходимо отправить.
Это, конечно, уменьшает количество выполняемых запросов, но не уверен, что это приведет к чрезмерной загрузке памяти.
Вариант 3
То же, что и вариант 2, но отправка запроса каждые 15 минут и сохранение в коллекции.
Это из Конечно, это означает, что намного меньше запросов к базе данных, но больше хранится в памяти.
Вариант 4
Выполнять запрос к базе данных каждые 15 минут и получать все напоминания в этом блоке и немедленно запускать их.
Это означает, что они не будут хранится в памяти очень долго и сокращает количество запросов. Однако в зависимости от того, когда пользователь настроил напоминание, электронное письмо может прийти намного раньше, чем они установили.
Например, они сказали напомнить мне в 10:44. Я бы запустил свой планировщик в 10:00, и он будет работать с 10:00 до 10:15, а затем с 10:15 до 10:30, затем с 10:30 до 10:45.
Так что электронное письмо действительно приходило 14 мин. раньше, чем предполагалось.