【问题标题】:How to efficiently cache mysql query in php for this table如何在 php 中为此表有效地缓存 mysql 查询
【发布时间】:2011-11-22 22:53:18
【问题描述】:

我有一个Posts 表,其中包含titlecontentsratingno_of_commentsauthor_id 字段。当用户对帖子投反对票时,评分字段会减少,反之亦然。

我还在缓存显示查询,它显示最近的帖子,它与表 Authors 相关。问题是评级字段需要经常更新,即有很多赞成票和反对票。因此,每次用户上/下帖子时,我都需要重建缓存。我认为这是一种浪费,因为整个缓存数据中只有一个字段被更新。所以我想知道这个问题是否有任何解决方法。顺便说一句,我正在使用基于文件的缓存。

【问题讨论】:

  • 如果你规范了你的数据结构,你将能够缓存静态部分 - 即“帖子”,有“帖子属性”或任何你决定使用的东西,是动态的。

标签: php mysql html css cakephp


【解决方案1】:

好的。因此,您的解决方案是向执行以下操作的 PHP 打开 ajax 请求:

未经测试

while (array_pop(mysql_fetch_array(mysql_query("SELECT count(*) FROM `posts` WHERE `ID` = '$latest_id_prediction'"))) == 0) { 
    sleep(10);
}
echo array_pop(mysql_fetch_array(mysql_query("SELECT * FROM `posts` WHERE `ID` = '$latest_id_prediction'");

这将每 10 秒检查一次是否有新帖子,如果有,它将回显帖子信息。您所做的是在没有超时的情况下向该页面发出 ajax 请求,并在收到回复时更新该页面。收到回复后,打开一个新连接。

【讨论】:

  • 那么,我需要将查询拆分为多个查询吗?但是php重建结构(即为每个帖子找到正确的评分)会不会更难,因此需要额外的处理。
  • 没有。现在忘记评分,抓住其他一切并建立页面。现在,您可以通过仅从表中选择 rating 来获取评级并动态计算。
  • 哦等等。我在首页显示帖子列表,我需要评分和帖子。
  • 那你需要缓存什么?如果评分正在更新,您想在不重新加载的情况下更新页面吗?
  • 你在技术上是正确的,但我缓存了最近的帖子,即不是从数据库中获取最近的帖子(使用 select 命令,这很耗时),而是从缓存。我只在提交新帖子时更新缓存。
【解决方案2】:

如果您标准化您的数据结构,您将能够缓存静态部分 - 即“帖子”,具有“帖子属性”或您决定使用的任何内容,是动态的。

应通过计算“评论”表中的 cmets 数量得出 cmets 数量。

一个可靠的数据结构将在这里帮助你很多。

【讨论】:

  • 我不太明白(似乎很多)。你能把它翻译成我的案子吗?
猜你喜欢
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2012-08-27
  • 2015-10-21
  • 2013-03-25
相关资源
最近更新 更多