皆さん、私はソーシャル ゲームの開発者であり、ゲームには既に 70 万人のプレイヤーがおり、毎日約 7,000 人の新しいプレイヤーが登録され、約 5,000 人のプレイヤーが常にオンラインになっています。
DB サーバーは非常に強力なハードウェアで実行されています。16 コアの CPU、24 Gb の RAM、4 つの SAS ディスク上に構築された BBU を備えた RAID-10 です。私は Percona サーバー (パッチを適用した MySQL-5.1) を使用しており、現在 InnoDB バッファー プールは 18Gb です (ただし、innotop によると、利用可能な空きバッファーはわずかしかありません)。DB サーバーのパフォーマンスはかなり良好です (2k QPS、iostat %util は 10 ~ 15%、vmstat の「b」状態のプロセスはほぼ常に 0、loadavg は 5 ~ 6)。ただし、時々(数分ごとに)約10〜100の遅いクエリが発生します(それぞれが約5〜6秒続く場合があります)。
MySQL データベースには、最も多くのスペースを占める 1 つの大きな InnoDB テーブルがあります。約 3 億行あり、サイズは約 20 Gb です。もちろん、このテーブルは徐々に大きくなっています...データベースの全体的なパフォーマンスに悪影響を及ぼしているのではないかと心配し始めています。近い将来、私はそれについて何かをしなければならないでしょうが、正確にはわかりません。
基本的に問題は、シャードするか、単に RAM を追加するかということです。もちろん、後者の方が簡単です。最大 256 GB の RAM を追加できるようです。しかし問題は、よりスケーラブルなため、代わりにシャーディングの実装により多くの時間を投資する必要があるかどうかです。