
楽観的ロック?悲観的ロック?
初めましてblueです。
現在、ITベンチャー企業でWEB・スマホの受託開発をやっているエンジニアです。
とある言葉を初めて聴きました。
楽観的ロック
悲観的ロック
これが何なのかというと排他制御の方式になります。
排他制御とは
共有資源(データやファイル)に対して複数のアクセスが見込まれる場合に、同時アクセスにより不整合が発生することを防ぐため、あるトランザクションが共有資源(データやファイル)にアクセスしている時は他トランザクションからはアクセスできないようにして直列に処理されるように制御すること。
他のユーザーが操作出来ないように制御することです。
商品を購入する時とか複数のユーザーがアクセスして、操作するときにデータの過不足が発生したりします。そうならないように制御すること
その中でもやり方は色々あります。
アクセスすら出来なくするのか、アクセスは出来るけど最終的に更新できなくするのか
その方式が楽観的ロック、悲観的ロック
概念とか考え方的なものになってきます。
楽観的ロック
めったなことでは他者との同時更新は起きないであろう、という楽観的な前提の排他制御。データそのものに対してロックは行わずに、更新対象のデータがデータ取得時と同じ状態であることを確認してから更新することで、データの整合性を保証する方式。
データの更新するタイミングでチェックをすること。
残り1個の商品を購入する時に購入するタイミングで他のユーザーがその商品を既に購入していないかどうかをチェックする
データの更新するタイミングでデータの整合性を図ることを表します。
悲観的ロック
他者が同じデータに頻繁に変更を加えるであろう、という悲観的な前提の排他制御。更新対象のデータを取得する際にロックをかけることで、他のトランザクションから更新されないようにする方式。
アクセスすら出来なくすること
残り1個の商品を他のユーザーがカートに入れていれば、その商品の在庫をなしにしたりして、カートに入れることすら出来なくする
アクセスすら出来なくすることで商品を同時購入する問題を解決します。
ざっとまとめてみました。
説明として不十分なところもありますが、ご理解いただけると幸いです。
以上が今日学んだ楽観的ロック、悲観的ロックでした
いいなと思ったら応援しよう!
