2009年1月7日水曜日

ぜひ押さえておきたいデータベースの教科書

先日のエントリで少し話したのですが、僕が在学していたときの東大にはデータベースを学ぶためのコースというものがありませんでした(DB関係の授業は年に1つか2つある程度。現在はどうなんだろう?)。そんなときに役だったのは、やはり教科書。読みやすいものから順に紹介していきます。(とはいってもすべて英語の本です。あしからず)

一番のお薦めは、Raghu Ramakrishnan先生 (現在は、Yahoo! Research) の「Database Management Systems (3rd Edition)」。初学者から研究者まで幅広く使えます。データベース管理システム(DBMS)の基本概念から、問い合わせ最適化、トランザクション管理など、これらを実装・評価するために必要な、「DBの世界での常識」が、丁寧な語り口でふんだんに盛り込まれています。この1冊を読んでおけば、DBの世界で議論するための土台が十二分に身に付きます。



2つ目は、StanfordからDB界を引っ張っている3人の先生、Hector Garcia-Molina、Jeffrey D. Ullman(Ullman先生は昨年に引退したのですが、まだラボに顔を出しているようです)、Jennifer D. Widom (世界1周旅行に出かけているらしい…)による「Database Systems: The Complete Book」。これもRaghu本と同じように、DBがどのように作られているかを知るのに良い教科書。問い合わせ最適化などに関しては、こちらの方が詳しいです。Raghu本では、データベースの知識を広く扱い、それぞれに大事な視点を紹介しているのですが、こちらの本ではその定式化、アルゴリズムの詳細にまで踏み込んでいたり、と充実しています。



次はトランザクション管理の本を紹介。データベースにおけるトランザクション管理の実装には、これでもか、というくらい非常に多くの知識を要します。まず、データベース上で多数の検索・更新処理(トランザクション)を並列に実行したときに、安全にデータを保存するとはどういうことか、そして、更新に失敗したときに、どうやってもとの状態にデータベースを復元するか。さらには、並列化しトランザクションのスループット(1秒あたりに処理できるトランザクションの数)を向上させるために重要な、ロック管理(どの部分のデータを保護し、どの部分にアクセスを許すか)についてなど。これらについて把握していなければ安全・かつ高速なDBなどはとても実装できないでしょう。


Gerhard Weikum先生による「Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery」は、トランザクション処理に関する古典的な話題から新しい話題までを理論・実践の両面から初めて整理した画期的な本です。この一冊があれば、過去のトランザクション理論の本は読まなくても良いくらい内容が充実しています。
ここで導入される階層化ロックという概念により、1993年にトランザクション処理の大御所であるJim Gray(一昨年にボートで遭難。いまだ消息不明…)が書いた「Transaction Processing: Concepts and Techniques(こちらは詳細な実装に興味がある人にお薦めです)」にあるような従来のロックの管理方式の正当性が、綺麗な形で裏付けされていくのは圧巻です。Jim Gray本人が「自分が書きたかった本」と称賛するのもうなずける内容。特に関連文献の項が充実していて、この一冊があれば、過去から現在までの研究の流れが非常によくわかり、詳しい情報へのアクセスが容易になります。

ロック理論だけではなく、実装上の問題、障害回復、分散トランザクションと、トランザクションに関する話題は網羅されています。B+-tree以外のindexがなぜトランザクション処理にはうまく使えていないのか、など、トランザクションを極めようとするなら、ぜひ手元に欲しい1冊です。


最後は、データベースの歴史を知る上でとても大切な一冊。PostgreSQLを開発したMITのStonebraker先生らによる「Readings in Database Systems」(通称 red book)です。この本は、過去30年に渡り重要な功績となった論文を集めたものです。30年の間に蓄積された論文の数は膨大で、どこから読み始めればいいかわからないものなのですが、この論文集のおかげで、重要なものから順に読んでいくことができます。論文以外の解説記事も面白く、1979年にCoddがRelational modelを提唱した前後、どのようなデータベースシステムが良いかという議論が活発になされて、結局どのような顛末になったかまで書かれてあります。XMLのような階層型データも当時から話題であったし、データの意味・モデルに基づいたsemanticデータベースや、最近よく話題になるような、プログラムで扱うオブジェクトの保存に特化したオブジェクトデータベースなども昔、一度市場から消滅している過去があるのです。




