设计的问题:你会如何设计一个反复出现的事件系统? [关闭](Design question: H

2019-06-28 05:48发布

如果你是负责构建支持重复事件的事件调度系统,你会怎么做呢? 如何当被删除的重复发生的事件,你处理? 你怎么能看到当未来事件会怎样?

即当创建一个事件,你可以选择“每天重复”(或每周,每年等)。

每个响应的一个设计吧。 我已经习惯了的Ruby / Rails,但无论你想表达的设计中使用。

我在接受采访时问到这个,不能拿出我喜欢一个很好的回应。

注意:在已经问/在这里找到答案。 但我希望能得到一些更实用的细节,详情如下:

  • 如果有必要可以发表评论或其他数据添加到重复发生的事件只是一个例子,如何将这项工作?
  • 如何将事件的变化和增删工作?
  • 您是如何计算时,未来事件发生?

Answer 1:

我开始通过实施一些时间表达由Martin Fowler概述 。 这需要搞清楚的时候其实应该发生预定的产品负责。 它是这样做的一个非常优雅的方式。 我结束了刚刚对什么是文章中积聚。

接下来的问题就是如何在世界存储表达式。 另一个问题是,当你读出的表情,怎么做那些放入一个不那么动态的用户界面? 有刚序列化的表达成BLOB谈话,但它会很难走表达式树知道被它的意思。

该解决方案(在我的情况)是存储适合用户界面将支持案件的数量有限的参数,并从那里,利用这些信息来动态生成的时间表达(优化创建时可以序列)。 因此,附表类最终有几个参数等进行偏移,开始日期,结束日期,星期几,等等......并从您可以生成时间表达做艰苦的工作。

作为具有的任务的情况下,有一个“服务”,对于N天生成的任务。 由于这是一个集成到现有的系统,并需要所有的情况下,这是有道理的。 然而,像这样的API可以很容易地用于投影复发而不存储所有实例。



Answer 2:

我有,当我管理项目的数据库年底之前做到这一点。 我要求每个事件被存储为独立的事件。 这允许你删除一个刚刚发生或者你可以移动的跨度。 这是一个更容易去除的倍数,而不是试图修改单个发生,把它一分为二。 我们就能够再拍表,只是有其中载有复发的信息recurrenceID。



Answer 3:

@Joe范迪克问:“你能在将来看看,看看在即将举行的活动会是什么?”

如果你想看到/显示事件的下n OCCURENCES他们将不得不要么一)在预先计算和存储在某个地方或b)可以实时计算和显示。 这将是何夕的框架相同。

有缺点)是你必须把限制在它的地方之后,你必须使用B)。 容易只是用二)开始。

调度系统并不需要这些信息,只需要知道什么时候下一个事件。



Answer 4:

当保存事件我会时间表保存到存储(姑且称之为“ 时间表 ”,我会计算事件时,下一次火,并保存为好,例如在“ 事件 ”。然后我看在“ 事件 ”,并计算出下一次的事件是发生并进入休眠状态,直到然后。

当应用程序“唤醒”它会计算事件何时应该再发生,再存放在此“ 事件 ”,然后执行该事件。

重复。

如果创建了一个事件,而睡觉的睡眠被中断,重新计算。

如果应用程序启动或从睡眠事件或类似的恢复,检查“ 事件 ”通过事件和采取相应的行动(这取决于你想错过的事件做什么)。

这样的事情将是灵活的,不会冒不必要的CPU周期。



Answer 5:

把我的头顶部(后修订在打字时/思想有两件事情):

确定最低复发分辨率需要; 那是多久应用程序运行。 也许是每天,也许每五分钟。

对于每一个反复出现的事件,存储最新的运行时间,运行间隔和其他商品一​​样的到期时间,如果这是可取的。

该应用程序运行时,它都会检查所有的事件,比较(今天/现在+ recurrenceResolution)至(recentRunTime + runInterval),如果两者相符,则触发事件。



Answer 6:

当我喃喃年前写了自己是一个日历应用程序,我基本上只是从cron偷走了调度机制和使用,对于经常性的事件。 例如,有事发生在每个月的第二个星期六除外一月将包括指令“重复= * 2-12 6月8日至14日”(每年2-12月,第二周从8运行到14日,和6日,因为我用从0开始编号为一周的天数)。

虽然这使得它很容易确定是否在任何给定时间发生的事件,它不能够处理“每N天”复发,也而非直观的少谁是不是Unix,精明的用户。

为了应对个别事件实例和拆卸/重新安排独特的数据,我只是不停地轨道有多远了计算和存储在数据库中,在那里他们可以再进行修改所产生的事件事件,移动,或在不影响删除原来经常性事件信息。 当加入一个新的重复事件,所有实例都立即计算出,直到现有的“上次计算日期”。

我并没有说这是做到这一点的最好办法,但它是一种方式,而其中一个工作的很好我前面提到的限制范围内。



Answer 7:

如果你有一个简单的reoccuring事件,如每天,每周或者几天一个星期,什么是错在调度/ cron的/使用buildt在functionallity? 创建可执行/控制台应用程序,并设置何时运行呢? 没有复杂的日历,事件或时间管理。

:)

// w ^



文章来源: Design question: How would you design a recurring event system? [closed]
标签: calendar