0

私は現在、ユーザーの最高スコアのみを保存するMySQLテーブルセットアップを持っています。彼らがより良いスコアを取得した場合、以前のスコアが更新されます。また、過去...24時間以内に投稿されたスコアのみを表示する24時間のリーダーボードが必要です。

2つのオプションが思い浮かびます。

1)リーダーボードごとに2つの別々のテーブルを用意します。ユーザーごとに1スコアのみを保存する「ベストスコア」リーダーボードと、ユーザーごとに1スコアを保存し、タイムスタンプが付けられた「24時間」リーダーボード。つまり、スコアが送信されるたびに、スコアを1つではなく2つのテーブルに送信する必要がありますが、データのフットプリントは次のオプションと比較して最小限に抑えられます。

2)ユーザーごとに重複するスコアを投稿できるテーブルを1つ用意し、スコアにタイムスタンプを付けてから、必要なデータ(全体として最高のスコア、24時間以内のスコアなど)を使用してスコアの巨大なテーブルにクエリを実行します。

何かアイデア/提案はありますか?PHP / MySQLを扱ったのはこれが初めてなので、設計/効率の面で最善のアプローチが何であるかはわかりません。

4

2 に答える 2

2

正規化されたデータベースの場合、すべてのスコアに対して1つのテーブルのみが必要です。挿入するだけで、更新や削除はできません。

次に、たとえば最大スコアを見つけたい場合はMAX、クエリにを適用できます。

WHERE過去24時間以内のスコアを検索する場合は、これを句に追加できます。

于 2012-11-19T00:42:27.183 に答える
0

最高のスコアを保持するテーブルは1つだけにすることをお勧めします。

問題に対して2つのテーブルがあることのいくつかの欠点は次のとおりです。

  • 情報を表示するには、おそらくテーブル間の結合が必要になります(正規化されたテーブルよりもパフォーマンスが低くなります)
  • コードは読みにくく、保守しにくいものにする必要があります。
  • 一貫性を維持するには、トランザクションを操作して両方を更新する必要があります。

1つのテーブルのみを使用して、クエリで24個のリーダーボードを表示するために使用するフィールドにインデックスを作成する必要があります。つまり、候補インデックスは、WHERE句で使用されるタイムスタンプになります。

于 2012-11-19T00:53:22.493 に答える