"トランザクション処理--概念と技法--"

を読むためのページ


last update: June 10, 2002

何ですか、この本は?

データベース業界の第一人者であるJim Gray氏とAndreas Reuter氏が書いた 大著と言いますか、はっきり言ってバイブル的存在ですが、 "Transaction Processing: Concepts and Techniques"の翻訳が、日経BP社から 喜連川優氏監訳でタイトル"トランザクション処理-- 概念と技法-- 上・下巻"として2分冊でやっと出ました。とにかく、 原著も分厚い(48mm: 刷が進むほど紙の質が薄くなり、やっと48mmまで下がっ た!)が、翻訳はもっと分厚い(原著の紙質よりも厚いため、上下巻合わせて 96mmもあります)。

タイトルにはトランザクション処理となっていますが、もっと平たく言う と、データベースの中身がどのように動いているか、どのように作られてい るのかが、非常に詳細に、かつ、豊富な擬似コードつきで書かれています。 データベースの本は数多く出版されていますが、それらは非常に浅く広く書 かれていることが多いのですが、この本のように非常に深く広く書かれている 本は見たことがありません。さらに素晴らしいことに、翻訳は、不明な個所は 原著者に質問しながら進めたので、原著よりもバグが 少ないということだそうです。とにかく、その辺のデータベース の教科書や解説本に飽きた人、PostgreSQL(日本PostgreSQLユーザ会も存在)など のデータベース管理システムを解読したい人、仕事上解読せざるを得ない人、 e-Businessに関わっている人、OラCルマスターなんとかというような資格を取 りたい人、はたまた、高くて硬い枕がいいと言う人にもうってつけです。そ の筋の業界の人なら、披露宴の引き出物に広辞苑を贈るよりも、この本を贈る ほうが喜ばれるかもしれません。(重すぎて反対に嫌がられるか? それなら、 目録だけ渡して、後から宅急便で送付と言う手もある。)

この本の正しい買い方

  1. 本屋で購入

    お近くの本屋で、「日経BPから出てる、ジム・グレイ、アンドレアス・ ロイター著、喜連川監訳の、トランザクション処理--概念と技法-- 上 下巻 を下さい。」と言えば、かわいいレジのお姉さんが、「はいはい、 これね。私の愛読書なの。」なんて言いながら出してくることはまず ありませんが、 在庫があれば出してきてもらえるでしょう。まあ、 コンピュータ関係の本 がたくさんおいてある 本屋にいけば在庫はあ るのではないでしょうか。なければ発注することになります。 リュックサック持参で本屋へ買出しに行くことをお勧めします。 そこいら辺のかばんでは重過ぎて自宅に たどり着くまでにかばんが持 ちこたえられるかどうか保証しません。

  2. 通販で購入

    やっぱり、重量物なのでこちらの選択肢お勧めします。版元の日経BP社 か、Amazon か、または他の通販を 利用されるのがベストでしょう。

    日経BPオンラインストアに立ち 寄ったついでに この本の紹介を見てみると、書評が出てました。「とにかく分厚い」 が「それだけの内容は詰まっている」、「きちんとまとめている」、トラ ンザクションの全貌を「網羅する」とか日経さんの身内で褒めちぎってい ます が、「もう少し早く翻訳を読みたかった」と思わず本音が出ていま す。そうなんです、翻訳に5年もかかったのです。原著者のJim Gray氏か ら、 "5 years sounds about right."と返事が返ってきたそうな。 つまり、「それだけの内容は詰まっている」んです。

    もっとついでに、アメリカ本国のAmazon この本の紹介を見ると、やはり評価は非常に高いです(値段も高い けど)。

本が来た!

宅急便の箱を開けると、出てきました。
TP-books

