Как создать календарь напоминание / систему оповещения - PullRequest
0 голосов
/ 01 июля 2018

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

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

Особенности проектирования

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

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

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

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

Наш стек - .net и azure.

1 Ответ

0 голосов
/ 20 сентября 2018

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

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

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

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

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

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

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

В середине, это 50/50 к вашему предложенному решению.

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

...