LoginSignup
0
0

More than 1 year has passed since last update.

楽観ロックとは

Posted at

楽観ロックとは

そもそも楽観ロックとは、めったなことでは他者との同時更新は起きないであろう、という楽観的な前提の排他制御のことです。データそのものに対してロックは行わずに、更新対象のデータがデータ取得時と同じ状態であることを確認してから更新することで、データの整合性を保証します。

例えば、顧客がレジで顧客が購入したら、商品テーブルから在庫数カラムの情報を購入した分を反映するAPIが処理されるとします。
在庫10のりんごがある状態から、Aさんがりんごを10個購入すると、商品(りんご)テーブルの在庫数カラムは0になります。

これだと正常にDBに0と表示されますが、Aさんの他に同時にBさんがりんごを10個購入するとどうでしょう。
Aさんがりんご購入時の在庫数カラムは10なのに、Bさんが購入時にも在庫数カラムは10となっているので、AさんBさんどちらもりんごを購入することができてしまいます。

一つのSQLを並行して同時に処理することができてしまうと、データの整合性が取れず予期せぬ挙動を許容してしまいます。
このような事態を防ぐため、楽観ロックを実装します。

具体的な楽観ロックの実装方法

具体的な処理として挙げられるのは、更新対象のデータがデータ取得時と同じ状態であることを判断することです。
上記の例だと、「商品(りんご)テーブルの在庫数カラムが10であることを確認した時刻」と「商品(りんご)テーブルの在庫数カラムが更新された時刻」を比較します。
両方の時刻が等しくない時(=)でない時、エラーを吐くという処理を実装してあげれば良いです。

このように処理すると、AさんBさんが商品(りんご)テーブルの在庫数カラムを同時に取得してしまった時、どちらかのりんご購入時に処理されるAPIはエラーを表示されることになり、片方のAPIしか実行されずにすみます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0