yak shaving life

遠回りこそが最短の道

データ指向アプリケーションデザイン を読んだ

なぜ読もうと思ったか

発売当初から話題になっていたしいつか読みたいと思っとは前々から思っていたのと、Redis ClusterやGoogle Spannerについて調べていて分散DBを学びたくなったので。

どのような本か

「アプリケーションデザイン」と題されてはいるものの、基本的にはDBと分散システムの本。なので分散データベースについての記述が多い。でもRDBの話もちゃんとあります。

書評というか感想

すごい本だった…。

何がすごいってまず分量がすごい。前半は気合入れて読んだけど、後半は隙間時間で読んでいたので読了までに数ヶ月かかってしまった。内容も濃いので流し読みだと全く頭に入ってこず、何回も読み直したりしていたらだいぶ時間がかかってしまった。

そして内容もすごい。すごいすごい言いすぎて語彙力の貧しさが露呈してしまっているけど、すごいと思ったんだからすごいのである。扱っているトピックが広く、さながらDBと分散システムの教科書といった感じ。

いわゆるWeb系のエンジニアで、扱っているシステムが小〜中規模な場合、分散システムを触る機会もあまりないと思う。自分もそうだった。そういう人でも第1部「データシステムの基礎」は勉強になります。データモデルやストレージの話、あとは広く浅くいろいろな話題に触れている感じ。

第2部「分散データ」は分散システムに馴染みがない人(僕とか)だとちょっと読むのが大変かもしれない。全てを理解しようとして読むとかなり気合が必要なので、気になったところだけ深く読んであとはさらっと読んだ方が読了するにはいいかもしれない。ただし7章「トランザクション」は本当にいい話なのでここはじっくり読んだ方が良い。RDBの理解を深めることにもなるので是非。

第3部「導出データ」はMapReduceの話とイベントストリームの話が多い。僕はHadoopも触ったことがないしMapReduceとか正直なんとなくしか知らなかったけど、ここを読んで多少理解できた気がする。多少だけど。イベントストリームは今後のトレンドというか、疎結合でスケーラブルなシステムを作る上で避けては通れないのである程度詳しくなっておきたいところ。そして最後の第12章はちょっと毛色が違って、筆者が考える「データシステムの将来」について述べられている。これまた興味深い。

全体的に、実装については触れられていないのでコードは載っていない。でもかなり詳細なところまで説明があるので「抽象的すぎて分かりにくい」ということはない。また実際のプロダクトがどういう設計やアルゴリズムを採用しているか具体例を挙げてくれるのでイメージがつきやすい。

僕自身は分散システムについては本当に無知なので、学びが多すぎて頭が渋滞してしまい読むのにだいぶ時間がかかった。素晴らしい本だけど読むの疲れた。というのが正直な感想。もうちょっと集中して読む環境を整えればよかった。これは隙間時間で読む本ではない…。分散システムについて詳しい人がこの本を読んだ感想を聞いてみたい。

また、よく使っているRDBトランザクションがいかに強力で、そこにどれだけ依存しているのか認識できてよかった。逆にいうと、RDB以外のデータベースをガッツリ使ってアプリケーションを作ろうと思うと設計思想をまるっきり変えなければならない。今までFirestoreとかを雑に使ってアプリを書いたことはあるけど、プロダクションレベルのサービスを作ろうと思うとマインドセットからまるっと変えないといけない気がする。そのくらいRDBトランザクションは強力。DynamoDBとかCassandraとかを使っている例はよく聞くけど、市井のエンジニアたちは皆そこまで理解した上で設計されているんだろうか。

無知の知というか、俺って何にも知らないな〜という気持ちにさせてくれたのでありがたい。DBとか分散システムに対する興味が深まったので、今後は関連する書籍を読んだりNoSQLやNewSQLを使って遊んでいきたい。最近はDockerでなんでもサクッと構築できるので便利な世の中だ。

いやーそれにしても素晴らしい本だった。しかし書いてあることの何割くらい理解できたんだろうか。またもう一回読んで復習しないとなあ。