Я пытаюсь создать систему напоминаний и использую кварц для планирования.Однако я придумываю несколько возможных способов сделать то, что мне нужно, но я не уверен, что лучший способ и как его протестировать.
В основном у меня есть система напоминаний, которую пользователи могут устанавливать напоминания,Это как Календарь Google.Вы устанавливаете дату и время вашего мероприятия, а затем устанавливаете напоминание, говоря: «Напомните мне за 15 минут до»
Таким образом, вы можете провести мероприятие 10 мая 2011 года в 9:59, и вы можете сказать напоминаниея "за 15 минут до"
Так что это будет 10 мая, 10:44 утра.
Я буду в размещенной среде.(Мой сайт и расписание будут работать в одной и той же среде и даже в одном и том же решении. Поэтому это не может сильно замедлить просмотр пользователями моего сайта.)
Я также использую nhibernate и свободно говорю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 минут раньше, чем предполагалось.