|
|
1
2
你不必(像这样)保留每一个视图的日期。您可以在一个包含列的表中最多保留366行:product_id,day_of_year,count。每天运行一个任务,将一年前的所有计数归零。如果您不介意非规范化的数据,那么该任务还可以更新项目本身中的“计数”字段,以便快速检索,这样您的查询就不需要更改。
另一种方案可能是使用指数衰减。将“计数”字段转换为十进制类型。每天一次,将每个项目的计数减少一个固定的百分比(小于1%,大于0.1%),这样,最近一次命中的次数越多,它的“重量”就越大。所以老的人气永远不会完全消失,但一年前的热门歌曲不会有太大贡献。顺便说一句,这个方案的一个等价物就是让代码保持原样,但要确保你的网站作为一个整体随着时间的推移变得指数级的流行;-) 至于避免从零开始-可以立即减少每个项目的计数,作为一次性操作,根据项目的年龄比例。总的来说,你会期望较旧的对象有较旧的视图,因此被当前方案高估。这不是一个很好的证明,因为也许一些旧的物品最近获得了很多点击率。您可以通过查看最近的Web服务器日志来识别这些项目,或者在进行一次性缩减之前花一周或一个月的时间来计算点击量。即使不这样做,如果他们的受欢迎程度有一个根本的原因(不仅仅是因为他们目前在你的排名中排名很高,因此从查看你的“最受欢迎”图表的人那里接收流量),那么他们希望在给定的时间内恢复。 |
|
|
2
1
你可能想退房 this blog post . 它的目标是应用程序引擎,但这项技术是通用的。最基本的方法是让人气指数级下降,并且在记录投票/下载/任何东西时都会增加。 |