トランザクションは切り離せないひとまとまりの処理
先生:では次にトランザクションについてお話しましょう。どういうものだったか覚えていますか?
お父さん:えっと、切り離せない処理のひとまとまりをいうのでしたよね?
先生:そうです。前に、入学用品セットを例にとってお話ししましたが、この場合入学用品セットの売上は、入学用品セットを構成する消しゴムや鉛筆という個々の商品の売上処理をひとかたまりにした操作となります。ですから、もしキャンセルが発生したら、その処理全体をキャンセルしないといけません(図4)。また、トランザクションには、複数の処理を平行動作することによる性能向上という側面があります。入学セットの中には中村さんが複数のメーカーの商品を混ぜたものもありますよね。
お父さん:ええ、メーカーさんが同じほうが卸元も同じで効率はよいのですが、消しゴムや下敷きなどメーカーによって人気が違うことが多くって、メーカーを混ぜたセットを作ることが多いのです。
先生:いまのお話だと、卸元はメーカーによって異なると思うのですが、その場合の発注伝票は卸元ごとにまとめて、平行して送付しますよね?
お父さん:もちろんそうしてます。
先生:実は並列化できるかどうかというのは、データベース管理システムの内部処理では重要な問題なのです。
トランザクションの持つ4つの性質
先生:トランザクションは原子性(Atomicity)、一貫性、隔離性、そして耐久性という4つの性質を持っています。こういうと難しそうに聞こえますが、それぞれの中身はこれまで同様にそんなに難しい概念ではないので頑張って勉強してください。
由美:原子性って想像がつかないけど、物理や化学でいう原子(atom)は、「これ以上分割できない最小の」という意味よね? うーん何だろう?
先生:トランザクションの原子性の意味は、そうした語源から転じてきたものです。つまり、すべて実行されるかまったくなされないかのどちらかということですね。不可分性と読み替えれば、多少は分かりやすいかもしれません。
お父さん:さっきの入学用品セットの販売の話ですね。いくつもの処理がひとかたまりになってて、もしキャンセルが発生した場合、それらのすべてを取り消さないといけないということですね。
先生:そういうことです。ここで、トランザクションが実行されてデータベースにその結果が反映されたことを、トランザクションが「コミット(Commit)された」といいます。逆にトランザクションが取り消されることを「アボート(Abort)」と呼び、データベースがトランザクションを開始する前の状態に戻されることを「ロールバック(Rollback)」といいます(図5)。
お父さん:一貫性というのは、トランザクションが終了した後もデータベースの一貫性が保たれているということですか?
先生:ご名答です。
由美:隔離性というのは、トランザクションが別の処理の影響を受けないという意味ですか?
先生:はい。トランザクションが複数平行に実行された場合でも、あるトランザクションが別のトランザクションの影響を受けないことを指します。その結果についても、順番に逐次実行した結果と同じにならなければいけません。
お父さん:さっき先生がおっしゃっていた話ですね。
先生:そうです。最後に耐久性というのは想像つきますか?
由美:耐障害性みたいなものですか?
先生:そうですね。トランザクションが実行されてコミットされたら、システムに障害が発生したとしても、その結果がちゃんとデータベースに残っていることを指します。
お父さん:なるほど。これらの性質はごく当り前のことですが、非常に大事な要素ですね。
(次ページ、「トランザクションの状態とロック」に続く)
この連載の記事
-
最終回
ソフトウェア・仮想化
「せんせい!SQLってRDBを操作する言語よね?」(由美) -
第2回
ソフトウェア・仮想化
「由美ちゃん、これがRDBの要素だよ」(先生) -
第1回
ソフトウェア・仮想化
「データベースってなんですか?」(由美) - この連載の一覧へ