我一直在试图找到一种处理这种排名系统的好方法。作为一个粗略的例子,我想查询一个facebook页面并抓住每个帖子的喜欢和评论。然后,基于时间间隔将有三个排名。举一个简化的例子:
Hourly
- I pull all the posts updated within the last hour, and compare the # of likes/comments compared to my previous entry (the last pull being an hour prior).
Daily
- I pull down all posts within a 24 hours date range. I compare the # of likes/comments compared to the previous entry. "Post X had 12 more likes and 40 more comments today compared to yesterday"
Weekly
- I pull down all posts within a week's range and do the same as above. "Post X had no new likes, but 10 more comments added this week compared to last week"
就数据库表而言,处理这个问题的好方法是什么?有一个巨大的表与帖子(标题,comments_previous,comments_current,likes_previous,likes_current等)是否有意义?
谢谢!
答案 0 :(得分:1)
列:( PK)时间戳,(索引)pageid,count。对于喜欢的页面,每小时设置一个新的时间戳。时间戳是PK,因此您不会从数据库中的聚簇索引/页面布局中获得可怕的碎片。
如果您觉得出于性能原因需要进行反规范化,则可以制作额外的每日和每月汇总表。可能,通过使用time / pageid组合的where子句,您将能够在没有汇总表的情况下高效地生成所需内容,从而只需一个表即可为您提供所需的内容。
根据需要清除旧数据,或保留旧数据。
当评论收到类似内容时,请执行以下操作:
insert into likeRanking (concat(select left(now(),13), '00:00'), commentid, 1)
on duplicate key update score = score + 1;
答案 1 :(得分:-1)
我会这样做:
创建一个现在可以获得时间的表格,立即评论,现在就喜欢。
然后在一小时的时间之后,创建另一个现在获得时间的表,立即评论并现在喜欢,然后将其减去先前创建的表。然后删除另一个表并插入新表的新值。然后一小时后,创建另一个表。
与月度和年度相同。
如果您还有其他需要,请告诉我。