2011-09-14 12 views
0

ゲームテーブル、Playersテーブル、およびUsersテーブルがあるとします。MySQLで大きなテーブルを扱うには? (ゲームのDBデザイン)

  • 各ゲームは、各プレイヤーが「死んだ」または「生きている」のような、ステータスがあり、多くのプレーヤー
  • を持っています。したがって、プレーヤーはユーザーではありません。
  • 各プレーヤーは、ユーザー

構造これまでに正常に見えるがあります。しかし、1日に何千ものゲームがある場合(この種のゲームの時間は非常に短い)、各ゲームには10人または20人のプレイヤーがいると思います.Playerテーブルの何百万行も1年以上。そして、私はどのゲームをも再生できるようにしたいので、ゲーム終了後も各プレーヤーをテーブルに保管しておく必要があります。私はその時点でのパフォーマンスが心配です。選択と更新は遅くなり、遅くなりますよね?

どのような考えですか?

+0

http://www.mysqlperformanceblog.com/2006/06/09/why-mysql-could-be-slow-with-large-tables/ – rwilliams

+1

誰も(文字通り誰も)アプリケーションを設計できませんでしたパフォーマンス上の問題の影響を受けません。ツイッターとフェイスブックのdevteams(あなたも知っている - 彼らは彼らの仕事が本当に良いと知っている)パフォーマンスの問題を経験する。ですから、いくつかの一般的なスキーマから始め、**実際の**ボトルネックが検出されている限り改善することをお勧めします。 – zerkms

+0

はい、私は設計によって正しいことをするのが好きです。たとえば、私の計算で1日に1M行の新しい行があると言われたら、週に「本当のボトルネック」になるのを待つのではなく、開始する前に全部をやり直す必要があります後で。 – HappyDeveloper

答えて

2

本質的にスケーラビリティの問題です。スケーラビリティはほとんどすべての一般的なWebサイト、ゲームなどで発生する問題であるため、その解決策の範囲があります。まず第一に、妥当なデータベース設計と索引の使用を考えると、現代のデータベースは何百万行ものデータを扱うことができます。あなたのゲームが非常に人気があり、現代のデータベースが扱うことができるデータを超え、企業にビジネスモデルを持っている場合、おそらくあなたはその問題を解決するために一流の専門家を雇うだけでしょう。

ゲームの実装を始めたばかりの人は、データベースの微調整をやめておくことをお勧めします。パフォーマンスのボトルネックは、期待される場所とは異なる場所にあります。時期尚早に最適化しないでください:)

+0

ありがとうございますが、私が言ったように、私はこれを時期尚早の最適化とは見ません。私は、設計上、スムーズに動かないものを作ることをやめようとしています。 – HappyDeveloper

1

はい、パフォーマンスに関しては問題がありますが、これらのテーブルフィールドで適切なインデックスを作成すると、かなり簡単になります。

テーブルのすべての今後の選択および更新クエリを追跡し、適切なインデックスを作成します。

あなたはまた、同じ構造を持つ別のテーブルに(1月または2月のように)いくつかの時間後にいくつかのゲームや、レコードをアーカイブするためにいくつかのロジックを考えることができるHow MySQL Uses IndexesEXPLAIN Output Format

を参照することができます。

+1

古いゲームを別のテーブルにアーカイブするのはいい考えです。これは答えかもしれない – HappyDeveloper

関連する問題