ホームページ >データベース >mysql チュートリアル >悲観的ロックと楽観的ロックの定義
ペシミスティックロックとは、その名の通り排他的・排他的な性質が強く、外部からデータが改変されることに対して保守的な態度を指すものです。楽観的ロック機構は、悲観的ロックに比べてより緩いロック機構を採用しており、データベースのファントムリードや業務処理時間の長時間化などによるデータ処理エラーを回避するための機構でもあります。
楽観的ロック (楽観的ロック)
楽観的ロックは悲観的ロックに関連しています。楽観的ロックでは、データが以下であることを前提としています。通常の状況では競合は発生しないため、データが更新のために送信されると、データの競合が正式に検出されます。競合が見つかった場合は、ユーザーにエラー メッセージが返され、ユーザーが何をすべきかを決定できるようになります。 。
百度百科:
楽観的なロック機構は、より緩いロック機構を採用しています。楽観的ロックは悲観的ロックと相対的なものです。また、データベースのファントム読み取りや長時間の業務処理時間によって引き起こされるデータ処理エラーを回避するためのメカニズムでもあります。ただし、楽観的ロックはデータベース自体のロック メカニズムを意図的に使用するのではなく、データ自体の正確性を確保するため。
悲観的ロックと比較して、楽観的ロックは、データベースの処理時にデータベースが提供するロック メカニズムを使用しません。オプティミスティック ロックを実装する一般的な方法は、データのバージョンを記録することです。
オプティミスティック同時実行制御では、トランザクション間でデータ競合が発生する可能性は比較的小さいと考えられるため、できるだけ直接処理を進め、送信されるまでロックしないようにします。そのため、ロックやデッドロックは発生しません。起こる。
悲観的ロック
データベース内のデータの一部を変更する場合、他の人が同時に変更されることを避けるために、最良の方法は次のとおりです。同時実行を防ぐためにデータを直接ロックします。データベース ロック メカニズムを使用してデータを変更する前にロックし、その後データを変更するこの方法は、ペシミスティック同時実行制御 (「ペシミスティック ロック」、Pessimistic Concurrency Control、略称「PCC」とも呼ばれます) と呼ばれます。
Baidu百科事典:
悲観ロックはその名の通り、強い排他的・排他的な性質を持っています。これは、外部 (システムの他の現在のトランザクションや外部システムからのトランザクション処理を含む) によって変更されるデータに対する保守的な態度を指します。したがって、データ処理プロセス全体を通じて、データはロックされたままになります。悲観的ロックの実装は、多くの場合、データベースによって提供されるロック メカニズムに依存します (データ アクセスの排他性を真に保証できるのは、データベース層によって提供されるロック メカニズムだけです。それ以外の場合、たとえロック メカニズムがこのシステムに実装されていても、外部システムがデータを変更しないことを保証します)。
これが悲観的ロックと呼ばれる理由は、データ変更に対して悲観的な態度をとる同時実行制御手法であるためです。一般に、データが同時に変更される可能性は比較的高いため、変更前にデータをロックする必要があると考えられます。
悲観的ロックは、主に共有ロックと排他ロックに分類されます
共有ロック [共有ロック] は、読み取りロック、または略して S ロックとも呼ばれます。名前が示すように、共有ロックとは、複数のトランザクションが同じデータのロックを共有でき、すべてのトランザクションがデータにアクセスできますが、読み取りのみが可能で変更はできないことを意味します。
排他ロック [排他ロック] は書き込みロック、略して X ロックとも呼ばれます。名前が示すように、排他ロックは他のロックと共存できません。トランザクションがデータ行の排他ロックを取得すると、他のトランザクションはその行の他のロック (共有ロックや排他ロックを含む) を取得できなくなります。ただし、排他ロックを取得するトランザクションは、ロックはデータ行の読み取りと変更を行うことができます。
悲観的な同時実行制御は、実際には「最初にロックを取得してからアクセスする」という保守的な戦略であり、データ処理のセキュリティを保証します。
ただし、効率の観点から見ると、ロック メカニズムによりデータベースに追加のオーバーヘッドが発生し、デッドロックの可能性が高くなります。また、並列処理が低下するため、トランザクションがデータ行をロックすると、他のトランザクションはそのデータ行を処理する前にトランザクションが処理されるまで待機する必要があります。
以上が悲観的ロックと楽観的ロックの定義の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。