有点奇怪的问题,但我希望有人可以指出我正确的方向。基本上我有两种情况,我想知道哪种情况最适合我的情况(用户在高流量网站上查看记分牌)。
每个人都有它的优点和缺点,根据你的经验最好使用哪一个或者有什么神奇的选择?
编辑 - 更新后,在接受了所有人的说法之后,我决定重建这部分应用程序。而不是处理我正在处理总数的各个分数,然后将其保存到一个单独的表中,这类似于缓存的数据源。
谢谢大家的好意见。
答案 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缓存代理,以便将结果缓存一段时间。