Как разработать календарную систему напоминаний / предупреждений

В моем веб-приложении есть календарная система. Нам нужно внедрить напоминания.

Существуют ли какие-либо шаблоны напоминаний / предупреждений, конструкции системы или передовые методы? Если да или нет, то какими способами можно добиться этого?

Рекомендации по дизайну

  1. Необходимо иметь возможность отменять / предотвращать напоминания, если событие календаря удалено или изменено, или если пользователь отключит напоминание для этого события. Так что мы не можем просто выстрелить и забыть их в очереди или что-то в этом роде.
  2. Напоминания могут быть за X времени до события, X устанавливается в настройках события календаря.
  3. Напоминания не должны быть сверхточными (с точностью до секунды или даже минуты). + - 5 минут нормально.
  4. Не хочу предварительно рассчитывать напоминания, потому что тогда обслуживание становится кошмаром при изменении календарных событий, особенно когда речь идет о повторяющихся событиях.

Пока что мой дизайн выглядит примерно так:

  1. Запускайте запланированное задание каждые 10 минут.
  2. Задание собирает все возможные релевантные события и вычисляет потенциальные события для следующего 10-минутного интервала (отфильтровывая события, для которых не установлено напоминание).
  3. Работа вызывает конечную точку API на моей стороне сервера, которая запускает уведомление внешнего интерфейса и напоминание по электронной почте для всех соответствующих сторон.

Но, может быть, есть более изящные узоры, чем этот? Что-то уже установлено? Или какой-нибудь инструмент в лазурном цвете и т. Д.?

Наш стек - это .net и лазурный.


person richard    schedule 01.07.2018    source источник
comment
Что с анонимной ненавистью? Если у вас возникла проблема с вопросом, предложите несколько исправлений или, еще лучше, внесите их. Будьте осмысленными.   -  person richard    schedule 01.07.2018
comment
Было бы полезно, если бы вы хотя бы указали, какой язык вы используете. Ваш вопрос очень широкий, но, может быть, есть более элегантные узоры, чем этот? Что-то уже установлено? Или какой-нибудь инструмент в лазурном цвете и т. Д.? Это три открытых вопроса, очень субъективных по своей природе.   -  person Strom    schedule 20.09.2018
comment
Потому что мне все равно, на каком языке. Я ищу архитектурный образец.   -  person richard    schedule 21.09.2018
comment
Вот почему SO становится бесполезным. Так много людей устали от драконовской полиции, поэтому они редко бывают здесь (в том числе и я, а раньше был фанатиком). Затем, с наградой в 200 человек, круг хороших ответчиков настолько мал, что никто даже не хочет отвечать.   -  person richard    schedule 24.09.2018
comment
Я дал вам архитектурный образец, превосходящий ваш собственный, но награда так и не была выплачена. Имея больше информации, можно было бы разработать более индивидуальное решение. Если мой ответ не соответствует вашим потребностям, прокомментируйте, почему, и дайте мне возможность ответить.   -  person Strom    schedule 09.10.2018
comment
Любое решение для этого @richard, так что вы придерживались своего текущего решения или нашли лучшие решения?   -  person Iman Tumorang    schedule 28.07.2020


Ответы (1)


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

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

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

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

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

При легком использовании: это повысит производительность за счет исключения полных запросов к таблицам и устранения заданий каждые 10 минут, когда они не требуются, за счет нескольких МБ дополнительного хранилища.

Решения от широкого до гипермасштабируемого: пакетирование и триггеры повысят эффективность за счет исключения полного сканирования таблицы во время 10-минутных запросов.

В середине это 50/50 от предлагаемого вами решения.

Где лежат эти точные границы, я не могу сказать без дополнительных данных.

person Strom    schedule 20.09.2018