【问题标题】:"Weekly Top 10" Database Design Issue [closed]“每周前 10 名”数据库设计问题 [关闭]
【发布时间】:2012-04-12 03:27:22
【问题描述】:

我正在开发一个视频网站。就交通而言,这是相当沉重的。我正在尝试按观看视频的次数对视频进行排名。 IE。视频 A 获得 5200 次观看,B 获得 5000 次观看,因此 A 排名高于 B。但我想计算每个视频在一周(或一个月,如果需要)内获得的观看次数,然后按观看次数对其进行排名。

我首先创建了一个只包含视图的表。即每次观看视频时,都会在表格中插入一行以及时间戳和视频 ID。那是一个可怕的决定。由于流量很大,表变得很大,影响性能。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: php mysql database database-schema


    【解决方案1】:

    我会让表格存储特定视频的总观看次数与周数。只需根据需要创建/增加。

    即有字段 video_id、week_number 和 total_views。

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

    还有一个cron 作业来删除旧数据(或存档)。这应该使表格大小易于管理。

    【讨论】:

    • 统计数据总结。
    • 谢谢!这是一个更好的方法。不影响性能。非常可扩展。但我想知道我将如何设置一个 cronjob。有什么帮助吗?
    • 如果您使用 *nix,请执行 man crontab。它将解释。如果使用 Windows,则使用控制面板并查找调度程序
    【解决方案2】:

    要搭载@Ed Heal 的回答,总结绝对是您要寻找的。但是,设计一个根据一年中的一天或一周递增的表格会在间隔翻转时导致问题。就像在区间开始时,每个人都从 0 开始。如果你恰好在区间的开始,事情看起来……很奇怪。

    我发现保留这些统计信息的最有效方法是使用跟踪期。 (即一周内,您计算视频在过去 7 天内获得的观看次数。)这显示了您网站上内容趋势的非常准确的图片。为此,您需要定期运行一个 cron 作业,该作业将计算每个视频在所需的尾随期间的统计信息。存储摘要,然后对它们进行排序。

    【讨论】:

    • 你是对的。一开始,前 10 项的图表看起来很奇怪。但实际上我要为前一周制作一张图表。但是感谢您的帮助! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2018-05-02
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多