我运行一个包含大量数据的Symfony 1.4项目。主页面和类别页面使用寻呼机,需要知道可用的行数。我正在传递一个查询,其中包含到寻呼机的连接,导致这些页面上的加载时间为1分钟。
我为各个操作配置了cache.yml。但我认为解决方法是不够的,这是我的假设:
Symfony在用户进行的单个请求中重建缓存。让我们称这个用户为“缓存受害者”来简化事情。
在我们的案例中,数据需要更新 - 10分钟的生命周期就足够了。显然,如果没有用户愿意成为“缓存受害者”并且因此只是取消请求,则不会重建缓存。这些假设是否正确?
所以,我提出了这个想法: Symfony应该在重建缓存后伪造http请求。新缓存条目应写在临时文件/目录中,并且一旦缓存重建完成,就应与先前的缓存条目交换。
这可能吗?
在我看来,这类似于双缓冲的概念。
如果多人游戏中有一个“gpu-victim”看到屏幕逐行建立,那不是很愚蠢吗? (这是一个不平衡的比较,我知道......;))
修改
没有“缓存受害者” - 每10分钟页面重新加载每个用户需要1分钟。
答案 0 :(得分:0)
我认为您的问题是由于某些索引缺失或错误造成的。我有一个大型足球网站的sf1.4项目(即2M页/天),即使我们的数据库目前有超过1M行,寻呼机也不会那么慢。使用EXPLAIN查看您的查询并检查它在哪里变坏...
答案 1 :(得分:0)
对不起有问题(有徽章吗?)。 通过配置cache.yml,您只需缓存应用程序的视图层(即css,js和html)以获取没有参数的REQUESTS。浏览寻呼机显然在GET请求上有一个?page = X.
取自symfony 1.4 config.yml文档:
无论配置如何,symfony都不会缓存查询字符串中带有GET参数或使用POST,PUT或DELETE方法提交的传入请求。 http://www.symfony-project.org/reference/1_4/en/09-Cache
可能对您有所帮助的是缓存数据库结果,但这对symfony / doctrine来说是一个痛苦的过程。参考: http://www.symfony-project.org/more-with-symfony/1_4/en/08-Advanced-Doctrine-Usage#chapter_08_using_doctrine_result_caching
编辑: 这也可能对你有所帮助: http://www.zalas.eu/symfony-meets-apc-alternative-php-cache