ソーシャルゲームの主な特徴
- ユーザ数が多く一気に増えることがある(今のDBサーバの負荷ならあとN倍くらいは耐えられる…)
- 主な情報はサーバ側で持つ(コンソールと違って勝手な改変は難しいが、突破されるとユーザ全体に影響を及ぼす)
- ユーザIDをキーにした処理が多い
- 構造化されたデータ項目が多い
- 永続的に必要とされるデータと期間限定のデータがある
- 可用性と整合性に関する要求が意外と高い(購入したアイテムが表示されないとかは絶対NG)
大規模webサービス向けのデータベースに求められる機能
- オンライン(無停止)でのスキーマ変更(サーバ停止は絶対できない レプリケーション構成とかを上手く使う)
- 水平分散(Sharding)の容易さ(MySQLにSharding機能はない)
- 安定性 (簡単にクラッシュしたり、原因不明のダウンに長時間見舞われたりしたら困る)
- 単一障害点の除去(そこが落ちるとサービスダウンになるような箇所は排除する)
- 2ヶ所以上のデータセンター(データセンターそのものの突然死や、3.11以降の電力不足を回避)
- 単体性能の高さ (トータルコストが下がるから)
- 局所的な超高速化
MySQLかNoSQLかは、選ぶとよい。MySQLは構文解析をやるから高速ではないけど、トランザクション機能により耐障害性は高い。
NoSQLは高速だがトランザクション機能がないから耐障害性に遅れを取る。
大企業だと標準装備していないShardingを自社開発も出来る。