我目前正在尝试为我的应用程序中的特定功能部分找出最佳逻辑。
考虑一下:
updated_at
时间后5小时发生我非常熟悉Laravel队列和cron作业等,我已经简要介绍了Laravel Task Scheduler,但我实际上正在努力解决的是这应该如何运作的逻辑......
这是我当前的算法(我知道它不是最好的解决方案):
updated_at
时间戳的4小时55分钟。如果它还没有更新,它将在5分钟后再次运行相同的任务,它将在最终删除记录之前再次测试时间戳。我对上述解决方案的关注是数据库中可能存在大量记录,因此这将导致计划中的大量任务,这可能不是最好的想法......
有人能提出比上述更好的逻辑吗?
请注意,我不需要为我编写代码,我只是寻求一些逻辑上的帮助
答案 0 :(得分:0)
我可能过度简化了这一点,但下面的过程会更简单:
updated_at
值大于或等于当前时间的记录 - 我只会使用Carbon
- 并从那里删除它们这将消除对队列的需要,并且只会在任务调度程序上运行。根据您正在处理的记录数量,您可能需要安排任务以使它们不重叠 - 但是对于本地数据库连接和一些有效的代码,您可以在一分钟内通过大量记录进行流失。 ..
这会更好吗?
答案 1 :(得分:0)
您应该可以使用排队作业执行此操作,Laravel允许您指定处理程序再次处理之前的时间。请参阅"手动释放工作"在下面的链接上。
https://laravel.com/docs/5.2/queues#job-class-structure
然后,您可以创建某种形式的排队作业,并检查updated_at时间加上多长时间,然后将其与当前时间进行比较并将其释放到队列中达到该秒数,这意味着它应该运行一次或者两次取决于updated_at是否更改,从而最大限度地减少了检查数据库的需要。
$this->release($timeUntilFiveHoursAfterUpdatedAt);