Выполнение запросов к БД с целью сохранения элементов в коллекции?

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

В основном у меня есть система напоминаний, в которой пользователи могут устанавливать напоминания. Это похоже на Календарь 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 мин. раньше, чем предполагалось.

7
задан chobo2 10 May 2011 в 16:39
поделиться