ずしりと重い。分厚い。ぱらぱらと上巻をめくる。まえがきはブルース・リンゼイ だ。(ご存知かもしれませんが、見た目は単なるヒッピーお爺さん。で もIBMのお偉いさん)「トランザクション処理は、コンピュータに蓄えられた 情報を活用するための鍵」なのか。何々、著者らは「50年にも渡って」トラン ザクションの研究をしてたのか、データベースを教えている大学の先生の多く はまだ生まれていないか、よちよち歩きの頃から研究していたのか。一体彼ら は何歳なのだろう?、という素朴な疑問も湧く。

おっ、原著者らのメッセージがでてきた。「トランザクション」とは、 一連の動作をひとかたまりとして「完全に実行するか、あるいは全く実行しな いかのどちらか(all-or-nothing)」を保証するためのもの とある。 トランザクションは、「社会の諸活動を振り返ると」、「結婚、金融取引など、 多くの活動にトランザクションが存在する」のか。そりゃそうだな。結婚はす るかしないかのどちらかないし、金融取引もするかしないかのどちらか一貫し てもらわないと困りますな。まあ、最近は一緒に生活しているけれど結婚はし ないという、これまた一貫性のない場合も多々存在しますが。

さらにぱらぱらめくると、翻訳にあたって、がでてきた。「トランザクショ ンは、コンピュータシステムにおける極めて重要な基盤技術」であり、「銀行 のシステムのように、一旦入金操作を行えば、停電が起きても、地震が起きて もテロが起きて建物が爆破されても、入金操作が取り消されることは無い」か。 なるほど。それはそれは、我々小市民にとっては重大不可欠だ。ではなぜ、 MZH銀行の事件が起きたのか??? えっ、Jim Grayって、データベースとトラン ザクション処理の研究およびそららの実装技術の貢献で、チューリング賞 をもらっ てたんだ。チューリング賞と言えば、コンピュータ界のノー ベル賞ではないか、これはすごい。(チューリング賞のページを見て、 本名は実はJames Gray氏だったことに気付く。アメリカでは多いですな、ニッ クネームで通している人が。)

読みたい気にだんだんなってきてぞ。じゃ、目次を見てみるか。その前に、 原著者ご推薦の読み方が書いてあるぞ。なんて幅広いトピックの本なのだろう か。改めてため息をつくばかりである。


