我正在为用户构建一个小应用程序来创建集合。我想在那里有一个评级系统。现在,既然我想覆盖我所有的领域,那就让我假装我有很多访客。性能发挥作用,尤其是费率。
我们假设我有rates
表,我有id
,game_id
,user_id
和rate
。数据很简单,每个用户都有一个条目。让我们再次假设,1000个用户将评价一个游戏。我想打印出该游戏子页面的平均费率(以及其他地方,比如游戏列表)。目前,我有两种情况可供选择:
每次显示游戏时都会AVG
。
在games
中创建另一个名为temprate
的列并存储该游戏的费率。如果有人投票,它会更新。
这两种情况都有明显的缺陷。第一个对我的主人来说压力更大,因为它肯定会消耗更多的机器能量。在评分时获得更多的工作(获取所有游戏数据,提交率,获得新的AVG
)。
请告诉我,我应该选择哪种情况?或许你还有其他一些想法?
我使用PDO而没有框架。
答案 0 :(得分:0)
所以我终于设法解决了这个问题。我使用基于将数组转储到文件中的文件缓存。我只是喜欢if (cache) { $var = cache } else { $var = db }
之类的东西。我现在正在使用JG Cache,但我很快就会给自己写一些类似的东西,但是现在 - 这是一个很好的解决方案。
答案 1 :(得分:0)
我已经使用了“2号”解决方案的变体(更新了单独的评级栏),可能只是为了这个单独的表格。
如果写入次数成为一个问题,那么select avg(foo) from ...
之后就会出现问题,并且有很多方法可以通过定期更新平均评级或者每隔一段时间处理新的评级来缓解它
然后最终你不能只做一个avg(),因为你必须考虑每个投票的欺诈行为,calculating a sort score以及谁知道还有什么。