「データ指向アプリケーションデザイン」 の第I部を読み終えた。 この部はタイトルにもあるように、データを扱うためのシステムについて全般的に述べられている。
第I部データシステムの基礎
- 1章 信頼性、スケーラビリティ、メンテナンス性に優れたアプリケーション
- 1.1 データシステムに関する考察
- 1.2 信頼性
- 1.2.1 ハードウェアの障害
- 1.2.2 ソフトウェアのエラー
- 1.2.3 ヒューマンエラー
- 1.2.4 信頼性の重要度
- 1.3 スケーラビリティ
- 1.3.1 負荷の表現
- 1.3.2 パフォーマンスの表現
- 1.3.3 負荷への対処のアプローチ
- 1.4 メンテナンス性
- 1.4.1 運用性:運用担当者への配慮
- 1.4.2 単純さ:複雑さの管理
- 1.4.3 進化性:変更への配慮
- まとめ
- 2章 データモデルとクエリ言語
- 2.1 リレーショナルモデルとドキュメントモデル
- 2.1.1 NoSQLの誕生
- 2.1.2 オブジェクトとリレーショナルのミスマッチ
- 2.1.3 多対一と多対多の関係
- 2.1.4 ドキュメントデータベースは歴史を繰り返すのか?
- 2.1.5 今日のリレーショナルデータベースとドキュメントデータベース
- 2.2 データのためのクエリ言語
- 2.2.1 Web上での宣言的クエリ
- 2.2.2 MapReduceでのクエリ
- 2.3 グラフ型のデータモデル
- まとめ
- 2.1 リレーショナルモデルとドキュメントモデル
- 3章 ストレージと抽出
- 4章 エンコーディングと進化
非機能要件
信頼性、スケーラビリティ、メンテナンス性といった「非機能要件」についてまとめられた章だった。個人が使うような小規模なプロジェクトであれば、非機能要件については深く考える必要はないかもしれないが、今日のデータ社会においてはとても大切なことだと書かれている。自分もユーザに対してクラウドの導入提案や、導入後の運用相談を受ける場に立ち会うことが多く納得しながら読み進めることができた。
非機能要件についてはマイクロソフトのドキュメントがよくまとまっているのでリンクを貼っておく。
データモデルとクエリモデルの種類
リレーショナルデータベースとNoSQLのデータモデルについて書かれている章だった。筆者としてはNoSQLのグラフ型データモデルを一般的と書いていたが個人的にはイメージがつかなかった。FacebookのようなSNS系のサービスや道路や鉄道の路線を示すのに使われることが多いようだ。また、知人に質問したところ、システムのネットワークの設定を表す際に使われるケースもあるようだ。グラフデータベースとしてはNeo4jがある
クエリに関してもまとめられていた章だった。しかしクエリと言われるとSQLしかイメージできなかったためCSSが「Webにおける宣言的クエリ」と紹介されていたのは新鮮だった。
データベースの内部
データベースの内部について書かれている章だった。 一番最初に書かれていたが、世界で最も単純なデータベースが印象的だった。これはgetとsetの2つのBash関数で実装されたものだった。自分もリッチなデータベースを使うほどではないが、データをスタックとして保存したいときがあり似たような実装をしたことを思い出した。
OLTP(オンライン・トランザクション・プロセッシング)とOLAP(オンライン・アナリティク・プロセッシング)についてもまとめられていた。
業務ではBIツールなど分析に関係するものが中心なのでOLAPは親しみがあったが、文章にも「データウェアハウスやそれに分類する分析システムは、エンドユーザではなく主にビジネスアナリストが使用するものなので、それほど知られてはいません。」と書いてありあらためて自分がニッチな業務に携わっているんだなと自覚できた。
普段触らないOLTP側の話では、「log-structured」と「インプレース」の考え方があることを学べた。
まとめ
- データ指向アプリケーションデザイン の第I部を読んだ
- 第I部データシステムの基礎と題されている通り、分野的に広く書かれていた
- 自分が知っていることと知らないことの再確認が出来た
参考文献
データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理
- 作者: Martin Kleppmann,斉藤太郎,玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/07/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る