この本の目次

    上巻

  1. イントロダクション
    6000年も前からトランザクションに似たことはあるぞ。シュメール人は ト ランザクション処理のために、税金の収集、土地、家畜などの取引目録を くさび型文字で記した。つまり、太古のトランザクションの記録である。シュ メール人に言わせれば、さしづめ、 となりますか。

    1章はこの本のあらすじで、トランザクション処理(データベース)とな んぞや、そして、どのような事柄がトランザクション処理に必要なのかを 歴史 的な背景もまじえて解説しています。

  2. 基本的なコンピュータ用語
    プロセッサ、メモリ、ディスク、アドレス空間、プロセス、スレッド、 セッ ション、ピアツーピア、クライアント・サーバ、などなど。情報処理試 験 で出てきそうな用語の解説がぞろぞろとできてますが、非常に簡潔にまと められています。

  3. フォールトトレランス
    あまりなじみが無いかも知れませんが、データベースのフォールトトレラ ン ス(耐故障性)は重要です。システムが壊れたら、せっかくの銀行に入れ た、 なけなしのお金も消え飛んでしまいます。故障を回避したり、システ ムの正 常稼働率(アベイラビリティ) を高めることは、現代社会では非常 に大切なこ とです。様々な故障やその回避方法、平均故障発生時間(MTTF) の計算方法な どが詳解されています。この辺も情報処理試験に出そう。

    ところで、PCを使っていると、ハードディスクって一番壊れ易いですよ ね。しかし、最近のハードディスクの平均故障発生時間が100年以上(MTTF >= 1,000,000時間)のものが出てきた、という事実を知っていました? 実際 のこの数字の解釈は、100万台のハードディスクを集めてきて同時に 運転す れば1時間に1台の確率で壊れるよ、というものなんですけれどね。 裏を返せ ば、それだけ不良品が少ないということ。

  4. トランザクションモデル
    トランザクションはどのようなもので、どういう性質を持つのかを概説し ています。通常ACID特性と呼ばれるもので、

    原子性がいつも成立するとは限らない。例えば、あるトランザクション の中にミサイル発射操作があって、発射後の取り消し(アボート)は当然で きません。このような問題の対処法なども触れられています。

  5. トランザクション処理モニタ: 概説
    トランザクション処理を管理する(モニタ)ためにはどういう要素(システム 構成) が必要なの? これからはじまるトランザクション処理の詳しい説明 の前に、ちょっと準備運動という感じでしょうか。

    その他にも、クライアントとサーバ間の信頼性のある通信方法(トランザ クション型RPC)や、トランザクション指向のプログラミング方法の基本も併 せて解説しています。トランザクション指向プログラミングは、これから、 埋め込み型SQLを書く人にとって、有益でしょう。

  6. トランザクション処理モニタ
    前章を深く掘り下げます。トランザクション処理モニタとデータベース の 資源を管理するリソースマネージャなどの連携、そして、トランザクショ ン 型RPC機構の関係、さらにリソースマネージャが内部でどのようにプロセ ス や資源を処理しているのかを、データ構造や疑似コード例で解説しています。

  7. 分離性の概念
    複数のトランザクションが同時に実行されても誤動作が発生してはなり ま せん。そして、トランザクションはユーザが意図した通りにあたかも逐次 に実行されたように見えなければなりません。なおかつ、同時に実行でき る トランザクションは可能な限り多くないといけません。どうすればいい ので しょう? これがこの章が説明する内容です。

    ちょっとJavaなどのスレッドプログラミングをやったことのある人は、 ピンときますが、複数のスレッドがデータ構造を壊さないように、ロック な どの同期プリミティブを使いますよね。しかも同時に沢山のスレッド を動かして性能も上げたい。トランザクション処理でも全く目指すとこ ろは同じで す。 異なるのは、トランザクション処理の方が制約が厳しい ことです。例えば、スレッドプログラミングでロックを使いながらデー タ構造を変更しても、データをもう一度読み直すと最初と時とは違って いても(データ構造さ え壊れなければ)良いかも知れませんが、データベー スの場合は、データベースを何度読んで同じ結果でなければならない場 合もあります。そのためのロック方式について、詳しく説明されていま す。

  8. ロックの実装
    ロックの概念は7章で分かりましたが、ではどのように具体的にロックマ ネージャを実装するのでしょうか? この章では、具体的なコードでロック マネージャの実装方法を、機械語レベルの低レベルのアトミック命令から 始めて、セマフォの実装、そして目標である高レベルのトランザクション のロックマネージャの実装方法へと迫っていきます。

    e-Business関係のシステムを書いている人や、PostgreSQLを解読して いる人にはこの章は必読でしょう。かく言う私も、とあるプログラムを書 くの にこの章のコードを参考にさせて頂きました。



  9. 下巻

  10. ログマネージャ
    さて、トランザクションがアボートするとき、どのように状態を元に戻す (ロールバックする)のでしょう? 実は、ログという特別なファイルに、そ のトランザクションが、いつ、何を行なったのかが記録されていて、それ を逆順に辿っていくことにより元に戻すのです。これにより原子性が達成 されます。ログを管理するのがログマネージャです。ご推察通り、ログが 壊れたら大変です。そのためにどのように入念にログを書くか等について、 この章で解説しています。

    ログは、童話の中にも出てくるそうな。ヘンゼルとグレーテルはパン くずを道順に落としながら、家に帰る(元の状態に戻る)方法を思いつき ました。しかしパンくずは長持ちしなかった(ログが壊れた!)のでとうと う元に戻れなかった。

  11. トランザクションマネージャの概念
    トランザクションマネージャは文字通り、トランザクションを管理してい ますが、主にログと連携してコミット処理、アボート処理を行なっていま す。 つまり、トランザクションの原子性と持続性を保証します。

    ここでは、ログを使って、どのようにトランザクションを元に戻す(ロー ルバックさせる)のか、どうやって故障から立ち直った(リスタートした) サー バのトランザクションや、クライアントとのセッションを回復させ るのかに ついて、説明されています。また、サーバが複数ある時のコミッ トの合意の 取り方(2フェーズコミット)についても解説されています。

    2フェーズコミットと言うのは、トランザクションは成功するか失敗す る かしかないので、複数のサーバのうち、全てのサーバがコミットする か、も しくは1つのサーバでも障害を起こすと全てのサーバがアボートし なければ なりません。そのための合意方法です。この合意方法は、キリ スト教の結婚 式と同じ方法です。
    神父(サーバ1): 「この結婚(トランザクション)が成立する(コミット)こ とに合意しますか?」
    新郎(サーバ2): 「はい(Yes)。」
    新婦(サーバ3): 「はい(Yes)。」
    神父(サーバ1): 「この結婚(トランザクション)が成立(コミット)したこ とをここに宣言します。」
    一同: 「めでたし、めでたし。」
    もし、一人でも反対すれば(Noと言えば)、結婚(トランザクション)は無かっ たことになります(アボート)。まあ、現実世界では、神父さんがはじめから 「この結婚は成立しません」と宣言する事態はまずありませんが....

    そうそう、ログは大切なので、何かデータを変更したらその度ごとに すぐにディスクにその変更を記録しないといけないように思われますが、 実は、 あるルール(WAL) さえ守れば、後からまとめてログを書い てもいい のです。ディスクっていうデバイスは、アクセスするための準 備に(CPUから見ると)気が遠くなるほどの時間がかかりますが、一度読み 書きを始めると 高速という性質があるので、ログはできる限りまとめて 書いて、書く回数を減らしたいわけです。

  12. トランザクションマネージャの構造
    前章(10章)を深く掘り下げて、トランザクションマネージャの実装方法を、 コード例を入れながら具体的かつ非常に詳しく説明しています。これだけ 詳しく書かれている文献は、この本以外にその筋の学術論文でしか見たこ と はありません。トランザクション関係の開発者やPostgreSQLのハッカー には 必読の章でしょう。初級者が読みこなすには少しきついかも知れま せん。

  13. トランザクションマネージャに関する先進的な 話題
    この章は、コミット処理の高速化や、システムの高信頼化(高可用性)につ い て説明しています。特に高可用性システムは重要なポイントで、二重 化され たシステム(システムペア)のうち、片方が故障した場合の処理の 引き継ぎに ついて解説しています。

    最近、どこもかしこもクラスタ大流行りですが、ちゃんと可用性のこ と も考えてくださいね。1つこければ皆こける、では使い物になりません から ね。

  14. ファイルとバッファ管理
    ここだけ読むと、トランザクション処理(データベース)の本というよりは、 オペレーティングシステムの本もしくはファイルシステムの本という感じ が します。しかも、詳しい! メモリのサイズよりも大きなファイルを扱 うた めには、どのようにすれば良いのか? また、どのようにディスク領 域を管理 してファイルを構成すれば良いのかについて解説しています。 ファイルシス テムやオペレーティングシステムを勉強している人に必読 の章でしょう。

    大きなファイルも小さなファイルも、結局同じサイズの小さな細切れ (ブロック)の集まりなんですよね。必要な細切れをディスクからメモリに 順番 に持ってきて、要らないものをディスクに戻せば、どんな大きなファ イルで も扱えます。つまりメモリは、ディスクから見れば単なるキャッ シュ(バッファ)なんですよね。

    これはシュメール人もやっていた。粘土板(ブロック)は同じサイズで、 記録する事項が多ければ何枚か使って記録して、この複数の粘土板で一つ の 取引記録(ファイル)を表していた。後から記録を見たいときは、必要 な粘土 板だけ机(バッファ)に持ってくればそれで事は済みます。

  15. タプル型ファイルシステム
    タプルとは、関係データベースにおけるデータの単位です。13章でファイ ルの構造は分かりました。それは、ブロックの集まりです。さて、ブロッ クにどのようにタプルを詰め込むのか? 必要なタプルをどうやって適切な ブロックを選択して取り出すのか? これらの回答がここで解説されていま す。

    単に、タプルを来たもの順でブロックに書けば良いじゃないの? と思 わ れますが、タプルはいつもブロックより小さいとは限りません。ブロッ クよ りもタプルのサイズの方が大きいときや、タプルのサイズがそれぞ れ異なる のとき(可変長タプル)はどうするの? となります。また、本当 に来たもの 順でブロックに入れていけば良いのか? という疑問もありま す。というの は、タプルがアイウエオ順でカテゴリ分けされて並んでい た方が都合が良い 場合も多々あるからです。

  16. アクセスパス
    アクセスパスとは、あるデータを大きなファイルの中から素早く探すこと を可能にするためのデータ構造です。例えば、タプルがアイウエオの名前 順でファイルに格納されていても、電話番号であるタプルを探したい場合 もあります。名前順と電話番号とは何ら関係ないので、大変なことになり ます。試しに、電話番号帳で電話番号から名前を探してみてください。こ れは、いくらコンピュータと云えども、空読みばかりの時間のかかる無駄 の多い作業です。この章では、この問題にお答えします。ハッシュ、B木、 グリッドファイル、hB木に的を絞って説明されていますが、その中で、非 常に汎用性が高いB木については実装方法まで非常に細かく解説されてい ます。開発者には必読の部分だと思います。

    アクセスを高速化するためのアクセスパスは、別名インデクス(索引) とも呼ばれます。本の中のあるキーワードの部分を解説を読みたい時に、 そのキーワードがどこにあるか分からなければ、1ページ目から順に探す ことになります。普通は巻末のインデクス(索引)を見て、そのキーワード が乗っているページを探しますよね。この本(トランザクション処理-- 概 念と技法--)も豊富な索引のおかげで、豊富なトピックの中から素早く目 的のトピックのページを引くことができます。

    本のインデクスはページ情報だけの1次元ですが、2次元以上(多次元) のインデクスもあります。ここから近くのレストランはどこ? それは、○ ×です。というように最近大はやりの地理情報システム(GIS)ですが、こ れは座 標という2次元のインデクスが使われています。もちろん多次元情 報もあります。例えば、食品データベースで、甘くて、酸味が少なく、塩 分が少なく、カロリーも低い食べ物は? という質問を速く処理するために は、糖度、酸度、塩分、カロリーの4次元のインデクスが必要となります。

  17. TPシステムのサーベイ
    この章は、いろいろな実システムの事例研究です。はっきり言って、この 章を読むと、この本の古さがばれてしまいます。昔繁栄を誇ったDECは、 今 やソフトウェア部隊はMS(WinNTを開発)に、ハードウェ ア部隊はCompaq(だからAlphaチップを作っていましたよね)に吸収されてし まいました。CompaqはさらにはHPに。 ためしに、DECの昔のホームページ に飛んでみてください。Compaqを経由して、HPにたどり着きます。盛 者必衰の理とでも言いましょうか、コンピュータ業界の戦国時代とでも言 いましょうか。

    そうそう、DEC社と言えば原著者のJim Gray氏も所属していたんですよ ね。 先に書いたように、現在はMSの研究所に移っておられ ます。

