私はphpスクリプトを実行する必要があります。同時に実行するスクリプトは複数ありません。mysqlデータベースを使用してシングルスレッドジョブを管理する方法は?
私はMySQLを使用しています、と私もののについては、このソリューション:
は私が怒鳴るデータベース構築:私はランダムなタスクIDを作成するスクリプトを実行する前に job_id | task_id | last_updated_time (AUTO UPDATE)
"sending_emails" 77238 2107-5-3 12:2:2
を、そして私が更新するために、クエリを実行しますtask_id。
$task_id = generate_random_task_id();
$query = "
UPDATE
jobs
SET
task_id = $task_id
WHERE
task_id = $task_id
OR
NOW() - last_updated_time > 30
LIMIT 1
"
/*
Then I need to check if there was an update, if yes then I will run the script otherwise i will stop since there is already another script running
*/
$query = "SELECT JOB_ID WHERE taks_id = $task_id "
$result = run($query)
if(! isset($result[JOB_ID])){
DIE();
}
2つのスクリプトが同時に実行される可能性はありますか?
ありがとうございますが、なぜfinish_timeが機能するのか分かりませんし、私の仕事はうまくいかないでしょうか? –
@ダルシャン・メフタの答えをご覧ください。 –
間隔を指定せずにSQLで時間通りに計算を行うという複雑さを除けば、実行が30秒未満で済むことが保証できる場合にのみ目的が達成されます。また、データベースの並行性モデルによって競合状態が発生します。さらに、あなたの例では、あなたのタスクIDの生成には非常に低いエントロピーしかありません。もしこれを高い頻度で実行しているのであれば、ある時点で衝突することになります。私は行く必要がありますか? – symcbean