我想设计一个如下所示的系统:
T
时间,会发生E
事件D
和一些操作A
T - D
时间(D
发生前E
秒),我的系统执行操作A
我的问题是,如果我在定义操作和延迟T - D
时存储时间(A, D)
,并且T
发生更改,那么我将不得不更新存储的时间。这可能会导致我的系统出现一些不一致的情况,因为我必须考虑每次触及事件的生命周期时应该更新的所有事件。
如果我决定不存储T - D
,那么我看到的唯一解决方案是不断检查更多事件。如果我每小时都有一个cron作业,那个cron作业将不得不接收所有未发生的事件,计算current time + D
,然后对T
进行检查。这可能会导致大量无用的计算。
是否有解决此类问题的标准方法?我不想被迫说T
如果不完全必要,就不能改变/**
* Override to allow different servers to use different tables
*
* @return string
*/
public function getTable()
{
if (is_null($this->table)) {
if (str_contains(config('database.mysql.host'), 'SOMETHING_DIFFERENT')) {
$this->table = 'database1.sales_rank';
} else {
$this->table = 'database2.sales_rank';
}
}
return parent::getTable();
}
。我一直在研究像基于事件的架构这样的术语,但我似乎找不到合适的答案,也许我使用了错误的搜索。
一个很好的例子是Stripe" trial_will_end"在用户试用结束前3天触发的事件。然而,这3天的延迟是固定的,如果我在此事件发出后延长试验,我无法知道会发生什么。我想根据它们的实现,它会触发两次,或者不会。
我希望我的问题很明确,如果没有,请不要犹豫提问,我会编辑我的帖子。