ふー、読み終わった

読み疲れたので、この本を枕にしてちょっと一眠りしましょう。

FAQ的索引

Q: トランザクションやデータベースって何ですか?
A: 1章を読みましょう。

Q: コンピュータの基本用語を知りたいのですが。
A: 2章を読みましょう。

Q: ディペンダブルコンピューティングに興味があるのですが。
A: ディペンダブルコンピューティングは昔はフォールトトレラントコ ンピューティングと言われていました。3章を読みましょ う。トランザクションの概念自体もディペンダブルコンピューティングに属し ますので、4章も読みましょう。さらに12章の後半も読めばさらに良いでしょう。もっと興味が 湧けば、この本全部読みましょう。

Q: ロック以外にトランザクションを分離する方法はありますか?
A: あります。この本はロックに関して集中的に書いていますが、楽観 的な方法(optimistic approach)、タイムスタンプ方式などあります。これら の入門として、日経BP社のフィリップ・バーンスタイ ン、エリック・ニューカマー著 "トランザクション処理システム入門"の6 章を参照するか、もっと詳しくは、P. Bernstein, V. Hadzilacos, and N. Goodman著"Concurrency Control and Recovery in Database Systems"(Addison-Wesley Publishing)を読みましょう。

Q: データベースのレプリケーションって何ですか?
A: データベースを一貫性を持ったまま他のサーバにコピーすることで す。残念ながらこの本では取り上げられていません。入門としては、日経BP社 のフィリップ・バーンスタイン、エリック・ニューカマー著 "トランザク ション処理システム入門"の10章を参照すれば良いでしょう。

