悲観的ロック
名前が示すように、非常に悲観的です。データを取得しに行くたびに、他の人が改変してしまうと思うので、データを取得するたびにロックをかけますが、他の人がデータを取得したい場合は、ロックを取得するまでブロックされます。
従来のリレーショナル データベースでは、行ロック、テーブル ロック、読み取りロック、書き込みロックなどの多くのロック メカニズムが使用されており、これらはすべて操作前にロックされます。これは、外部 (システムの他の現在のトランザクションや外部システムからのトランザクション処理を含む) によって変更されるデータに対する保守的な態度を指すため、データ処理プロセス全体を通じてデータはロックされた状態に保たれます。
悲観的ロックの実装は、多くの場合、データベースによって提供されるロック メカニズムに依存します (データ アクセスの排他性を真に保証できるのは、データベース層によって提供されるロック メカニズムだけです。それ以外の場合は、ロック メカニズムがこのシステムでは、データが外部システムによって変更されないことを保証できません)。
Optimistic Lock
名前が示すように、非常に楽観的です。データを取得しに行くたびに、他の人もそうしてくれると考えます。したがって、ロックはかかりませんが、更新する際には、その期間内に他の人が更新したかどうかを判断し、バージョン番号などの仕組みを利用することができます。
オプティミスティック ロックは、マルチ読み取りアプリケーション タイプに適しており、スループットを向上させることができます。データベースが write_condition と同様のメカニズムを提供している場合、実際にはオプティミスティック ロックが提供されます。
概要
両方のロックにはそれぞれ長所と短所があります。一方が他方より優れているとは考えられません。オプティミスティック ロックは書き込み比較に適しています。まれなケース、つまり競合がほとんど発生しない場合、これによりロックのコストが節約され、システム全体のスループットが向上する可能性があります。ただし、競合が頻繁に発生する場合は、上位層のアプリケーションが再試行を続けることになり、実際にはパフォーマンスが低下するため、この場合は悲観的ロックの方が適切です。
PHP 関連の知識の詳細については、PHP 中国語 Web サイト をご覧ください。
以上がPHP の悲観的ロックと楽観的ロックの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。