【发布时间】:2011-09-29 14:22:15
【问题描述】:
我运行一个包含大量数据的 Symfony 1.4 项目。主页和类别页面正在使用需要知道有多少行可用的寻呼机。我正在传递一个包含与寻呼机连接的查询,这导致这些页面的加载时间为 1 分钟。
我为相应的操作配置了 cache.yml。但我认为解决方法是不够的,这是我的假设:
Symfony 在用户发出的单个请求中重建缓存。让我们称这个用户为“缓存受害者”以简化事情。
在我们的例子中,数据需要不断更新 - 10 分钟的生命周期就足够了。显然,如果没有用户愿意成为“缓存受害者”并因此取消请求,则不会重建缓存。这些假设是否正确?
所以,我想出了这个主意: Symfony 应该在重建缓存后伪造 http-request。新的缓存条目应写入临时文件/目录,并在缓存重建完成后与之前的缓存条目交换。
这可能吗?
在我看来,这类似于双缓冲的概念。
如果多人游戏中只有一个“gpu 受害者”看到屏幕逐行堆积,这不是很傻吗? (这是一个不平衡的比较,我知道...... ;))
编辑
没有“缓存受害者” - 每个用户每 10 分钟重新加载一次页面需要 1 分钟。
【问题讨论】:
-
坦率地说,我首先要研究为什么为寻呼机计算行数(如果我理解正确的话?)需要 1 分钟才能完成。无论哪种方式,要解决的明显问题是陈旧缓存的加载时间。其次,用户取消请求通常不会阻止网络服务器完成请求的运行(除非它超时或达到另一个限制)。
-
好的,那么“处理请求”将被取消。由于大量数据和连接,需要 1 分钟。寻呼机查询本身非常简单。寻呼机需要知道条目数,因为它会计算有多少页可用。
-
我建议你应该先解决这个问题,我看不出为什么填充寻呼机需要这么长时间的合理解释。我相信您可以对其进行优化,但在不了解具体细节的情况下无法进一步评论。
-
这不是正常行为,symfony 中的标准分页器类会根据您设置的页面大小添加限制,并对整个表执行额外的 COUNT() 查询。这两个查询都不应该花费 45 秒。您可能需要粘贴寻呼机的代码。
-
@Gerry 让我们continue this discussion in chat
标签: performance caching optimization symfony1 doctrine