Q: ファイルシステムを基礎を勉強したいのですが。
A: 13章14章を読み ましょう。

Q: 最近Linux関係で聞くExt3やReiserFSといったジャーナルファイル システムは、障害回復が速いそうですが、トランザクション技術と関係ありま すか?
A: 大いに関係あります。これらのファイルシステムにはログが利用さ れており、ファイルシステムのデータ構造を直接上書きする前にログを書きま す。ファイル操作中にOSがこけても、OSのリブート後、中途半端に終わってし まったファイル操作はアボートされます。一方、完了(コミット)したファイル 操作は保証されます。つまりファイルシステム全体を検査することなく、ログ を見るだけでファイルシステムが回復されるのです。9章 10章11章を読みましょ う。ためしにLinuxマシンで、大容量ディスクに目一杯の大きさのUFSファイル システムを作って動かせて、突然電源を切ってリブートさせた場合と、Ext3ファ イルシステムで同じ実験をした場合を比較して体感してみてください。

Q: スレッドプログラミングをしていますが、計算結果がいつも同じで ないといけないはずが、時と場合によって変わってしまいます。
A: スレッドがちゃんと分離できていないからです。例えば、あるスレッ ドが書き換えたデータを他のスレッドが変なタイミングで読んだり書いたりし ていませんか? 7章を読んでみましょう。

