mysql - 使用 MySQL 作为作业队列

标签 mysql algorithm queue job-scheduling

我想使用 MySQL 作为作业队列。多台机器将生产和消费工作。工作需要安排;有些可能每小时运行一次,有些每天运行一次,等等。

这看起来相当简单:对于每个作业,都有一个“nextFireTime”列,让工作机器使用 nextFireTime 搜索作业,将记录的状态更改为“inProcess”,然后在作业执行时更新 nextFireTime结束。

当一个 worker 默默地死去时,问题就来了。它将无法更新 nextFireTime 或将状态设置回“空闲”。

不幸的是,作业可能会长时间运行,因此无法选择用于查找已处理时间过长的作业的收割线程。没有有效的超时值。

谁能建议一种能够正确处理不可靠工作机器的设计模式?

最佳答案

大概是这样

当一个工作人员获取一个工作时,它可以将它的进程 ID 或另一个唯一 ID 添加到工作中的一个字段

然后在另一个表中,每个 worker 不断更新他们还活着的值。更新“我还活着”字段时,您会检查所有其他“最后一次工作人员显示出生命迹象”。如果一个 worker 超过了限制,找到它正在处理的所有工作并重置它们。

换句话说,看门狗在工作进程上工作,而不是工作本身。

关于mysql - 使用 MySQL 作为作业队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030681/

相关文章:

mysql - 在 MySQL 和 SQL Server 中查询?

mysql - 如何在mysql中定义一个100亿行的key/value表?

mysql order by 不适用于查询的选择部分中的操作?

Python With MySQL 用于拆分 json 数据并将多行插入到表中

javascript - Waveform.js - 波形中较粗线的算法

java - 需要将时间戳分成不同的日子

algorithm - 减少 filenet 对象存储之间的搜索次数以根据文档创建时间查找文档的最佳方法?

c - 结构中的默认值

python - 为类似数字代码的系统实现队列

c - FreeRTOS 中队列数组的问题