【问题标题】:Creating a 'People who viewed this also viewed' list创建“查看过此内容的人也查看过”列表
【发布时间】:2011-08-29 06:43:17
【问题描述】:

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

【问题讨论】:

    标签: php mysql database database-design codeigniter


    【解决方案1】:

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

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

    我不确定您的网站上有什么样的产品,但如果种类繁多,您可能只想显示具有相关信息的项目(因此《星球大战》只会有与《星球大战》相关的项目弹出)。

    因此,如果您的产品或关键字有“标签”,您可能希望使用与之相关的关系。

    您可能还想为他们获得产品的方式增加权重。如果他们通过单击您提供的列表获得产品,那么这些类型的项目将继续填充,并且不会让其他产品有机会出现,所以给它一个低权重。会弹出较重的项目。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          我很确定亚马逊为此使用了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的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-29
            • 2013-05-06
            • 2010-12-17
            • 2015-09-16
            相关资源
            最近更新 更多