2層ロック
① ストーリー性を取り入れた説明:2層ロックとは?
放課後、パソコン部のユウキはデータベースの勉強をしている最中、先生に質問しました。
ユウキ:「先生、トランザクションってデータベースの処理のまとまりのことですよね? その中に『2層ロック』っていう言葉が出てきたんですが、何ですか?」
先生:「いい質問だね。2層ロック(Two-Phase Locking)は、データベースで同時に複数の処理が行われても、データの整合性を保つためのルールのひとつなんだ。」
ユウキ:「整合性って、どういうことですか?」
先生:「たとえば、経理担当者の1人のが銀行でお金を引き出す処理をしている途中で、別の社員が同じ口座に同時にアクセスして別の操作をすると、口座の残高が合わなくなる可能性があるよね。そんな混乱を防ぐために、処理が終わるまでデータに“ロック”をかける仕組みが必要なんだよ。」
ユウキ:「それが2層ロックなんですね?」
先生:「そう。2層ロックには“2つの段階”があるんだ。まず最初にロックをどんどん取得する“成長フェーズ”、そのあとに処理を終えてロックを順次解放していく“縮退フェーズ”。この2段階を守ることがルールなんだ。」
ユウキ:「じゃあ、途中でロックを外しちゃいけないってことですか?」
先生:「その通り!1つでもロックを解除したら、もうそれ以降は新しいロックを取得できない。それによって、他のトランザクションとの競合が起きにくくなるというメリットがあるんだ。」
ユウキ:「なるほど、複数の処理が重なっても安全なように、最初に全部準備してから実行するんですね!」
2層ロックの定義
② 実際の事例
2層ロックの活用は、特に金融機関やECサイトのように多くの人が同時にデータベースにアクセスする環境で欠かせません。
たとえば、クレジットカードの利用履歴を照会しているときに、同時に請求処理が実行されてしまうと、未処理の金額が二重請求になるリスクがあります。そこで2層ロックを使えば、照会中に他の処理がデータを変更することを防げるのです。
また、商品在庫の管理でも重要です。ECサイトで「在庫が1つしかない商品」が注文される際、複数のユーザーが同時に購入手続きを行うと、重複して注文を受け付けてしまう恐れがあります。これも、2層ロックにより在庫データを一時的にロックすることで防ぐことが可能です。
大手クラウドベンダーやRDB製品(Oracle Database、MySQLなど)も2層ロックを実装しており、安全なデータ処理に役立っています。
③ クイズや小テスト
クイズ1:2層ロックの名前の由来は?
A. ロックを2人で管理するから
B. ロックの取得と解放の2段階があるから
C. 2つのロック方式を混ぜて使うから
クイズ2:2層ロックの効果はどれ?
A. データベースの速度が上がる
B. データの不整合を防げる
C. ユーザーインターフェースが改善される
クイズ3:2層ロックの縮退フェーズとは?
A. ロックを取得するフェーズ
B. ロックを解除するフェーズ
C. 処理を一時停止するフェーズ
回答と解説
- クイズ1の答え:B. ロックの取得と解放の2段階があるから
→ 成長フェーズと縮退フェーズの2段階構成です。 - クイズ2の答え:B. データの不整合を防げる
→ 同時処理の衝突を防ぎます。 - クイズ3の答え:B. ロックを解除するフェーズ
→ 縮退はロックを解放する処理の段階です。