我正在尝试定义最好/最有效的方法是在sidekiq上安排后台作业。我需要让每个用户定期运行此作业(即每15分钟,每天等等)。
作业与多个对象相关联,例如日历,发布,博客等。每个用户可以拥有0个对象。
我考虑了两种选择:
1)拥有一个调度程序作业,该作业又为上述每个对象调度一个后台工作人员。工人看起来像这样:
class WorkerScheduler
def perform
CalendarWorker.perform_async
BlogWorker.perform_async
##### etc...
end
`
在每个工作人员内部,我将对每个可用记录进行遍历(可能需要进行线程处理,如此处所述:How get best performance rails requests parallel sidekiq worker
class CalendarWorker
calendars = Calendar.all
calendars.each do |calendar|
#### actions for each calendar
end
### reschedule worker
CalendarWorker.perform_in(15.minutes)
end
end
`
2)每次为日历,帖子,博客等创建新记录时。安排后台工作人员,并在该工作人员中重新安排时间,以根据需要稍后再次执行。即: `
class CalendarWorker
def perform(i)
.... complete all logic for Calendar.find(i) ...
CalendarWorker.perform_in(15.minutes, i)
end
end
`
以上两种方法中的一种优于另一种吗?我希望确保以最有效的方式完成此操作,并且确保我的工作人员dyno(Heroku)不会过载。现在,我一直在计划一份工作机会记录,而我的记忆似乎正在使Dyno的内存不足500 MB,几乎没有流量。计划作业的数量是否对内存使用有很大影响?
对于工作本身的运行和计划,是否还有其他可能的方法?