データベース徹底攻略

データベース徹底攻略 (WEB+DB PRESS plus)

データベース徹底攻略 (WEB+DB PRESS plus)

  • 作者: 松信嘉範,羽生章洋,ミック,奥野幹也,松下雅和,桑野章弘,青木峰郎,ひろせまさあき,小林篤,島田慶樹,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/03/15
  • メディア: 大型本
  • この商品を含むブログ (5件) を見る

ソーシャルゲームを作っている時はデータベースに詳しくなろうと色々な本を買っていたようだ。この本もその1つで、処分前に気に止まったところをメモしていく。

メモ

  • 正規化(重複排除)
  • データベースエンジン MySQLならInnoDB
  • InstagramはPostgreSQL
  • ポスグレの方がオプティマイザが優れている
  • 運用
  • Amazon RDS 小規模ならこれに運用を任せる
  • NoSQL = Not Only SQL
  • RedisはSorted Setというデータ構造を持っているのでランキング実装に便利
  • 膨大なデータの蓄積・分析にHadoop. しかしAWS上でやるとデータサイズ的に費用膨大
  • そういうとき、AWSでやるならRedshift
  • クラウド or オンプレミス
  • Hadoopクラスタより、Redshift + S3 + EMRが安い
  • DB設計者は少なくなりがち&ベテランに任されがちでDB設計スキル蓄積が難しい
  • 箱(エンティティ)
  • データモデリング
  • UML
  • DB設計者は業務用件・ビジネスモデルを理解すべき
  • キー「外部キー」「主キー」「候補キー」「ユニークキー」
  • SQLの集約関数 COUNT, SUM, AVG, MAX, MIN
  • GROUP BY
  • MySQL Workbench(オラクルのツール)
    • SQLインターフェース
    • データモデリング
    • サーバ管理。パフォーマンスなど
    • MySQL Utilities (Pythonスクリプト集)
  • バイナリログを取っておけばバックアップから復元後に順番にSQLを当ててフォワードリカバリできる
  • MySQL Sandbox 学習に良い(Unix/Linuxのみ)
  • 外部キー制約
  • SQLインジェクション対策にプリペアードステートメント
  • ACID
  • バックアップ
    • mysqldump
    • バイナリログ
  • 死活監視 mysqladmin
  • マスター、スレーブ、レプリケーション
  • フェイルオーバー:マスターが死んだらスレーブをマスターにする
  • スロークエリログ
  • 実行計画 EXPLAIN
  • スケールアップ
    • CPU, Memory, IOPS
  • memcached MySQLからフェッチしたデータのキャッシュとして使うことがほとんど
  • MongoDB, スキーマレス、ドキュメント指向、自動シャーディング etc..
  • Node.js + MongoDB
  • npm
  • MongoDBは
    • トランザクションがない
    • データがメモリに乗らなくなると遅い
  • Redshift 分散並列RDB 分析用途向け
  • Hadoopはどんなクエリであっても遅い
  • HadoopのSQLインタフェースであるHive
  • Redshiftは最初のクエリは遅い。C++生成しているため
  • その他いろいろ。CAやDeNAの人が書いている

読んでみて

SQLかKey-Value、どちらを使うかの判断ができるようにならないと始まらない。スタートアップの速攻で作る時にKey-Valueで作ると書いてあったが、自由にやりすぎて手を付けられなくなる未来が見えるので基本はSQLでいいのではなかろうか。

ゲームアプリの各ユーザデータをサーバに保存(他のユーザとの関わりはなし)とかならKey-Valueを使ってみてもよさそう。今は亡きPurse.comのような簡単なデータ保存のような使い方になるのだろう。

個人としてはRDSを使ってみたい。企業ではRedshiftを使ってみたい。