データベース徹底攻略 (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を使ってみたい。