Q: あるシステムでファイルキャッシュの実装をしています。うまく動 かないのですが。
A: 13章を読みましょう。

Q: GISにはR-treeがよく使われると聞いたのですが。
A: はい。残念ながらR-treeの詳細はこの本には載っていません。原典 は、A. Guttman and M. Stonebraker:"R-trees: A Dynamic Index Structure for Spatial Searching", ACM SIGMOD Conf., pp.47-57(1984)なのでそちらを 見てください。ちなみにStonebraker 氏は、Postgresプロジェクトで有名ですよね。

Q: WALって何ですか?
A: "悪"ではありません。"Write-Ahead Log"の略で、ログの書込みルー ルです。10章を読みましょう。

Q: 2相ロック(2PL)って何ですか?
A: トランザクションを分離するためのロック方式です。 7章を読みましょう。

Q: 2相コミット(2PC)って何ですか?
A: 分散トランザクションをコミットするための合意方法です。 10章を読みましょう。

Q: ACID特性って何ですか?
A: 酸性ではありません。トランザクションの基本性質の頭文字を取っ たものです。4章を読みましょう。

Q: クラッシュしても回復可能なシステムを実装したいのですが。
A: 9章11章を読みましょう。

Q: ロックマネージャを実装したいのですが。
A: 8章を読みましょう。

Q: トランザクションマネージャを実装したいのですが。
A: 11章を読みましょう。

Q: 商用トランザクション処理システムがどういうものか知りたいのですが。
A: ちょっと古いのが難点ですが、16章を読み ましょう。


この本の訳者一覧


ご意見、ご感想はこのページの管理人の宮崎純まで。