0

MySQL データベースからのジョブを受け入れるために Gearman ワーカーを使用しています。これらの労働者が仕事を得るための手順は、次のようなものです。

SELECT foo, bar FROM jobs WHERE job_id = 'foobarbaz' AND status = 'WAITING';

ここで、そのクエリが 1 つの行を返す場合、ワーカーは有効なジョブが与えられたことを認識し、その作業に進みます。しかしもちろん、作業中に別の作業員が仕事を引き継ぐ可能性があるというリスクがあります。

これを防ぐために、ジョブを続行するために必要なデータをアトミックに選択し、有効な場合はステータスを更新するにはどうすればよいか考えています。おそらく、ジョブ ID を使用して行ステータスの UPDATE を実行し、影響を受ける行をテストすることを考えましたが、より賢明な方法があるかどうかはわかりませんでした。

ありがとう。

4

0 に答える 0