1

我即将建立一个网上商店,需要提出一个跟踪用户信息的解决方案,并在此基础上建议他们可能喜欢的用户产品,从而建立一个个人用户档案(他们喜欢什么)。

要跟踪/用于算法的信息,我认为应该包括:

  • 过去的订单
  • 愿望清单/书签/收藏夹...
  • 输入的搜索词
  • 查看的产品(这里还跟踪并考虑“丢弃”引用,这意味着用户是否关闭站点/立即返回或查看更多图片/向下滚动(视口)等)

产品被分配到类别以及不同的属性,如颜色、标签等。该表与、等product有关系。colorcategory

产品
id_产品
价格
timestamp_add

颜色
id_color
...

product_color
id_product_color
id_product
id_color

问题是:

1) 您将如何构建一个数据库来跟踪例如查看的产品?应该是这样吗?:

product_viewed
id_product_viewed
id_product
id_user
时间戳

2)如果我想根据用户购买的产品颜色来计算用户最喜欢的3种颜色,放在他们的愿望清单上,加书签,查看:是否可以从性能的角度来计算应该推荐哪些产品每次查询数据库时都会这样做吗?或者您是否不时更新用户配置文件,仅存储基于跟踪数据的当前已计算出的最喜欢的颜色,并使用存储的计算数据来查找与此信息匹配的产品?

facebook、amazon 或 pinterest 等大型网站如何做到这一点?在 pinterest 上,您会根据您之前点击的项目获得您可能喜欢的项目的建议。他们如何处理这个问题?

4

2 回答 2

1

是的,您的 product_viewed 架构是可以的。

至于他们最喜欢的三种颜色,试试这个未经测试的代码:

select c.name, count(*) as rank
from product_viewed pv
JOIN product_color pc on pc.id_product = pv.id_product
JOIN color c on pc.id_color = c.id_color
where pv.id_user = 1
group by c.name
order by rank desc
limit 3

给定用于连接表的 id 上的索引以及对查看项目数量的合理限制,这应该具有不错的性能。以后,您可能只会查看他们最近的 100 种产品等,只是为了防止它永远增长。(或者,正如您所建议的,缓存)。

这没有什么神奇之处,所以它可能类似于其他网站正在做的事情。

于 2012-09-18T23:52:32.300 回答
0

用你刚刚写的表格来做是一个好方法。Facebook 等也在这样做。

但为了提高效率,他们使用所谓的 B 树。

于 2012-09-18T22:55:02.113 回答