需求大概是这样的,对用户看过的视频不在展示, 现在通过 mysql wherenotin 处理的,但是这种是存在上限的。 想知道一个比较务实的技术实现。
1
awanganddong OP |
2
awanganddong OP |
3
dqzcwxb 2022-11-30 19:34:25 +08:00
redis zset 就够了,5000 万日活的方案不会让你来做的
|
![]() |
4
sujin190 2022-12-01 13:52:36 +08:00
bitmap 应该是数据量计算量都比较少的了吧,如果视频量比较多用户看的少,那么把 bitmap 分区就是了呗,整区都没看过就不需要保存,redis 就有 bitmap 支持,或者保存在数据库也行啊,分区后用视频 ID 直接就可以计算分区号,然后用区块号读取整个区块很快就判断完了,如果是信息流这种用户看过的和即将看的都是最近的,那么读取数据量还是很小的
|
5
awanganddong OP |
6
awanganddong OP |
![]() |
7
sunshinev 20 天前
每个用户维护一个 bloom 过滤器,100000 条去重,误判率 0.01%,每个用户的过滤器 bitmap 差不多 10k ,每天推荐 1000 条,过滤器就是能用 100 天,其实每次推荐的时候,从 db 里取最新 3 天的数据推荐就行,过滤器每隔一个月重置一次;
问题就是重置的时候,可能会有重复推荐 3 天内的数据的情况出现;🤔 反正不建议使用 db 进行推荐,每个用户频繁刷新接口,对 db 的压力还是很大,搞 redis 就挺好; |