mysql - "Most Viewed"特征数据库的实现

标签 mysql sql database youtube

我想知道如何在我的数据库中最好地实现“观看次数最多”特色(如 youtube)。

让我更好地解释一下“观看次数最多”功能: 基本上我想列出这一天/这周/这月访问次数最多的页面/视频/等,请参阅 http://www.youtube.com/charts/videos_views举个例子。

所以我想知道如何最好地实现此功能,因为我可以想到很多方法,但它们都有自己的 + 和 - 给他们。

另外,我也很想听听各种程序员对其他程序员想法的评论。另外,我想就这个话题展开一场愉快的对话。

附言。我正在特别关注如何计算时间,比如本月查看最多的时间,而无需使用一个巨大的表格来保存每个带有日期时间的 View 。欢迎任何想法。
附言。我使用 Mysql 和 PHP,非常欢迎为这两者提供额外提示。

最佳答案

有以下表格: 1.意见 2. views_hourly_summary 3.views_daily_summary 4.views_monthly_summary 5.views_alltime_summary

按以下时间间隔运行 cron 作业:

  1. 每小时运行一次,从 View 表中预聚合该小时的 View ,并将预聚合结果保存在 views_hourly_summary 表中,同时更新 views_alltime_summary 表

  2. 在每天结束时运行并从小时表中预聚合当天的 View 并将预聚合结果保存在 views_daily_summary 表中

  3. 在每个月末运行,从小时表中预聚合当天的 View ,并将预聚合结果保存在 views_daily_summary 表中

接下来,在获取结果时,您必须按如下方式进行一些数学运算:

  1. 例如,您想要获取最近 4 小时的 View ,您可以从小时表中获取整整 3 小时的数据,而对于剩余数据,则从 View 表中获取,如下所示:

    选择 item_id, sum(views) 作为 View 来自 views_hourly_summary 其中 concat(left(now() - interval 3 hour, 14), '00:00') 和 concat(left(now(), 14), '00:00') 之间的小时数 按 item_id 分组

    联盟

    选择 item_id, count(1) 作为浏览量 从意见 其中日期时间介于 (now() - 间隔 4 小时) 和 concat(left(now() - 间隔 3 小时, 14), '00:00') 或 datetime > concat(left(now(), 14), '00:00') 按 item_id 分组

关于mysql - "Most Viewed"特征数据库的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616846/

相关文章:

php - 每个卖家的邮政编码过滤器 - mysql

以英里计算的 SQL Server 几何距离?

php - 上传到mysql服务器不工作

php - WordPress自定义登录数据库错误

mysql - 将表与设置的数据连接起来

database - 如何从 unix 连接到 oracle 数据库

mysql - SQL查询及查询时使用字母 'a'

mysql - 使用 MySQL 作为数据源时 Google Data Studio 出错

mysql - SQL语法错误号1064

php - 有没有更好的方法来编写这个 MySQL 查询?