データベース業界の第一人者であるJim Gray氏とAndreas Reuter氏が書いた 大著と言いますか、はっきり言ってバイブル的存在ですが、 "Transaction Processing: Concepts and Techniques"の翻訳が、日経BP社から 喜連川優氏監訳でタイトル"トランザクション処理-- 概念と技法-- 上・下巻"として2分冊でやっと出ました。とにかく、 原著も分厚い(48mm: 刷が進むほど紙の質が薄くなり、やっと48mmまで下がっ た!)が、翻訳はもっと分厚い(原著の紙質よりも厚いため、上下巻合わせて 96mmもあります)。
タイトルにはトランザクション処理となっていますが、もっと平たく言う と、データベースの中身がどのように動いているか、どのように作られてい るのかが、非常に詳細に、かつ、豊富な擬似コードつきで書かれています。 データベースの本は数多く出版されていますが、それらは非常に浅く広く書 かれていることが多いのですが、この本のように非常に深く広く書かれている 本は見たことがありません。さらに素晴らしいことに、翻訳は、不明な個所は 原著者に質問しながら進めたので、原著よりもバグが 少ないということだそうです。とにかく、その辺のデータベース の教科書や解説本に飽きた人、PostgreSQL(日本PostgreSQLユーザ会も存在)など のデータベース管理システムを解読したい人、仕事上解読せざるを得ない人、 e-Businessに関わっている人、OラCルマスターなんとかというような資格を取 りたい人、はたまた、高くて硬い枕がいいと言う人にもうってつけです。そ の筋の業界の人なら、披露宴の引き出物に広辞苑を贈るよりも、この本を贈る ほうが喜ばれるかもしれません。(重すぎて反対に嫌がられるか? それなら、 目録だけ渡して、後から宅急便で送付と言う手もある。)
お近くの本屋で、「日経BPから出てる、ジム・グレイ、アンドレアス・ ロイター著、喜連川監訳の、トランザクション処理--概念と技法-- 上 下巻 を下さい。」と言えば、かわいいレジのお姉さんが、「はいはい、 これね。私の愛読書なの。」なんて言いながら出してくることはまず ありませんが、 在庫があれば出してきてもらえるでしょう。まあ、 コンピュータ関係の本 がたくさんおいてある 本屋にいけば在庫はあ るのではないでしょうか。なければ発注することになります。 リュックサック持参で本屋へ買出しに行くことをお勧めします。 そこいら辺のかばんでは重過ぎて自宅に たどり着くまでにかばんが持 ちこたえられるかどうか保証しません。
やっぱり、重量物なのでこちらの選択肢お勧めします。版元の日経BP社 か、Amazon か、または他の通販を 利用されるのがベストでしょう。
日経BPオンラインストアに立ち 寄ったついでに この本の紹介を見てみると、書評が出てました。「とにかく分厚い」 が「それだけの内容は詰まっている」、「きちんとまとめている」、トラ ンザクションの全貌を「網羅する」とか日経さんの身内で褒めちぎってい ます が、「もう少し早く翻訳を読みたかった」と思わず本音が出ていま す。そうなんです、翻訳に5年もかかったのです。原著者のJim Gray氏か ら、 "5 years sounds about right."と返事が返ってきたそうな。 つまり、「それだけの内容は詰まっている」んです。
宅急便の箱を開けると、出てきました。
ずしりと重い。分厚い。ぱらぱらと上巻をめくる。まえがきはブルース・リンゼイ だ。(ご存知かもしれませんが、見た目は単なるヒッピーお爺さん。で もIBMのお偉いさん)「トランザクション処理は、コンピュータに蓄えられた 情報を活用するための鍵」なのか。何々、著者らは「50年にも渡って」トラン ザクションの研究をしてたのか、データベースを教えている大学の先生の多く はまだ生まれていないか、よちよち歩きの頃から研究していたのか。一体彼ら は何歳なのだろう?、という素朴な疑問も湧く。
おっ、原著者らのメッセージがでてきた。「トランザクション」とは、 一連の動作をひとかたまりとして「完全に実行するか、あるいは全く実行しな いかのどちらか(all-or-nothing)」を保証するためのもの とある。 トランザクションは、「社会の諸活動を振り返ると」、「結婚、金融取引など、 多くの活動にトランザクションが存在する」のか。そりゃそうだな。結婚はす るかしないかのどちらかないし、金融取引もするかしないかのどちらか一貫し てもらわないと困りますな。まあ、最近は一緒に生活しているけれど結婚はし ないという、これまた一貫性のない場合も多々存在しますが。
さらにぱらぱらめくると、翻訳にあたって、がでてきた。「トランザクショ ンは、コンピュータシステムにおける極めて重要な基盤技術」であり、「銀行 のシステムのように、一旦入金操作を行えば、停電が起きても、地震が起きて もテロが起きて建物が爆破されても、入金操作が取り消されることは無い」か。 なるほど。それはそれは、我々小市民にとっては重大不可欠だ。ではなぜ、 MZH銀行の事件が起きたのか??? えっ、Jim Grayって、データベースとトラン ザクション処理の研究およびそららの実装技術の貢献で、チューリング賞 をもらっ てたんだ。チューリング賞と言えば、コンピュータ界のノー ベル賞ではないか、これはすごい。(チューリング賞のページを見て、 本名は実はJames Gray氏だったことに気付く。アメリカでは多いですな、ニッ クネームで通している人が。)
読みたい気にだんだんなってきてぞ。じゃ、目次を見てみるか。その前に、 原著者ご推薦の読み方が書いてあるぞ。なんて幅広いトピックの本なのだろう か。改めてため息をつくばかりである。
1章はこの本のあらすじで、トランザクション処理(データベース)とな んぞや、そして、どのような事柄がトランザクション処理に必要なのかを 歴史 的な背景もまじえて解説しています。
ところで、PCを使っていると、ハードディスクって一番壊れ易いですよ ね。しかし、最近のハードディスクの平均故障発生時間が100年以上(MTTF >= 1,000,000時間)のものが出てきた、という事実を知っていました? 実際 のこの数字の解釈は、100万台のハードディスクを集めてきて同時に 運転す れば1時間に1台の確率で壊れるよ、というものなんですけれどね。 裏を返せ ば、それだけ不良品が少ないということ。
万一トランザクションの途中で停電したときには、システムが復旧し た時にそのトランザクションはアボート(そのトランザクション の 影響をロールバック:帳消しされる。つまりそのトランザクションは 何も 実行されなかったことと同じになる。
原子性がいつも成立するとは限らない。例えば、あるトランザクション の中にミサイル発射操作があって、発射後の取り消し(アボート)は当然で きません。このような問題の対処法なども触れられています。
その他にも、クライアントとサーバ間の信頼性のある通信方法(トランザ クション型RPC)や、トランザクション指向のプログラミング方法の基本も併 せて解説しています。トランザクション指向プログラミングは、これから、 埋め込み型SQLを書く人にとって、有益でしょう。
ちょっとJavaなどのスレッドプログラミングをやったことのある人は、 ピンときますが、複数のスレッドがデータ構造を壊さないように、ロック な どの同期プリミティブを使いますよね。しかも同時に沢山のスレッド を動かして性能も上げたい。トランザクション処理でも全く目指すとこ ろは同じで す。 異なるのは、トランザクション処理の方が制約が厳しい ことです。例えば、スレッドプログラミングでロックを使いながらデー タ構造を変更しても、データをもう一度読み直すと最初と時とは違って いても(データ構造さ え壊れなければ)良いかも知れませんが、データベー スの場合は、データベースを何度読んで同じ結果でなければならない場 合もあります。そのためのロック方式について、詳しく説明されていま す。
e-Business関係のシステムを書いている人や、PostgreSQLを解読して いる人にはこの章は必読でしょう。かく言う私も、とあるプログラムを書 くの にこの章のコードを参考にさせて頂きました。
ログは、童話の中にも出てくるそうな。ヘンゼルとグレーテルはパン くずを道順に落としながら、家に帰る(元の状態に戻る)方法を思いつき ました。しかしパンくずは長持ちしなかった(ログが壊れた!)のでとうと う元に戻れなかった。
ここでは、ログを使って、どのようにトランザクションを元に戻す(ロー ルバックさせる)のか、どうやって故障から立ち直った(リスタートした) サー バのトランザクションや、クライアントとのセッションを回復させ るのかに ついて、説明されています。また、サーバが複数ある時のコミッ トの合意の 取り方(2フェーズコミット)についても解説されています。
2フェーズコミットと言うのは、トランザクションは成功するか失敗す
る かしかないので、複数のサーバのうち、全てのサーバがコミットする
か、も しくは1つのサーバでも障害を起こすと全てのサーバがアボートし
なければ なりません。そのための合意方法です。この合意方法は、キリ
スト教の結婚 式と同じ方法です。
神父(サーバ1): 「この結婚(トランザクション)が成立する(コミット)こ
とに合意しますか?」
新郎(サーバ2): 「はい(Yes)。」
新婦(サーバ3): 「はい(Yes)。」
神父(サーバ1): 「この結婚(トランザクション)が成立(コミット)したこ
とをここに宣言します。」
一同: 「めでたし、めでたし。」
もし、一人でも反対すれば(Noと言えば)、結婚(トランザクション)は無かっ
たことになります(アボート)。まあ、現実世界では、神父さんがはじめから
「この結婚は成立しません」と宣言する事態はまずありませんが....
そうそう、ログは大切なので、何かデータを変更したらその度ごとに すぐにディスクにその変更を記録しないといけないように思われますが、 実は、 あるルール(WAL) さえ守れば、後からまとめてログを書い てもいい のです。ディスクっていうデバイスは、アクセスするための準 備に(CPUから見ると)気が遠くなるほどの時間がかかりますが、一度読み 書きを始めると 高速という性質があるので、ログはできる限りまとめて 書いて、書く回数を減らしたいわけです。
最近、どこもかしこもクラスタ大流行りですが、ちゃんと可用性のこ と も考えてくださいね。1つこければ皆こける、では使い物になりません から ね。
大きなファイルも小さなファイルも、結局同じサイズの小さな細切れ (ブロック)の集まりなんですよね。必要な細切れをディスクからメモリに 順番 に持ってきて、要らないものをディスクに戻せば、どんな大きなファ イルで も扱えます。つまりメモリは、ディスクから見れば単なるキャッ シュ(バッファ)なんですよね。
これはシュメール人もやっていた。粘土板(ブロック)は同じサイズで、 記録する事項が多ければ何枚か使って記録して、この複数の粘土板で一つ の 取引記録(ファイル)を表していた。後から記録を見たいときは、必要 な粘土 板だけ机(バッファ)に持ってくればそれで事は済みます。
単に、タプルを来たもの順でブロックに書けば良いじゃないの? と思 わ れますが、タプルはいつもブロックより小さいとは限りません。ブロッ クよ りもタプルのサイズの方が大きいときや、タプルのサイズがそれぞ れ異なる のとき(可変長タプル)はどうするの? となります。また、本当 に来たもの 順でブロックに入れていけば良いのか? という疑問もありま す。というの は、タプルがアイウエオ順でカテゴリ分けされて並んでい た方が都合が良い 場合も多々あるからです。
アクセスを高速化するためのアクセスパスは、別名インデクス(索引) とも呼ばれます。本の中のあるキーワードの部分を解説を読みたい時に、 そのキーワードがどこにあるか分からなければ、1ページ目から順に探す ことになります。普通は巻末のインデクス(索引)を見て、そのキーワード が乗っているページを探しますよね。この本(トランザクション処理-- 概 念と技法--)も豊富な索引のおかげで、豊富なトピックの中から素早く目 的のトピックのページを引くことができます。
本のインデクスはページ情報だけの1次元ですが、2次元以上(多次元) のインデクスもあります。ここから近くのレストランはどこ? それは、○ ×です。というように最近大はやりの地理情報システム(GIS)ですが、こ れは座 標という2次元のインデクスが使われています。もちろん多次元情 報もあります。例えば、食品データベースで、甘くて、酸味が少なく、塩 分が少なく、カロリーも低い食べ物は? という質問を速く処理するために は、糖度、酸度、塩分、カロリーの4次元のインデクスが必要となります。
そうそう、DEC社と言えば原著者のJim Gray氏も所属していたんですよ ね。 先に書いたように、現在はMSの研究所に移っておられ ます。
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章を読み
ましょう。