我正在使用Gearman工作人员接受来自MySQL数据库的工作。这些工人获得工作的程序如下:
SELECT foo, bar FROM jobs WHERE job_id = 'foobarbaz' AND status = 'WAITING';
现在,如果该查询返回一行,那么工作人员知道它已被赋予有效的作业并继续处理它。但当然风险在于,在工作时,另一名工人也可能担任这项工作。
为了防止这种情况,我在想如何以原子方式选择继续执行作业所需的数据,以及如果它有效则更新它的状态?我想或许可以使用作业ID对行状态进行UPDATE,然后测试受影响的行,但不确定是否有更合理的方法可以解决它。
感谢。