为MongoDB安排MapReduce作业

时间:2011-06-08 20:57:43

标签: mongodb scheduled-tasks

这更像是一个实现问题,但是使用像cron之类的简单事件来安排MongoDB的mapreduce等任务有什么缺点吗?说一些事情需要每小时执行一次,这似乎是一种合适的方式来做到这一点...但我想我只是因为所有流行的工作排队系统,如Resque和其他人。

我想我的问题更像是,cron是否提供了可靠且可靠的解决方案?想法?

1 个答案:

答案 0 :(得分:8)

Cron已经使用了几十年,非常可靠和坚固;如果您的cron不可靠,那么我建议您与您的操作系统供应商进行严格的讨论。此外,MongoDB文档讨论了cron作业(例如google“site:mongodb.org cron”),因此,推测可能是MongoDB的cron作业。

也就是说,如果你已经为另一个调度系统设置了一堆基础设施,那么可能没有理由将cron用于MongoDB,而其他任务则用于其他任务。

在任何情况下,如果您的cron作业可能需要足够长的时间来重叠并且您只想要一次运行,那么您可能希望在简单的PID文件锁定系统上进行分层:

  • cron作业在启动时查找PID文件。
  • 如果找到该文件,则会从文件中读取旧作业的PID并检查它是否仍在运行。
    • 如果旧的正在运行,那么新的就会抱怨并退出。
    • 如果旧的没有运行,那么新的将继续运行。
  • 当新作业确定可以启动时,它会将其PID写入PID文件。
  • 当新作业完成后,它会在退出之前立即删除PID文件(或使用atexit处理程序或您的环境支持的任何类似功能。)