ブログトップ 記事一覧 ログイン 無料ブログ開設

急がば回れ、選ぶなら近道

2013-06-23

TX本勉強会終了

先日をもって無事に読了しました。記念に記録しておきます。

読んだ本はこれ
Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery
http://www.amazon.co.jp/Transactional-Information-Systems-Algorithms-Concurrency/dp/1558605088/ref=sr_1_1?ie=UTF8&qid=1370746124&sr=8-1&keywords=transactional+information+systems

 始まったのが、2011年の秋からだったので、ほぼ一年半かかりました。スタート時点は10名ほどいたメンバーも徐々にいなくなり、最後は不動の4人のレギュラーで読み進めるという形でした。大体2週間に一回のペースで進めて、回数は40回弱になりました。まずは一緒に読み進めてくれた、@maropuさん @kazuyoshihayaseさん @nobu_kさんに皆さんには感謝申し上げます。ありがとうございました。彼らが居なければとても読了できなかったと思います。3名とも本当に掛け値なしで非常に優秀な方々でした。ぶっちゃけ自分が一番モノを知らないという状態でした。
 
 輪読形式としては自分が声を出して音読し、わからんところを各自で質疑応答しながら議論して進めていくという地上戦の力技で進めて行きました。結果として、TX本をまさかのほぼ全文朗読という貴重な体験をすることになりました。

 さすがにTX業界最高峰のテキストと言われるだけあって、非常に難しかったです。勉強会でも二時間で3ページも進まないということもありました。一般には3-4章が壁と言われますが、それを壁と感じる人は多分先まで進んでいない人で、実際は壁はどんどんオーバーハングして、最終的には120度ぐらいにまで行きます。
 
 この本の難しさは、トランザクションの理論を数学的に精緻に展開しているので、「飛ばし読み」ができないことです。難しいのでわかったことにして、先に行くとさらに厳しくなります。要するに「さっぱりわからない」という感じになります。前半で引いていた伏線を後半で一気に回収するという運びになっているため、先の伏線をちゃんと理解する必要があります。この結果、難度の高い試合運びを強制されるのですが、ただし、理解できると、素晴らしいトランザクションの理論の深みを味わうことが可能になります。正直この本を読むまである程度TXのことは分かっているつもりでしたが、「まったくわかっていない」ということを実感させられました。

 未だにトップノッチの論文でも普通に引用されるテキストなので、この本を読破できれば大抵のTX系論文は(ほかに読むものは当然必要ですが)それなりに読み進めることが可能になります、というか逆に言うとその世界で生きるためには、読んでおかないと話にならないというテキストでもあると思います。とにかく「あの口の悪い」Jim Gray大先生をして、この本があれば俺の本はいらないとまで言わしめたテキストです。内容は、推して知るべしでしょう。

 ただし、この本は基本的に最近の分散系のフレームワークは取り入れていないため、この本を読破したあと、または同時に分散系の勉強もする必要があります。この二つの領域に長じることで、今後の分散TXパラダイムは理解できるようになるでしょう。自分はまだまだそこには行けてませんが。(そもそも長じている人間が世界に何人いるのだ、というレベルではありますが。)

 TX本は、ミドルウェアやDBAでトップ・エンジニアを目指すのであれば、是非挑戦されることを勧めます。内容・難易度ともにS級クラスであることは保証させて頂きます。トップ・エンジニアではなくても、エンジニアであれば、いつかは挑戦を志してほしいですね。それだけのテキストです。

さて、ちょっと自分なりのまとめとか感想とか。

1.「ACID属性でもっとも重要なものはCであり、次にIになります。AとかDとかどうでもよい。」

 一般には逆ですね。AとDは分かりやすいので、「トランザクションってのはアレだろ?失敗したら元に戻ってくれるってやつだろ?」という言い方が人口に膾炙していると思います。全然違いますね。まったく違う。
 トランザクション属性は「同時に複数の処理を走らせた場合にそれぞれが整合性をもって処理を完了する」ということにつきます。すなわちちゃんとIsolateされて、かつConsistencyが保たれるということです。何をもって「Consistencyが保たれているのか?」というのは簡単ではありませんが、単一の見方ではなく、相当数の考え方がある、ということは知っておいた方がいいでしょう。大きくても三つはあり、細かいレベルになると20は越えます。要するに20種類以上の言い方で「一貫性が担保されている」という言い方ができるということです。
 TX本ではそれこそ、くどいぐらいに、この理屈が繰り返し、しかも数理論理学的にバリエーションをもって展開されています。

