MySQL-关于“关注此商品的用户还关注了”功能

MySQL-关于“关注此商品的用户还关注了”功能

清晨说ぺ晚安 发布于 2017-09-28 字数 138 浏览 1277 回复 6

像京东等购物网站上一般都“关注此商品的用户还关注了”的功能,请问这样的功能从数据库设计还有SQL方面,如果能够做到性能最快?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

晚风撩人 2017-11-08 6 楼

首先我说一下,简单的记录下log是不可以的,
如果这样做还不如从相同的分类中查找几个成交量最多的几个商品呢。
如果真得想让这个功能有存在的价值,是有点难度的。我现在想到的有两种方案:

场景:
关注了此商品的用户有 1000 人,共关注了其他商品 700 个。那么该给当前关注这个商品的用户推荐关注哪些 商品呢?

1、通过700商品去掉重复,统计这里边收藏量最多的几个商品,把这些商品推荐给用户关注,这个是基于统计的,数据量较大,一天统计一次就可以了。做个专门用于推荐的表存放,每天更新一次,就行了。
2、基于用户相似度,推荐 相似度最高的几个用户关注的商品,这样被推荐者有更高的关注可能行,但是具体操作的话,需要从这一千人当中找到与当前用户相似度最高的几名用户,显然计算量也太大了,需要先解决这种效率问题,才能用这样的方法。
虽然复杂,但是这个功能具体了存在的价值。

虐人心 2017-10-27 5 楼

像这种业务可以不用做到那么实时,定时(每隔4小时或者更长)把相关的数据重新生成一次,然后放入缓存中,页面直接从缓存中取即可,而不用每次都从关联表中统计数据,大大加快了访问速度。

清晨说ぺ晚安 2017-10-26 4 楼

我觉得设计一张用户浏览商品日志表即可,然后在后台定期缓存那些经常被浏览商品的用户曾经看过其他商品的列表(可以每天生成两次,根据你的具体情况而定),这样可以减轻前台的压力,那些不常被浏览的商品你可以选择在后台生成也可以在前台生成,但频率要低一些。

虐人心 2017-10-21 3 楼

建一个访问商品表:用户id、商品id、访问时间即可。随便把sql给你写出来:

select shoping_id ,count(*) as num  from 
    (select * from visitShopLog where user_id in (select user_id from visitShopLog where shoping_id='php')) 
    --以商品ID分组 
    group by shoping_id 
    --访问次数降序排列 
    order by num desc

当记录量多的时候,你可要优化一下数据库,做定期缓存,不一定做到实时,可以cron每隔几段时间进行统计。

想挽留 2017-10-13 2 楼

这个功能我以前是这样做的,后端的数据库还是一个用户表和商品表:

1、首先根据当前的产品ID,查询出查看过此商品的用户ID列表。
2、根据这此用户ID再查询它们曾经查看过的商品。
3、对查询出来的结果集进行缓存。

泛泛之交 2017-10-03 1 楼

就像上面几位说的,
其实数据库的设计可圈可点,
个人认为主要是每个商品对应被关注的统计存储的问题很是关键,
在没必要即时性很高的情况下,
我们可以选择性的触发来将数据缓存到nosql机制中,
比如:
一个商品被关注的的次数达到5次就更新一次,
或者通过时间间隔更新,
或者通过cron定时更新,
这个主要看你的需求侧重点,

如果想到到你最后一句话:能够做到性能最快?

达到这个效果,让用户快速获取的途径就是良好的mysql的持久存储结合redis或者memcache这样的内存服务器来支撑数据快速被读出,
希望我的建议对你有帮助