トランザクション処理とACID特性 について
ACID特性は、トランザクション処理に求められる4つの特性の事で、
基本情報技術者試験と、応用情報技術者試験の午前でよく出題されます。
まずはトランザクション処理について説明していきます。
トランザクション処理とは、
2か所以上のデータを更新する時に、途中で処理が中断したときにデータがおかしくなっては困るので、エラーで全てなかったことにして、
全ての処理が正常に終わったら全てのデータの更新を確定するやり方です。
ロールバック←全てのデータの更新をトランザクション処理前に戻す
コミット←全てのデータの更新を確定させる。
例えば、
生徒テーブルに生徒情報のレコードがあり、
教室テーブルに生徒数というカラムがあるとします。
トランザクション処理では、
生徒を1人追加する場合、
生徒テーブルにレコードを追加した後に
教室テーブルの生徒数カラムの値を更新します。
最後にコミットをし、2つのテーブルの更新を確定します。
もし途中で処理がエラーになった場合、ロールバックをし、全ての更新を無かった事にするため、生徒テーブルのレコード追加は無かった事にします
それをしないと、2つのテーブルのデータの整合性が合わなくなります。
Javaの場合、tryとcatchを使います。
教室テーブルの生徒数を数え直す。など、
tryの中の処理途中でエラーになった場合は、catchに入ります。
トランザクション開始
try{
【データ更新】生徒テーブルにレコード追加
教室テーブルの生徒数を取得する
教室テーブルの生徒数に1を足す
【データ更新】教室テーブルの生徒数を更新する
〇ここまで来たらトランザクションをコミットし、更新を確定する。
}catch(Exception e){
ここの中はtryとchatchの間でエラーが発生した時に入ります。
}
トランザクション終了
では、ACID特性 について説明します。
原始性Atomicity、一貫性Consistency、独立性Isolation、耐久性Durability
の4つです。それぞれの単語をしっかりと覚えておけば問題無いと思います。
原始性(Atomicity)
これはトランザクション処理の個別の処理が全て実行されるか、1つも実行されないかのどちらかという事です。
先ほどの例の、エラー時は全てのテーブルの更新を元に戻す。
全て終了したら、全てのテーブルの更新を確定する。
という点です。
一貫性(Consistency)
トランザクション処理実行後も、「矛盾」がないという点です。
一貫性のある人って言動と行動に矛盾がないですよね。なので、一貫性=矛盾がない
と覚えておけば大丈夫です。
トランザクション処理後にデータがおかしなことになっていない。
という点です。
独立性(Isolation)
トランザクション処理を複数実行した時に、同時に実行しても、おかしくならないという点です。
先ほどの例、生徒の追加を同時に実行したときに教室テーブルの人数を取得し、1人増やすという処理がありました。
1つの処理がもし教室テーブルの人数を取得するタイミングが同じ場合、
本来2人増やさないといけないのに、同時に実行したために1人しか増やさなかった。
となってしまっては困ります。
なので2つ目の処理はテーブルをロックし、前の処理が終わるまでは待っているべきだと思います。
耐久性(Durability)
トランザクション処理が終了したら、データが消失しないようにする。というもの。
ログを保存したり、レプリケーション(データベースを別のサーバーに複製)するなどし、更新した内容が無くならないようにします。
如何でしたか?このあたりは試験に出ますので、しっかりと覚えておいてもらえたらと思います。
広告