如何设计日历提醒/警报系统

ric*_*ard 10 reminders calendar alerts

我的网络应用程序中有一个日历系统.我们需要实施提醒.

是否有任何提醒/警报模式或系统设计或最佳实践?如果是,或者如果没有,可能有什么方法可以实现这一目标?

设计注意事项

  1. 如果日历事件被删除或更改,或者用户关闭该事件的提醒,则需要能够取消/阻止提醒.因此,我们不能只是在队列或其他东西中解雇并忘记它们.
  2. 提醒可以是事件之前的X时间量,X是在日历事件设置中设置的
  3. 提醒不需要超级准确(到第二个甚至是分钟).+ - 5分钟很好.
  4. 不想预先计算提醒,因为随着日历事件的变化,维护成为一场噩梦,特别是在涉及重复事件的情况下.

到目前为止,我的设计是这样的:

  1. 每10分钟安排一次预定的工作.
  2. 该作业将抓取所有可能的相关事件,并计算下一个10分钟间隔的潜在事件(过滤掉没有提醒集的事件).
  3. 作业调用服务器端的API端点,为所有相关方提供前端通知和电子邮件提醒.

但也许有比这更优雅的模式?已经建立的东西?或者天蓝色等工具?

我们的堆栈是.net和azure.

小智 4

创建第二天的表。添加一个触发器以在插入主表时添加提醒,并添加一个触发器(如果是同一天,则验证作业是否计划为 10 分钟增量并将其添加到每日表中,与删除提醒相同.)

每天在非高峰时间对作业进行批处理,以便为第二天设置提醒并安排作业在适当的时间运行。如果它们在批处理运行之前被删除,则永远不会添加它们;如果之后,触发器将删除它们。

按照批处理脚本和触发器的计划,使用现有脚本根据更小的每日表发送通知。

此过程将最大限度地减少总体执行时间,同时使用最少的数据库空间。

编辑:虽然建议的流程是对原始算法的改进,但如果没有使用数据,就无法确定这是否会转化为 Azure 平台上的财务节省。

轻度使用时:这将通过消除全表查询并在不需要时每 10 分钟消除一次作业来提高性能,但会增加几 MB 的存储空间。

从大型到超大规模的解决方案:批处理和触发器将通过消除 10 分钟查询期间的全表扫描来提高效率。

在中间,您提出的解决方案是 50/50。

如果没有更多数据,我无法确定这些确切的界限在哪里。