2.「分散TXは今後普通になる。基本はMVCCになる。」
 近年の分散TXの達成目標は基本的に1-copy-serializabilityの担保です。要するに単ノードでのserializabilityが分散環境でも保証されればよい、ということです。んで、そもそもserializabilityってのは何よ?って話はTXそのものの話です。通常は「順序実行と同じ結果になる」という意味合いですが、実際にはそれほど簡単な話ではありません。「同じ結果」をどう指すかという意味論で内容が変わります。なお、これはTX本の、ど真ん中ストライクの概念です。TX本を読了できれば、ほぼserializabilityの概念は言葉ではなく、体で覚えているレベルになります。
 現在の潮流は、このserializabilityの達成手段としてMVCCが基本軸に据えられています。(古典的な2PLもまだまだ優勢ではありますが、パフォーマンス的にはかなり劣ります。)これは単ノードでのserializability(に近い)の確保として、MVCCの一つであるSIが注目されてきていることも大きく影響しています。
 MVCCは本質的に分散処理との相性が良いため、その結果近年の分散環境の導入容易性と相俟って、分散トランザクションの達成手段として採用されつつあります。今後の潮流はこちらになるでしょう。尚、TX本わざわざ一章を割いてMVCCについては基礎から説明してあります。

3.「リカバリーの基本アルゴリズムは知らないとマズイ。ただし今後は抜本的に変わる可能性も高い。」
 DBの本質の一つがloggingであることに異論を唱える人は少ないでしょう。なんのためにlogをとるかというと当然、障害発生時にデータを保全して、障害発生前の状態にDBを戻す必要があるためです。このためのアーキテクチャアルゴリズムは、当然TX処理のリカバリーの根幹になります。DBを扱うのであれば知っておいたほうがいいです。
 TX本の後半戦は、そもそものリカバリーの考え方を基礎から、その発展と応用まで順を追って展開し、そこに同時に前半戦の正常系のアウトプットを入れこんでいきます。DBを理解するのであれば、どうしてもこの異常系をマスターする必要があります。
 リカバリーの考え方は、いろいろと基本になります。人の一生においては、別にミドルでなくてもアプリサイドでも、この手のリカバリーは手動で組み込む必要に迫られることがあるときが一生に一回ぐらいはあるのです(遠い目)。この時にDB的に正当なアルゴリズムで手を打っておくと、まず間違いがないです。いわゆる「セオリー」になります。セオリーはその場で発明するものでも、思いつくものでもありません。勉強しましょう。人生の基本はリカバリーです。でたらめに書いたオレオレ・リカバリーほど、引き継いだ人間に「死ねばいいんじゃないの」といわれる生き恥のコードになることは、まぁあるわけですよ。(さらに遠い目)
 とはいえ、今話題の不揮発性メモリーが普及すると、このあたりは抜本的に変わっていきます。物事が変わるときに「そもそもがどうだったのか?何が問題であったのか?」ということを把握しておくことは非常に重要です。その意味ではいままで以上にTXリカバリーの考え方は重要になるかもしれません。

4.「TXはRDBMのなかのもっと良質な資産であり、今後もマスターすることが求められる。」
 TXをマスターすると、例えば「w1(x)w2(x)のような単純な上書き」ですら立ち止まって考える事ができるようになります。これはアプリケーションにおける潜在的なバグを潰す事につながる非常に重要な資質です。別にDBを実装できる必要はありません。そうではなく、「処理の何が正しいのか?」という事を考えることが可能になります。エンジニアの基本の一つだと言えると思います。トランザクションの本質はACIDだとかの表面的な属性ではなく、何が正しいのか?を常に考える態度だと思います。

 あと、よくなんでこんな難しいものを読むのか?といわれますが、理由は二つです。

4-1 TXの考え方は応用が利く。
 要するに複数処理を一度に投げ入れて、それを要素に分解した上で、整合性がとれ、かつ障害に強い「やり方」は何か?ということです。これはミドルだけでの話ではありません。より上位のセマンティクスでこの手法を利用することで、下位のレイヤーの制限を乗り越えることができます。そういうった意味ではアプリケーションレイヤー例外処理の一つの手法としても考え方として応用できます。

4-2 単純に読んでいておもしろい。
 あとは単純におもしろいですね。いままでTXはわかったつもりでいましたけど、全然わかっていないということもわかりましたし、今現在ですらわかっていないこともわかりました。その一方で、「ああ、なるほどね」と腑に落ちることも多く、非常に楽しかったのも事実です。この忙しい合間に頑張った甲斐があったな、と思っています。
 個人的には「技術的におもしろい」というものを追求できなくなった時が現役終了だと思っています。IT会社なのに、経営陣が「俺は技術には興味がない。むずかしいからわからない」と堂々話す人が多いのが現実を見ると、なんだかなぁと思います。

それにしても勉強になりました。繰り返しになりますが、超絶に忙しい中で、勉強会に継続して参加してもらったレギュラー陣3名の方々には、御礼申し上げます。

尚、このあと後続して分散DB本の勉強会をやりますので、興味があるかたはご参加を。TX本に比べれば子供の遊びレベル(と言い切って後で天罰てきめんの可能性大ですが)なので、前提なしでも参加できると思います。TX本の方も米国に行かれる@nobu_kさん(お疲れさま!)以外は参加してもらう予定です。

http://www.zusaar.com/event/819004

トラックバック - http://d.hatena.ne.jp/okachimachiorz/20130623/1371978590