説明:
- 各ユーザーの合計クレジット (評判) を表示するスクリプトがあり、データベースにすべてのユーザーの獲得クレジットの履歴テーブルがあります。
これが私の履歴データベーステーブルのサンプルです:
+----------------------------------------------+
| DATE ID USERNAME CREDITS |
+----------------------------------------------+
| ... 1 X 12 |
| ... 2 E 2 |
| ... 3 X 1 |
| ... 4 X -7 |
| ... 5 O 4 |
+----------------------------------------------+
- 私のスクリプトは SELECT SUM FROM table WHERE username='X' を使用し、それをエコーするため、この場合、ユーザー X (12 + 1 - 7) の場合は 6 をエコーします
質問:
私が知りたかったのは、履歴テーブルが非常に巨大な場合、これ (すべての履歴の SELECT SUM を使用してユーザーのクレジットを表示するINSTEADの代わりに、ユーザーの合計クレジット用に別のテーブルを作成すること) が問題になるのではないかということです。(数年後に +100,000,000 レコードとしましょう)
これは、ほとんどのプロのプログラマーが行うことですか? (そうでない場合、それは何ですか)
履歴セクションについてはどうですか。ユーザーがクレジット履歴を確認したい場合は、* SELECT * するか、しない場合にLIMIT 100レコードのように制限する必要があります (パフォーマンスのため)。
これは、ページが更新されるたびに、またはページが変更されるたびに実行されることになっていますか? (1000 人のユーザーがオンラインで、この SELECT クエリが更新のたびに適用される場合、サーバーの速度は低下しません)
EDIT回答後:
しかし、合計を別のテーブルに保持して自動的に更新する必要がある場合、2 つの問題があります。
ユーザーがいくつかのクレジットを受け取ったときに正確にそれを行うと、ユーザーが2つの異なるクレジットをまったく同時に受け取った可能性はありません(可能です)。レコードが 1 つある場合) クレジットが 1 つなくなる可能性があります。または、この問題の解決策がある場合、私はそれを認識していません。
Cron ジョブを頻繁に実行するように設定した場合、cron ジョブが合計テーブルを更新するまで、ユーザー クレジットは最新ではありません。