理系公務員のプログラミング日記

データ指向アプリケーションデザイン 感想(前半)

タグ:
技術書感想

データベースの基礎から分散データの扱いまで

めちゃくちゃ面白い。Twitterで紹介されてるのを見て即買ったけど当たりだった。

ただあまりにも長すぎるので、半分読んだ時点で振り返り。

オライリー三大鈍器の一つとして登録したい。

(他は、「JavaScript 第7版」と今度出る「詳解 システム・パフォーマンス 第2版」ですかね・・)

DBスペシャリスト落ちた時に分散システム周りの単語が全然理解できなかったけど、これ読んでるとめちゃ理解が進む気がするなあ。

やっぱり原理原則に一度触れておくのは大事。

第1部 信頼性、スケーラビリティ、メンテナンス性に優れたアプリケーション

・アプリケーションは演算指向ではなくデータ指向である。CPUの処理能力が原因で問題が起こることは少なく、データの量が多いことや複雑であること、素早く変化することが問題となる。

・データシステム(DBやキャッシュ、キューなど)を設計する上で課題となるのは、信頼性、スケーラビリティ、メンテナンス性の3つ

信頼性・・・何か問題が生じたとしても正しく動作し続けること。
スケーラビリティ・・・負荷の増大に対してシステムが対応できる能力のこと。
メンテナンス性・・・メンテナンスがしやすいこと(運用性、単純性、進化性を持つこと)。

第2部 データモデルとクエリ言語

・代表的なデータモデルとしてリレーショナルモデルがあり、それ以外に非リレーショナルのNoSQLがある。

・NoSQLのうち代表的なものはドキュメントモデルグラフモデルがあり、それぞれ使い分けることが大事。

リレーショナルモデル・・・非常に汎用性があるモデル。
ドキュメントモデル・・・フォルダ構成のように、ほとんどが1対多で構成されたり、ノード間の関係が薄い場合。
グラフモデル・・・ドキュメントとは逆で、ほとんどが多対多で構成されており、ノード間の関係が強い場合。

第3部 ストレージと抽出

・ストレージエンジンはトランザクション処理(OLTP)に最適化したものと分析(OLAP)に最適化したものがある。

トランザクション処理・・・一般ユーザーからの大量のリクエストを受けるが、1つのリクエストに必要なレコードは少量。
分析処理・・・・主にアナリストが使用するもので、リクエストの数は少ないが、1つのリクエストに大量のレコードが必要。

・トランザクション処理にはlog-structuredの考え方インプレースで更新を行う考え方がある。

log-structuredの考え方・・・ファイルに対して追記と古いものの削除だけを行い、更新は決して行わない。
インプレースで更新を行う考え方・・・ディスクを更新可能な固定サイズの集合とする。

・分析処理には列指向のストレージが利用されている。

列指向のストレージ・・・行ごとではなく列ごとにデータをまとめる方法。分析は列ごとに行うことが多いため。

第4部 エンコーディングと進化

(追記します)