トランザクション処理とは?
データベースに対して複数の操作をまとめて実行し、データの一貫性を保つための処理
例
- データの挿入、更新、削除
- 複数のテーブルにまたがるデータ操作
- 金銭取引などの重要な処理
4つの特性(ACID)が求められる
- 原子性(Atomicity): すべての操作が成功するか、すべて失敗する。
- 一貫性(Consistency): データベースの状態は常に一貫性を保つ。
- 独立性(Isolation): 他のトランザクションの影響を受けない。
- 耐久性(Durability): 一度コミットされたデータは失われない。
これらの特性を保証することで、データの整合性を保ち、信頼性の高いシステムを実現することができる
トランザクション処理の例
- オンラインショップでの商品購入
- 銀行での振り込み
- 航空券の予約
トランザクション処理を行うための技術
データベース管理システム(DBMS)
データベースを管理するためのソフトウェア(MySQL, PostgreSQL, ...)
トランザクション処理は以下の4つのステップで実行されます。
- 開始: トランザクション処理の開始
- 読込: データベースからデータを読み込む
- 更新: データベースのデータを更新
- コミット: トランザクション処理の完了
これらのステップは、DBMSによって管理されます。
トランザクションログ
トランザクション処理の内容を記録したログ
具体的には、以下の情報が記録されます。
- トランザクション開始時刻
- トランザクション終了時刻
- トランザクション処理の内容(読込、更新、削除など)
- データベースの状態変更情報
トランザクションログは、以下の目的で使用されます。
- 復旧: データベース障害が発生した場合、トランザクションログを使用してデータベースを復旧することができます。
- 監査: データベースの操作履歴を確認することができます。
- 競合解決: データベースの競合を解決するために使用することができます。
ロック
データの競合を防ぐための仕組み
複数のユーザーが同時にデータベースにアクセスし、同じデータを更新しようとする場合、データの競合が発生する可能性があります。ロックは、データの更新を行うユーザーのみがそのデータにアクセスできるようにすることで、データの競合を防ぎます。
- 排他ロック: データの更新を行うユーザーのみがそのデータにアクセスできる
- 共有ロック: 複数のユーザーが同時にデータを読み込める
- 意向ロック: データの更新を行う予定があることを示す
2相コミット
トランザクション処理のコミットを確実に実行するための仕組みです。
2相コミットは、以下の2つのフェーズで構成されます。
-
準備フェーズ
- トランザクション処理に必要なすべてのデータを取得する
- データベースの状態変更をログに記録する
- コミットできるかどうかを判断する
-
コミットフェーズ
- データベースの状態変更を実際に反映する
- ログを更新する
2相コミットを行うことで、トランザクション処理が途中で中止された場合でも、データの一貫性を保つことができます。
関連記事