ソーシャルゲームのためのデータベース設計 まとめ

ソーシャルゲームを作る時に参考になるデータベースやKVSの選定、設計などの記事やスライドのまとめ

2013-02-03追記

スライド

ソーシャルゲームのためのデータベース設計
http://www.slideshare.net/matsunobu/ss-6584540

とあるアプリの開発運用(トラブルシュート)
http://www.slideshare.net/takafumionaka/ss-5852561

PHPで大規模ブラウザゲームを開発してわかったこと
http://www.slideshare.net/ketaiorg/php-4638298

Lampで作るソーシャルアプリの負荷対策〜アプリとインフラの調和のテクニック〜 (Klabさん)
http://www.slideshare.net/klab/4-d6963726f736f667420506f776572506f696e74202d204c414d5082c58dec82e9835c815b83568383838b83418376838a82cc958989d791ce8df432303130303731342e707074

大ヒットソーシャルアプリの裏側 (Klabさん)
http://www.slideshare.net/klab/ss-5369530

ブログ

ソーシャルゲームのためのMySQL入門 - Technology of DeNA
http://engineer.dena.jp/2010/11/mysql-for-socialgame.html

ソーシャルゲームのためのMySQL入門その2 - Technology of DeNA
http://engineer.dena.jp/2011/02/mysql-for-socialgame2.html

ソーシャルアプリGame研究会 by 学びing : ソーシャルゲーム用のサーバ構成(データベース検討編)
http://blog.livedoor.jp/manabisg/archives/1165648.html

記事

CEDEC 2010】GREEによる大規模ソーシャルゲームのつくりかた / GameBusiness.jp
http://www.gamebusiness.jp/article.php?id=2095

【CEDEC2010】各社が公開、大規模オンラインゲームのバックエンドの秘密 - GAME Watch
http://game.watch.impress.co.jp/docs/news/20100903_391453.html

@IT Special PR:600億PVもMySQLで! モバゲーのインフラ底力
http://www.atmarkit.co.jp/ad/dena/dena1004/index.html

まとめ記事

ソーシャルゲーム開発に関するスライド資料をまとめてみました | ke-tai.org
http://ke-tai.org/blog/2011/01/28/snsgamesslidematome/

書籍

以下の書籍、買ってみました。

mixiアプリを出している各社が、具体的にどんなサービスでどんなサーバ構成で運営しているのか?が書いてあるので参考になります。
INSERT DELAYを使うとか。

mixiアプリ開発&運用コンプリートブック -ユーザをつかむソーシャルアプリのつくり方!育て方!

mixiアプリ開発&運用コンプリートブック -ユーザをつかむソーシャルアプリのつくり方!育て方!

お願い

他にも、こんな記事あるよ! ってあったら教えて下さいまし!

追記

2011-12-23追記
大規模ソーシャルゲームドラゴンコレクション」運営の最前線で得られたノウハウ 〜チューニングと運用、18のポイント〜(1/4):CodeZine
http://www.codezine.jp/article/detail/6336/

2012-02-13追記
(19) 大規模ソーシャルゲーム開発から学んだPHPMySQL実践テクニック
http://www.slideshare.net/infinite_loop/phpmysql

携帯ソーシャルゲーム開発に効くかもしれない薬
http://magicalrod.com/article/001/p001_1.html

完全公開!ソーシャルゲーム設計事例:プロローグ (ゆめ技:ゆめみスタッフブログ)
http://yumewaza.yumemi.co.jp/2011/07/social_game_develop01.html

2012-02-21追記
DRECOMさんの事例 resque + redis , fusion io, percona など
ソーシャルゲームスケールアウトの歴史
http://www.slideshare.net/drecom/ss-11667563

2012-03-19追記

ログ解析を支えるNoSQLの技術
http://www.slideshare.net/drecom/nosql-11668093

2013-02-03追記
大規模ソーシャルゲームを支える技術〜PHP+MySQLを使った高負荷対策〜
http://www.slideshare.net/infinite_loop/phpmysql-13361388

僕個人の意見

以下、認識間違っていたら教えて下さい。
あと、みなさんの知っている知識やノウハウも教えて下さい。

2013年2月3日時点の話です。

お約束
  • JOIN 禁止 (縦にテーブル分けるとJOINが効かなくなる)
  • ORDER できるだけなくす
    • 言語側でソートする
  • partitioning: 長期的。パージ用。検索の高速化。メモリ使用量の削減。
DB 命名規則

命名規則を決めておかないとぐちゃぐちゃになるよ!

*** テーブル名

テーブル一覧で、目的のテーブルが探しやすい、見やすくなるよ

  • マスター系DBの命名は頭にマスターっぽい名前をつける: mst_ *, m_*
  • トランザクション系は、頭にそれっぽい名前をつける: user_* , usr_* , t_*

テーブル名見て、マスタなら自動でキャッシュするとかありかも?

*** カラム名

  • primary key は、id
インデックスや遅いDBの改善
  • スキーマのレビューしてもらおう
  • slow_query ログを出して、遅いクエリから修正した方が効率的で早い。

 けど、負荷テストなどスケジュールの後の方にやろうとすると、時間とれなくなって悲惨な目に合うこともある

  • DB専門の人やチームを作って任せる方が学習コストと品質高くなる
  • slow_query や file_sort を開発時から常に見られるよう監視、改善。
Master / Slave
  • 最近は、SSD(ioDrive)を使って、全てMaster に更新、SELECTをするパターンが多い感じ。Slaveはホットスタンバイ。
  • コードも対応できるようにした方がいいかも。
MySQL
  • PHP: mysqlnd という native driver がちょっと早いらしい
  • MySQL は、percona の方がいい場合がある
PostgresSQL
  • 最近は早くなってきているらしい。(が、導入実績は聞いたことない。)
filesystem (Unix系)
  • xfs が最適?
io scheduler
  • DB、Web、マスター、スレーブなど場合による。