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

2023年9月24日 engineering

こんにちは、 @kz_morita です。

今回は,『データ指向アプリケーションデザイン』を読んだのでその感想を書いていきます.

本について

以下の本を読みました.

かなりの大著のため読むのに時間がかかりましたが一通り読むことができました.

目次は以下のような感じです.

第I部データシステムの基礎

1章 信頼性、スケーラビリティ、メンテナンス性に優れたアプリケーション
    1.1 データシステムに関する考察
    1.2 信頼性
    1.3 スケーラビリティ
    1.4 メンテナンス性
    まとめ 

2章 データモデルとクエリ言語
    2.1 リレーショナルモデルとドキュメントモデル
    2.2 データのためのクエリ言語
    2.3 グラフ型のデータモデル
    まとめ 

3章 ストレージと抽出
    3.1 データベースを駆動するデータ構造
    3.2 トランザクション処理か、分析処理か?
    3.3 列指向ストレージ
    まとめ 

4章 エンコーディングと進化
    4.1 データエンコードのフォーマット
    4.2 データフローの形態
    まとめ 


第II部分散データ
    II.1 高負荷に対応するスケーリング
    II.2 レプリケーションとパーティショニング

5章 レプリケーション
    5.1 リーダーとフォロワー
    5.2 レプリケーションラグにまつわる問題
    5.3 マルチリーダーレプリケーション
    5.4 リーダーレスレプリケーション
    まとめ 

6章 パーティショニング
    6.1 パーティショニングとレプリケーション
    6.2 キー‐バリューデータのパーティショニング
    6.3 パーティショニングとセカンダリインデックス
    6.4 パーティションのリバランシング
    6.5 リクエストのルーティング
    まとめ 

7章 トランザクション
    7.1 トランザクションというとらえどころのない概念
    7.2 弱い分離レベル
    7.3 直列化可能性
    まとめ 

8章 分散システムの問題
    8.1 フォールトと部分障害
    8.2 信頼性の低いネットワーク
    8.3 信頼性の低いクロック
    8.4 知識、真実、虚偽
    まとめ 

9章 一貫性と合意
    9.1 一貫性の保証
    9.2 線形化可能性
    9.3 順序の保証
    9.4 分散トランザクションと合意
    まとめ

第III部導出データ
    III.1 記録のシステム(Systems of Record)と導出データ
    III.2 各章の概要

10章 バッチ処理
    10.1 Unixのツールによるバッチ処理
    10.2 MapReduceと分散ファイルシステム
    10.3 MapReduceを超えて
    まとめ 

11章 ストリーム処理
    11.1 イベントストリームの転送
    11.2 データベースとストリーム
    11.3 ストリームの処理
    まとめ 

12章 データシステムの将来
    12.1 データのインテグレーション
    12.2 データベースを解きほぐす
    12.3 正確性を求めて
    12.4 正しいことを行う
    まとめ 

感想など

本書は大きく分けて3部構成になっていました.

第一部では,アプリケーションとデータの関係性や,RDB や NoSQL といったデータモデルの話や,データベースの内部のデータ構造についての話などが書かれています.

第二部では,主に分散データということで,データのレプリケーションやパーティションについての話.それにともない分散システムにおけるトランザクションなど分散システム上の難しさなどが多く書かれています.

第三部では,バッチ処理や,ストリーム処理といったデータ処理プロセスの話からはじまり,CDC (Change Data Capture) や Event Sourcing と CQRS といったところまで踏み込んで書かれています.

読んだ感想としては,まず本自体がかなりの大著であり,660 ページにわたる本だったので読み切るのにかなり時間がかかり大変でした. ただし書いてある内容自体は,データを取り扱うシステムにおいて重要なことばかりが書かれていたように思います.

特に直近ではデータベース周りの仕事をすることが多く,実務を行っている上で読んだのでかなり勉強になることが多かったです.

基本的なところでいうと,OLTP データベースと,OLAP データベースの違いみたいなところや,行指向レイアウト,列指向レイアウトなどデータの内部表現の話などは普段使っているミドルウェアの内部の話に関わる点だったので非常に読んでいて楽しかったです.
また,直近で Flink を使用した Stream 処理の実装をしていたり,CDC (Change Data Capture) と メッセージキューを使用したデータのパイプラインシステムのアーキテクチャの検討などをおこなっていたためこのあたりの話も基本的な考え方が学べてよかったです.

さらにトランザクション周りの ACID 特性や分離レベルの話など,ふわっと理解していたことについても復習できたのが良かったです.

この本が扱っているトピックはとても広いので,この本だけで十分な知識が得られるというたぐいのものではないかなと思いますが,これから知識を広げていく上での地図となる良い本だったなと思います.

個人的にはトランザクションまわりの話や,分散システムについてはもう少し深堀していこうかなと思います. 参考文献が大量に掲載されているため,学習リソースには困らなそうです.

この記事をシェア