Open3

データ指向アプリケーションデザインメモ

masamasa

量が多いのでゆっくり時間かけて読んでいく。ある程度読んだら記事にしてまとめる方針で!

データ指向: データの量や複雑さ、変化の速度が主な課題であるアプリケーションのこと
NoSQL、メッセージキュー、キャッシュ、検索インデックス、バッチなどなど、データ指向アプリケーションを支援するツールや技術がある
これらがどのように動作するのかだけでなく、なぜそのように動作するのかを理解していく!!!

masamasa

第1章

演算指向ではなくデータ指向、CPUの処理能力ではなくデータ量や複雑さが大きな問題となる

信頼性

信頼性とは、大まかに言うと「何か問題が起きたとしても正しく動作し続けること」
フォールトが障害を招かないようにするのが大事。意識的にフォールトを作ることで耐障害性の仕組みをテストできる(例としてNetflixのChaos Monkeyがあるらしい)
以下のような原因がある

  • ハードウェアの障害
  • ソフトウェアのエラー
  • ヒューマンエラー

スケーラビリティ

  • 負荷の表現
    • 負荷のパラメータによって表現する
    • この数値はシステムのアーキテクチャによって異なる
    • Twitterの例
      • 最初は、単純にリレーショナルに設計して新しいツイートを挿入していた
      • ユーザーがポストしたら、そのユーザーをフォローしているユーザーのタイムラインにキャッシュするようにすることで負荷が減少
        • 書き込みの処理を重くし、読み込みの処理を減少させるのがよい
      • フォロワーの数が分布が重要な論点になる
      • 最終的には、1と2のハイブリッドになったらしい
  • パフォーマンスの表現
    • バッチ処理システム: スループット(処理能力みたいなもの)
    • オンラインシステム: レスポンスタイム
      • 平均値、パーセンタイル
  • 負荷への対処のアプローチ
    • スケールアップ(垂直、マシンを強力にする)
    • スケールアウト(水平、分散させる)

メンテナンス性

  • 運用性
  • 単純性
  • 進化性
masamasa

第二章

リレーショナルモデルとドキュメントモデル

リレーショナルデータベースは1980年半ばから圧倒的なシェア

  • NoSQLの誕生
    • 最初は目を引きやすいTwitterのハッシュタグとして使われたらしい!!
  • オブジェクトとリレーショナルのミスマッチ
    • リレーショナルデータベースだと、オブジェクト指向言語の、アプリケーションコード内のオブジェクトと、データベースモデルの間に変換レイヤーが必要になってしまう(インピーダンスミスマッチ)
  • 多対一と多対多の関係
  • 今日のリレーショナルデータベースとドキュメントデータベース
    • リレーショナルの細分化は、スキーマが混み入り不必要に複雑になることがある
    • ドキュメントだと、ネストが深ければ直接参照できず、pathを指定しないといけない
    • 多対多だと、ドキュメントの整合性を保つのが大変