我想知道如何在我的数据库中最好地实现“观看次数最多”特色(如 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 作业:
每小时运行一次,从 View 表中预聚合该小时的 View ,并将预聚合结果保存在 views_hourly_summary 表中,同时更新 views_alltime_summary 表
在每天结束时运行并从小时表中预聚合当天的 View 并将预聚合结果保存在 views_daily_summary 表中
在每个月末运行,从小时表中预聚合当天的 View ,并将预聚合结果保存在 views_daily_summary 表中
接下来,在获取结果时,您必须按如下方式进行一些数学运算:
例如,您想要获取最近 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/