【发布时间】:2010-06-20 23:13:46
【问题描述】:
我正在处理一个繁忙的网站。有时它会获得比平均天数更多的流量。内容已缓存,但由于网站所有者希望查看实时帖子视图,因此每个帖子视图必须至少对 MySQL 进行一次查询,这在高负载下会成为性能问题。
我能想到的就是为视图创建一个不同的表,并使用 cron 作业定期更新原始表。我确信这会减少更新时间,但我不确定这是否是最好的方法。
【问题讨论】:
标签: php mysql caching views real-time
我正在处理一个繁忙的网站。有时它会获得比平均天数更多的流量。内容已缓存,但由于网站所有者希望查看实时帖子视图,因此每个帖子视图必须至少对 MySQL 进行一次查询,这在高负载下会成为性能问题。
我能想到的就是为视图创建一个不同的表,并使用 cron 作业定期更新原始表。我确信这会减少更新时间,但我不确定这是否是最好的方法。
【问题讨论】:
标签: php mysql caching views real-time
嗯,至于你的问题,有三个选项:
不要缓存该特定信息。但从你的描述看来,你好像已经在这样做了,但没有成功。
使用直写缓存。每当您“添加”或“删除”帖子时,也会为该项目生成缓存数据。这可能很难,具体取决于您的缓存系统的工作方式,但这是一种选择。
在写入时使缓存无效。每当要“添加”或“删除”帖子时,请删除这些帖子的缓存数据。这样,在下一次从缓存请求这些缓存时,缓存将被填充。这可能不容易,也可能不容易,因为检测哪些缓存项引用 db 节点可能并非易事(可能需要添加更多信息或元缓存对象以跟踪此数据)。
现在,话虽如此,我觉得一个查询变成了性能问题有点奇怪。更有可能的是,有问题的查询需要优化,或者您的 MySQL 服务器需要优化。我经常在我的一些生产服务器上看到每秒超过 5k 的查询,并且负载没有问题。那是因为这些查询非常高效,我在 MySQL 中打开了Query Caching(它比你想象的更有效)...
【讨论】: