基本情報技術者、応用情報技術者、Java、IT活用

現役システムエンジニアによる基本情報処理者や応用情報処理技術者の資格への用語説明、Java、様々なITのお勉強をしたい方へ

トランザクション処理と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)

トランザクション処理が終了したら、データが消失しないようにする。というもの。

ログを保存したり、レプリケーション(データベースを別のサーバーに複製)するなどし、更新した内容が無くならないようにします。

 

 

如何でしたか?このあたりは試験に出ますので、しっかりと覚えておいてもらえたらと思います。

 

 

広告