重复发生的事件,如何存储它们?

时间:2016-02-09 04:57:59

标签: cron recurring-events rrule

我之前就重复发生的事件发现了一些问题,但我没有找到一个能够满足我需求的问题。我正在努力了解如何处理通知系统的重复事件。

到目前为止我知道两个选项:

  1. 存储一个包含模式的单个事件,并即时计算任何未来事件(例如永远重复等)。使用cron模式甚至更好的RRULE东西。

  2. 将所有未来事件存储为单个事件,直到某个日期为止。

  3. 我对选项1的问题是我需要我的事件来保存其他数据,例如确认,如果我有重复事件,我可能需要为每个重复事件保留多个确认。这变成了令人讨厌的黑客,使事情有效,我甚至不想考虑如何处理显示与其相关的其他数据的过去和未来事件。

    选项2更好,因为即使在单个事件中,我也可以存储与每个相关的所有额外数据。问题在于处理未来事件。首先,如果事件永远重复,那么我应该多少去存储事件。如果用户想要显示尚未生成的未来事件,我是否只是做块并动态生成?这个选项也像是一个黑客。

    到目前为止,我已经阅读了一些关于RRULE的内容,发现我可以使用rrule.js作为前端和其他一些后端程序包。

    编辑1:为了更好地澄清,我并没有完全准备好使用完整的iCal格式标准,并且我只想使用RRules。但是,我可能会改变主意,因为我仍在寻找选择。

    如何将iCal Vevent和rrules存储在数据库中?

1 个答案:

答案 0 :(得分:2)

目前尚不清楚您是否仅仅将rrule作为表达复发内容的方便方式或是否要使用完整的iCalendar格式。

假设后者,RFC5545涵盖了选项1:您将存储" master" VEVENT,包含基本信息,以及RRULE,每个实例的一个VEVENT是一个"异常"到基本事件,其中每个例外都由其RECURRENCE-ID标识。

RFC5545没有此类事件的任何示例,但RFC5546在https://tools.ietf.org/html/rfc5546#section-4.4.8处有一些非常接近的东西(使用RDATE而不是RRULE,不需要METHOD属性,但你明白了。)