创建“查看此内容的用户也可以查看”列表

时间:2011-05-19 23:10:01

标签: php mysql database database-design codeigniter

我正在考虑在亚马逊,yelp和其他在线网站上创建一个“查看此内容的用户”列表。现在我正在考虑使用'product_id','last_viewed_product_id','hits'创建一个新表,当用户从product_id = 100的页面转到product_id = 101时,它将使用product_id =创建/更新此表101,last_viewed_product_id = 100,并递增'命中'值。是否有更好的方法更优化,计算密集度更低?

4 个答案:

答案 0 :(得分:4)

看来你正走在正确的道路上 - 一些建议 -

对于计算密集型 - 您可能希望缓存结果,因此您只会给出一个顶级'x'数字,该数字每天更新一次或类似于该效果。在这种情况下,实时似乎并不重要。

我不确定您的网站上有哪些产品,但如果品种很重要,您可能只想放置有相关信息的项目(因此星球大战只会有星球大战相关项目弹出)。

因此,如果您的产品或关键字包含“代码”,则可能需要使用与之关系。

您可能还想要了解他们如何进入产品。如果他们通过点击您提供的列表来访问产品,那么这些类型的项目将继续填充,并且不会让其他产品有机会出现,所以给它一个低权重。会弹出较重的物品。

答案 1 :(得分:4)

最好我知道,亚马逊用来减少计算密集度的“伎俩”是:a)使用贝叶斯统计/平均值和b)计算部分聚合。后者允许您不需要计算所有内容(您可以改为对预先计算的聚合进行求和)。前者允许您注入您推断的相关材料。

答案 2 :(得分:2)

如果您拥有所有访问者的用户ID(您可以为未注册的用户创建临时用户ID),则可以创建包含user_id和product_id列的历史记录表,其中存储了用户访问过的所有产品。然后,当用户打开产品时,执行查询以搜索最近查看过该产品的user_ids,然后将其加入这些用户已打开的产品中。然后,只需对那些user_ids打开最多的产品进行排序。

确保缓存此项,因为连接会降低任何SQL服务器的速度。

答案 3 :(得分:1)

我非常确定亚马逊会使用Association Rules

开创性论文:

http://dl.acm.org/citation.cfm?id=170072

快速算法(FP-Growth):

http://link.springer.com/chapter/10.1007/3-540-47887-6_34#page-1

没有看过PHP库,但有Java,Python。