解释:
- 我有一个脚本,它显示每个用户的总积分(声誉),它在数据库中有一个历史表,用于记录所有用户获得的积分
这是我的历史数据库表的示例:
+----------------------------------------------+
| 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
问题:
我想知道,如果历史记录表如此庞大,这(选择所有历史记录的总和以显示用户信用INSTEAD有一个不同的用户总信用记录表)是否会产生问题?(假设几年后+100,000,000 条记录)
这是大多数专业程序员所做的吗?(如果不是,是什么)
那么历史部分呢,如果用户想要查看信用历史,我们应该在 * SELECT * 或否时使用LIMIT 100条记录来限制它(为了性能)
这应该在每次页面刷新或每次页面更改时运行吗?(如果有 1000 个用户在线并且每次刷新都应用此 SELECT 查询,它不会减慢服务器速度)
编辑回答后:
但是,如果我们必须将总计保存在不同的表中并自动更新它们,则会出现两个问题:
如果我们恰好在用户收到一些积分时这样做,那么用户是否有可能同时收到两个不同的积分(这是可能的),并且我们不能将自动增量放入 Totals 表中(因为每个用户只有 1 条记录)我们可能会错过 1 个学分,或者如果有解决此问题的方法,我不知道
如果我们将 Cron-Job 设置为频繁执行,那么在 cron 作业刷新总计表之前,用户积分不会是最新的