用户历史浏览方案设计复盘

本文探讨了两种存储用户3个月浏览记录的方案:MongoDB分表与Redis+Mongodb结合。方案二通过Redis缓存和MongoDB长期存储降低查询压力,适合大规模用户数据。最终作者选择方案二,并可能考虑两者结合以提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

用户浏览资料后,保存用户3个月的浏览记录

方案一

数据库:
mongodb分表存储

分表规则:
分表规则根据用户id

存储结构:
浏览一次资料记录一条

主键ID用户ID资料ID浏览时间资料是否有效

查询方式:
根据用户ID,走分表规则找到对应表,查询所有资料ID

定时器:(Day|Month)
所有分表扫描浏览时间在3个月外的记录进行删除

分析:
简单,以记录维度存储在大量用户频繁浏览时,数据库压力巨大

方案二

数据库:
redis存储(Day)、mongodb单表存储(Three Months)

redis存储结构:
1)维护用户浏览资料

  • key:用户ID
  • value:List<资料>

2)维护当天的浏览用户

  • key: 自定义
  • value:list<用户ID>

mongo存储结构:

主键ID用户IDList<资料>浏览时间(天)
资料ID浏览日期是否删除

查询方式:
取redis数据拼接mongo中数据,set去重,返回

定时器:(Day|Month)
所有分表扫描浏览时间在3个月外的记录进行删除

分析:
相对于方案一以用户维度存储,在查询时的压力减小,使用list存储不需要二次排序

单表存储1kw,保留3月90天,平均一天30w左右用户,也可以顶得住,瓶颈在于资料的数量,不过用户3月浏览也是有上限的,我采用了方案二

或许方案一+方案二的redis才是最佳搭配吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值