トランザクションとは、ソフトウェアの処理方式の一つで、互いに関連・依存する複数の処理をまとめ、一体不可分の処理単位として扱うことです。
トランザクションとは?
トランザクション(transaction)とは何ですか?
トランザクションは、もともと「商取引」を意味するビジネス用語になります。
ITの分野では、トランザクションは、ソフトウェアの処理方式のことを指し、整合性や完全性を維持するため必要なひとまとまりの処理のことです。なお、その一部の処理だけが実行されて終わるようなことは許されていません。
トランザクションの処理の例を教えてください。
例としては、口座間の送金処理において、送金元口座の残高を減らす処理だけが行われます。送金先口座の残高を増やさずに処理が終了することはあってはいけません。
DBMSでは、トランザクションが、必ず「全ての処理が成功して確定する」か「全く行われない」のどちらかの状態で終了するように制御します。このように、「トランザクション」が分割できない単位であることを示す特性のことを「トランザクションの原子性」と呼ばれます。
トランザクション処理の4条件
トランザクション処理には、以下の4つの条件があります。
- 原子性(Atomicity)
- 一貫性(Consistency)
- 独立性(Isolation)
- 永続性(Durability)
原子性(Atomicity)
原子性とは、「トランザクションの全ての操作が完了するか、または全く実行されなかった場合に限り、トランザクションを完了させる」特性のことです。
もし、トランザクションの実行中に何らかのエラーが発生して途中で処理が中断された場合、その処理の途中までの結果をデータベースに反映するのではなく、元の状態に戻すことでトランザクションでの処理を無効にします。
このように、トランザクション処理で原子性が保たれることによってデータの整合性が保たれ、データベースの状態が正確になり、信頼性が高くなります。
一貫性(Consistency)
一貫性とは、「実行前と実行後のデータベースの状態が整合的である」特性のことです。トランザクションの実行で、データベース内の情報が変更された場合、その変更がトランザクション完了後に反映されることが保証されなければいけません。
例えば、ある銀行口座の残高を10,000円から5,000円に減らすトランザクションがあるとします。このトランザクションが完了した後、データベース内の銀行口座の残高は5,000円になっていなければいけません。
もし、トランザクション処理中に何らかのエラーが発生して途中で処理が中断された場合、元の状態(10,000円の残高の状態)に戻すことで、トランザクションを無効にし、データベースの状態を一貫性のある状態にします。
独立性(Isolation)
独立性とは、「複数のトランザクションが同時に実行された場合でも、それぞれのトランザクションが互いに影響を与えない」特性のことです。
例えば、銀行口座の残高を増やすトランザクションと、同時に銀行口座からの引き出しを行うトランザクションがあったとします。この場合、両方のトランザクションが同時に実行されてもエラーを発生させず、それぞれのトランザクションが完了するまで、口座残高が変更されないことが保証されなければいけません。
データベース管理システムなどでは、トランザクション処理の独立性を保証するために、排他制御や同時実行制御などの仕組みを備えています。
永続性(Durability)
永続性とは、「トランザクション完了後、その処理結果がデータベースに永続的に保存される」特性のことです。
例えば、銀行口座の残高を増やすトランザクションが正常に完了した場合、その処理結果がデータベースに保存され、以降の取引や残高照会に反映されます。残高を増やすトランザクションが完了した後に、その処理結果がデータベースから消失してしまうと、その後の取引で残高が不足してしまう可能性があります。
データベース管理システムは、トランザクションの処理結果を永続化するために、トランザクションログと呼ばれる仕組みを備えています。トランザクションログは、トランザクションが実行された際に発生する全てのデータベースの変更を記録し、必要に応じてトランザクションのロールバック(処理前の状態に戻すこと)や再実行を行うために使用されます。
トランザクション処理の事例
トランザクション処理の事例を紹介します。以下のようなものがあります。
- 銀行ATMでの預金引き出し
- オンラインショップでの商品購入
- ホテルや航空会社の予約システムでの予約処理
銀行ATMの預金引き出しでは、預金を引き出すと、引き出した金額を差し引いて残高を更新しますが、もし何らかの理由で要求した金額が引き出せなかった場合には、処理を全て取り消せます。
オンラインショップの商品購入では、商品を購入すると、支払いが完了する前に在庫数が更新されて商品が減らされますが、もし支払いが完了しなかった場合には、在庫数の変更を取り消せます。
ホテルや航空会社の予約システムでの予約処理では、ユーザーが予約を行うと予約枠を確保し、予約情報をデータベースに保存しますが、予約が完了しなかった場合には、予約枠を元に戻せます。
トランザクション処理の例(銀行振込処理)
トトランザクション処理を銀行の振込処理で例えると、A口座(残高5,000円)から1,000円をB口座(残高10,000円)に振り込む場合、以下の2つの処理が発生します。
- A口座から1,000円を引き出し、口座残高を5,000-1,000=4,000円にする
- B口座に20,000円を振り込み、口座残高を20,000+20,000=40,000円にする
例で挙げた2つの処理を独立させたとします。そして 、①の処理が行われ、②の処理が失敗したとします。
その場合、A口座からB口座に振り込まれるはずだった1,000円が浮いた状態になってしまいます。これではA口座から引き出された1,000円が消失したことになり、2つの処理を独立させるのは、不整合な処理が派生するリスクがあります。
そこで、トランザクション処理をします。2つの処理をひとかたまりにし、いずれの処理も成功しないと全体として成功した状態にならないようにします。②の処理が失敗した場合には、①の処理は取り消されます。
トランザクション処理を行うことで、一方が成功し、一方が失敗するといったケースが無くなります。例では、A口座から引き出された1000円が消失してしまう事態を避けられます。
トランザクションに関する問題(令和5年問66)
トランザクション処理におけるコミットの説明として,適切なものはどれか。
ア. あるトランザクションが共有データを更新しようとしたとき,そのデータに対する他のトランザクションからの更新を禁止すること
イ. トランザクションが正常に処理されたときに,データベースへの更新を確定させること
ウ. 何らかの理由で,トランザクションが正常に処理されなかったときに,データベースをトランザクション開始前の状態にすること
エ. 複数の表を,互いに関係付ける列をキーとして,一つの表にすること
出典:令和5年度 ITパスポート試験公開問題 問66
正しいと思う選択肢をクリックしてみてください!!!
ア. あるトランザクションが共有データを更新しようとしたとき,そのデータに対する他のトランザクションからの更新を禁止すること
不正解です。
イ. トランザクションが正常に処理されたときに,データベースへの更新を確定させること
正解です。
ウ. 何らかの理由で,トランザクションが正常に処理されなかったときに,データベースをトランザクション開始前の状態にすること
不正解です。
エ. 複数の表を,互いに関係付ける列をキーとして,一つの表にすること
不正解です。
コメント