【PHP】同時編集時の排他制御

php

状況

複数台のPCで同登録プロセスを同じタイミングで実行した場合に、意図しない結果が生じる。例えば、登録ボタンを複数台のPCで同時に押下時に保存されるレコードが想定とは異なっている場合。

排他制御

排他制御とは同時操作時に競合する一方の操作を制限、禁止すること。phpの場合には、セマフォ、ロックファイルを使うといった方法が出てくる。これまでは楽観的排他制御の実装だったが、それを悲観的排他制御に変えていく場合、どれだけ取りこぼしを少なくできるか。単に更新前に、再度DBのデータを見てそれと状態比較して意図したものと異なればfalseを返してやるという考えもあるだろうか。1台の操作前提ならトランザクション、二重登録の禁止等で、ある程度保たれるとは思うが、複数台の場合には意図しない挙動が見られる。

php, programming

Posted by himajinn