Cron 重复事件,如何存储它们?

Cron 重复事件,如何存储它们?,cron,recurring-events,rrule,Cron,Recurring Events,Rrule,我发现以前有人问过一些关于反复发生的事件的问题,但我还没有问到一个与我的需要接近的问题。我正在努力理解如何处理通知系统的重复事件 到目前为止,我知道有两种选择: 存储一个具有模式的单一事件,并动态计算任何未来事件(例如“永远重复”等)。使用cron模式或者更好的RRULE模式 将所有未来事件存储为单个事件,直到特定日期 选项1的问题是,我需要我的事件保存一些其他数据,如确认,如果我有重复事件,我可能需要为每个重复事件保存多个确认。这会转化为一种令人讨厌的黑客行为,使事情正常运行,我甚至不想思考如

我发现以前有人问过一些关于反复发生的事件的问题,但我还没有问到一个与我的需要接近的问题。我正在努力理解如何处理通知系统的重复事件

到目前为止,我知道有两种选择:

  • 存储一个具有模式的单一事件,并动态计算任何未来事件(例如“永远重复”等)。使用cron模式或者更好的RRULE模式

  • 将所有未来事件存储为单个事件,直到特定日期

  • 选项1的问题是,我需要我的事件保存一些其他数据,如确认,如果我有重复事件,我可能需要为每个重复事件保存多个确认。这会转化为一种令人讨厌的黑客行为,使事情正常运行,我甚至不想思考如何处理显示过去和未来的事件,这些事件有其他与之相关的数据

    选项2更好,因为即使在单个事件中,我也可以存储与每个事件相关的所有额外数据。问题在于如何应对未来的事件。首先,如果事件永远重复,那么我应该存储多少事件。如果用户希望显示尚未生成的未来事件,我是否只执行块并动态生成?这个选项也让人感觉像是黑客攻击

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

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


    iCal事件和rrules应该如何存储在DB中?

    不清楚您是否只关心rrule是作为一种方便的方式来表示递归的内容,还是希望使用完整的iCalendar格式

    假设后面的选项1包含在RFC5545中:您将存储一个“主”VEVENT,其中包含基本信息以及RRLE,每个实例+一个VEVENT,该实例是基本事件的“异常”,其中每个异常由其RECURRENCE-ID标识


    RFC5545没有此类事件的任何示例,但RFC5546的功能非常接近(使用RDATE而不是RRULE,不需要METHOD属性,但您知道了)。

    我想说,您非常接近我需要的功能。目前我还不打算使用完整的iCal格式,但可能会在以后决定。这些例子有些帮助,但还不够。我很难理解如何在一次重复中改变一个事件。VEVENT应该如何存储在数据库中?