“每周十大”数据库设计问题

时间:2012-04-12 03:27:22

标签: php mysql database database-schema

我正在制作视频网站。就交通而言,它非常重。我试图按照观看视频的次数对视频进行排名。即视频A获得5.2K视图,B获得5k视图,因此A排名高于B.但我想计算每个视频在一周(或一个月,如果需要)获得的视图,然后按视图计数对它们进行排名。

我首先创建了一个仅包含视图的表。即,每次观看视频时,将行与时间戳和视频id一起插入表中。这是一个可怕的决定。由于交通繁忙,桌子变得庞大,影响了性能。有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

我希望该表存储特定视频的总视图数与周数。只需根据需要创建/增加。

即。有字段video_id,week_number和total_views。

有一个好的索引(即在week_number,total_views上),以便前十个很容易提取。

还有一个cron作业来删除旧数据(或将其存档)。这应该保持表格大小可管理。

答案 1 :(得分:1)

关于@Ed Heal的答案,总结肯定是你正在寻找的。但是,设计一个相对于一年中的一天或一周递增的表会在间隔结束时导致问题。因为,在间隔开始时,每个人都从0开始。如果你碰巧在你的间隔的开始,事情看起来......奇怪。

我发现保留这些统计信息的最有效方法是使用尾随期。 (即,在一周内,您会计算过去七天内视频的观看次数。)这样可以准确了解您网站上的内容趋势。为此,您需要定期运行一个cron作业,以计算所需尾随时段中每个视频的统计数据。存储摘要,并对这些摘要进行排序。