実装に特化した話も秀逸で、なぜDBMSではトランザクション管理、インデックスなどをモジュール化した実装ができないのか、分散(クラウド)データベースでは、どのようなシステム構成が考えられてきて、落ち着きどころはどこか。さらには、なぜXMLデータベースは成功しないか、など一刀両断していて、長い歴史をみてきたからこそ書ける切り口がとても面白い本です。Stonebraker先生も、5年10年も立てば、昔に熱心に議論されたことが忘れられて、また同じような研究が盛り上がるような現状を危惧してこれをまとめたとか。「歴史は繰り返す」というのは本当ですね。(はてな界隈でもこの「歴史は繰り返す」現象をよく見かけるのですが、大人げないので敢えて突っ込みを入れるようなことはしていません)


他に、これらの本がお勧めな理由としては、世界中の大学でデータベースの講義用の教科書として使われていて、Googleで検索するだけで講義資料が手に入る、というのも特徴です。さっと内容を調べたいときには、講義資料を検索するとよいでしょう。

研究寄りの話ばかりしてないで、もっと実用的なOracleとかMicrosoft SQLServer、DB2などの商用データベースや、オープンソースのPostgreSQL, MySQL, SQLiteなどを紹介したらどうしたって? そんなに欲張らなくても大丈夫。最初に紹介したRaghuの本でも読んでおけば、それぞれの製品で、SQLで検索・更新がどのように実行され、indexがどう使われるのかなんて、すぐわかるようになります。他に必要な知識は、SQLの方言や、それぞれのシステムでデータがディスク上にどのように配置されるかという情報くらい。それがわかれば、検索の種類やテーブル設計の違いで、パフォーマンスにどのような影響がでるか、より正確に把握できるようになることでしょう。オープンソースのシステムなら、このようなDBの知識を持った上でソースコードを読んでみると、素早く全体の構造から実装の詳細までを把握することができます。


関連情報

4 件のコメント:

匿名 さんのコメント...

この手の本を固めて読みたかったので、丁度良いリコメンドもらった感じです。ありがとうございます。

匿名 さんのコメント...

ぼくが学生のころDBといえはOnlienDatabase (Dialogとかの)だった。RDBはDBASE2とかが出始めたころ。まあ1980年代だからね。でもOnlineDBとRDBが最近ようやくつながってきてるよね。Xerialは非常に興味深い。いいものを発見した。

匿名 さんのコメント...

redbook はDBの古典以外にも、ストリーム処理や検索エンジンなどなどもありますよね。google と inktomi 検索エンジンの話は改めて良くエッセンスが書かれていると思います。Aurora のストリーム処理の話はなんだか応用例をみると適用先が少なかった様子がどうも見え隠れする。あとstonebraker 著の経済モデルをベースとした分散DBの論文もあったと思うのだけど、あの技術って実用に使われているのだろうか?というのはちょっと疑問に思っていました。

Taro L. Saito (leo) さんのコメント...

>匿名さん
お役に立てたようでなによりです。

>system360さん
そんな昔からDBを知っているとは、大先輩ですね。RDBが身近になったのも本当にここ5年位の話ですが、B+-treeなど基盤となる技術は当時から変わっていないなど、感慨深いものがあります。

>macさん
検索エンジン、ストリーム処理の方はまだちゃんと読んでいなかったので、見てみます! このブログもそうなのですが、人に「こういうのがあるよ」と教えてもらうのは、勉強するためのいいモチベーションになりますね。さっそく読んでみます。

License

Creative Commons LicenseLeo's Chronicle by Taro L. Saito is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.