在大型交通网站上生成记分板

时间:2010-06-21 13:21:08

标签: php usability

有点奇怪的问题,但我希望有人可以指出我正确的方向。基本上我有两种情况,我想知道哪种情况最适合我的情况(用户在高流量网站上查看记分牌)。

  1. 每次用户点击页面时都会重新生成前10位 - 增加服务器的负载,特别是在高流量时,用户会尽快看到他/她的正确位置。
  2. 前10个以设定的间隔再生,例如每10分钟一次。 - 只生成一组结果,每10分钟导致一次尖峰,而不是每x秒一次,如果用户在刷新之间点击,他们将看不到他们的更新分数。
  3. 每个人都有它的优点和缺点,根据你的经验最好使用哪一个或者有什么神奇的选择?

    编辑 - 更新后,在接受了所有人的说法之后,我决定重建这部分应用程序。而不是处理我正在处理总数的各个分数,然后将其保存到一个单独的表中,这类似于缓存的数据源。

    谢谢大家的好意见。

4 个答案:

答案 0 :(得分:1)

根据Marcel的回答,我建议只在写入事件(如新分数或删除分数)时更新记分板。通过这种方式,您可以为热门查询(如Top 10等)保留静态答案。使用MemCache之类的东西来保持数据缓存以获取请求,或者如果您不能/无法在服务器上安装MemCache之类的序列化常见请求并写入它们是平面文件,然后在写入事件时删除/更新它们。让代码首先查找缓存的结果(或文件),然后如果缺少它,请执行查询并创建数据

答案 1 :(得分:0)

当涉及到网络时,什么都不需要实时。我会选择2用户不会注意到得分没有变化。每次缓存清除时,您都可以使用一些JS刷新前10个

答案 2 :(得分:0)

添加到Jordan的建议:我将记分卡放在一个单独的(HTML格式)文件中,每次新数据到达时都会生成该文件。您可以在包含记分卡的PHP页面中包含此文件,甚至可以让访问者的浏览器使用XMLHttpRequests定期获取它(以节省带宽)。禁用JavaScript或使用不支持XMLHttpRequests的浏览器的用户(现在很少见,但可能)只会看到一个静态页面。

答案 3 :(得分:0)

Drupal投票模块将为您处理此问题,为您提供何时重新计算的选项。如果您自己实现它,那么在某处缓存前10位是个好主意 - 您可以定期重新生成它,也可以在某些点上使缓存无效。您需要查看人们投票的频率,导致前10名变更的频率,排名前10页的频率以及重新生成所涉及的性能影响。

如果您没有设置Drupal / MySQL,那么CouchDB在这里会很有用。您可以创建一个计算前10个数据的视图,它将被缓存,直到发生某些事情导致重新计算是必要的。您还可以内置一个http缓存代理,以便将结果缓存一段时间。