1

我有一个为作业汇集数据库的后端。为了促进系统加速,我希望多个后端轮询数据库中的作业。

作业表:jobid,date,action,completed

有人告诉我这应该通过行锁定来完成。后端会做一个SELECT ... LIMIT 1 FOR UPDATE;但是,经过一些测试,选择不会跳过锁定的行,并且会阻塞,直到该行被解锁。

如果有办法获得第一个解锁行(使用 FOR UPDATE)?

谢谢。

4

1 回答 1

0

我假设您正在以某种方式标记该行,以表明某些后端作业正在处理它。如果是这样,您可以按照以下步骤操作:

  1. 选择 .... 其中 STATUS='OPEN' LIMIT 1
  2. 更新...设置 STATUS='RUNNING' 其中 Job-Key=? 和状态='打开'
  3. 如果更新计数 <> 1 则其他一些轮询器首先到达它,所以循环回到选择
于 2013-04-26T19:09:31.240 回答