利用布隆过滤器设计亿级用户视频浏览历史过滤系统:方案详解与内存预估
在短视频推荐系统中,如何高效过滤用户已看过的视频,避免重复推荐,是提升用户体验和系统性能的关键难题。本文以一个虚构的大小视频推荐APP为示例,APP规模为:1亿日活跃用户(DAU)和千万级视频池为例,结合布隆过滤器(Bloom Filter)技术,详细介绍一种可行的分层过滤与稀疏存储方案,涵盖方案实现、使用流程及内存预估,帮助读者快速理解并应用于实际系统。
一、布隆过滤器简介
布隆过滤器是一种基于位数组和多个哈希函数的概率型数据结构,用于判断某元素是否存在于一个集合中。它具有:
- 高空间效率:比传统哈希结构节省内存数十倍。
- 查询速度快:时间复杂度为O(k),k为哈希函数个数。
- 误判率可控:存在假阳性(误判存在),但无假阴性(漏判)。
- 不支持删除:标准布隆过滤器无法删除元素。
布隆过滤器广泛应用于缓存穿透防护、去重、推荐系统等场景。
二、系统规模与挑战
| 指标 | 数值 |
|---|---|
| 用户规模 | 1亿日活跃用户(DAU) |
| 视频池规模 | 1000万视频 |
| 用户平均浏览量 | 约1000个视频/用户 |
| 误判率 | 0.1%(0.001) |
挑战:
- 每个用户维护完整浏览历史布隆过滤器,存储压力极大(数十TB甚至PB级,本例中需要约180T)。【具体分析过程参见附录1】
- 需要快速判断用户是否看过某视频,避免重复推荐。
- 保证系统高并发下的查询和更新效率。
对于每个用户都维护一个布隆过滤器的方案,对系统的存储需要和压力过大,常用的优化方案主要有以下三种:分时间窗口分片、分层过滤和稀疏存储,具体介绍如下:
1. 分时间窗口分片(Time-Window Sharding)
核心思想
将用户的浏览记录按时间划分为多个时间窗口(如天、周、月),为每个时间窗口单独维护一个布隆过滤器。过了时间窗口后,旧的布隆过滤器可以过期删除或归档,避免历史数据无限增长。
1.1 按时间窗口划分布隆过滤器
- 将用户浏览历史按固定时间粒度(如天、周、月)切分,每个时间窗口对应一个独立的布隆过滤器。
- 例如,用户2025年7月1日的浏览记录存储在
user_bf:<user_id>:20250701,7月2日的存储在user_bf:<user_id>:20250702。
1.2 维护机制
- 写入时

最低0.47元/天 解锁文章

2211

被折叠的 条评论
为什么被折叠?



