做短视频小程序 如何做到推荐非重复的视频给用户

1.有个视频表
2.用户观看视频记录日志表
3.每次推送时从视频表查出该用户没有观看记录的视频

如果数据量大的时候查询应该会很慢 要怎么处理 有什么好的方案吗?

阅读 2.7k
2 个回答
t_video : columns(id,path)
t_video_log :columns(id,video_id,member_id)

select v.id,v.path,vl.customer_id from t_video as v left join t_video_log as vl on v.id = vl.video_id 
where vl.customer_id is null limit 1

相比起把完整精确的『看过信息』存在数据库或者缓存里面,其实为了节省空间,完全可以把不完全精确的『看过信息』给存下来,这当中两个路子,一个是Bloom Filter,另一个是HyperLogLog
1.Bloom Filter:
用Redis的话,以{user_id}_{video_id}作为键,算出一组hash值,然后通过setbit命令来存,最后只需要对于{user_id}_{video_id}算出的hash值,通过命令getbit来取,发现都有了就是推送过了。
这种方法有一定误差,但表现力极好,空间占用足够少。
2.HyperLogLog:
Redis提供了HyperLogLog的支持,直接通过PFADD user_id video_id命令来存,然后通过这个命令看返回值为1还是为0,为1就是没存过,为0就是存过了。
这种方法也有一定误差,但表现力和空间占用都巨佳。

更多资料还可以参考,希望能帮助到你:
Redis详解(十三)------ Redis布隆过滤器
Redis基数统计——HyperLogLog小内存大用处

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题