在文章索引中计算文章评论,点击和喜欢的正确方法是什么?

时间:2010-12-11 14:18:57

标签: php sql mysql performance

我有三个表,一个用于文章,一个用于评论,一个用于评论,一个用于访问,在此示例模式中

**news**
  news_id

**comments**
  comment_id
  news_id

**likes**
  like_id
  news_id

**hits**
  hit_id
  news_id

我想要做的是在每个文章的box / div中收听可排序索引中的所有文章,其中包含点击次数,评论和喜欢的文章数量,我知道如何做到这一切,所以这不是怎么回事我正在寻找,这是最好的方式,我正在考虑这两种解决方案。

  1. 以正常方式执行,复杂的SQL查询然后缓存查询,比方说一两个小时。

  2. 编写一个每两到三个小时执行一次的脚本来计算数据并将其存储在“news_hits,news_likes,news_comments”数字字段的同一个新闻表中。

  3. 当然第三种方法是每次加载页面时都进行查询而不进行任何缓存。

    我觉得这是我追求的第一种方法,但我想要一个专业或经验丰富的意见,我不期待大量的访客,每天最多500-1000,但我还是想做好准备为了高流量。

    谢谢,

    拉​​米

3 个答案:

答案 0 :(得分:4)

最好在这种情况下承认冗余,以提高速度。在新闻表中,添加以下字段:

comments_count int not null default 0,
likes_count int not null default 0,
hits_count int not null default 0

当添加/删除注释/ like / hit时,如果数据库支持触发器,则触发引用计数器的递增/递减,如果不支持 - 在每次插入/删除时手动执行(存储过程可能?)。

这类数据通常是读取而不是写入,因此为了优化读取速度,降低写入速度和存储空间并不是什么大问题。

如果由于某种原因导致错误,可以运行一个更新这些计数器的查询。

答案 1 :(得分:2)

将复杂的SQL分解为几个较小的查询(不太复杂)并缓存单个结果,因此在任何时候你想要准备预热缓存,它不会占用太多的数据库资源

答案 2 :(得分:0)

使用这样一个简单的模型,查询和访问量较少的我会直接查询。它将通过适当的索引执行得很好(毫秒)。

如果我正确理解了场景,那么查询应该根据新闻文章的受欢迎程度对新闻文章进行排序,这在某种程度上由喜欢/点击/评论的nr确定。

如果您已经着手解决性能问题,可能实际上没有遇到,最简单的“解决方案”是使用每10秒到期的查询缓存。使用当前负载,每个访问者基本上总是从数据库呈现视图,因为缓存在页面访问之间到期。如果有一天你突然被200,000名访客淹没,你只会每10秒执行一次查询。