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

时间:2018-07-01 02:16:39

标签: calendar reminders alerts

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

是否存在任何提醒/警报模式或系统设计或最佳实践?如果可以,那么可以通过什么方式实现这一目标?

设计注意事项

  1. 如果日历事件被删除或更改,或者用户关闭该事件的提醒,则需要能够取消/阻止提醒。因此,我们不能只是开枪而在排队之类的地方忘记它们。
  2. 提醒可以是事件发生前X的时间,X是在日历事件设置中设置的
  3. 提醒不必太精确(精确到一秒甚至一分钟)。 +-5分钟就可以了。
  4. 不想预先计算提醒,因为随着日历事件的改变,维护变得像一场噩梦,尤其是在涉及重复事件的情况下。

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

  1. 每10分钟运行一次计划的作业。
  2. 该作业会捕获所有可能的相关事件,并计算下一个10分钟间隔内的潜在事件(过滤掉未设置提醒的事件)。
  3. Job在我的服务器端调用一个API端点,该端点发出前端通知和所有相关方的电子邮件提醒。

但是,也许还有比这更优雅的图案?已经建立了一些东西?还是一些天蓝色的工具?

我们的堆栈是.net和azure。

1 个答案:

答案 0 :(得分:1)

为第二天创建一个表格。添加一个触发器以在插入主表时添加提醒,并添加一个触发器(如果是同一天,以确认该工作计划在该10分钟的增量内完成,然后将其添加到每日表中,以删除提醒)

每天在非高峰时间分配作业,以提醒第二天,并安排作业在适当的时间运行。如果在批处理运行之前将其删除,则从不添加;如果在此之后,触发器将删除它们。

使用批处理脚本和触发器所安排的现有脚本,根据较小的日表发送通知。

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

编辑: 尽管建议的过程是对原始算法的改进,但是如果没有使用情况数据,将无法确定这是否将转化为Azure平台上的财务节省。

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

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

中间是建议的解决方案的50/50。

那些确切的界限在哪里,我不能说没有更多的数据。