世界速递!布隆过滤器在短视频 feeds 系统中的妙用
大家平时刷抖音、视频号、快手时,几乎总能刷到最新的视频。那这里是怎么实现的呢?
上述场景,可以简单抽象为曝光去重,就是用户看过的 feeds1、feeds2、feeds3 ...... 等,如何保证在用户下次进入系统时不会再次出现呢?今天,我们就来探讨下几种实现方案吧。
(资料图片仅供参考)
方案一 :Set
这个方案简单粗暴,就是每个用户用一个集合,存储看过的所有 feedsid。每次推荐系统要出新的 feeds 时,去 set 中 check 一下是否存在,如果存在的话,就过滤掉这条 feeds。
一般来说,像是短视频推荐的场景下,对 feeds 的实时性要求相对较高,一般会使用 Redis 作为曝光打击的载体。
不了解 Redis Set 的同学可以参考下:https://redis.io/commands/set/,简而言之就是一个字典。
这种方案的问题是,在海量用户的场景下,1是成本会很高(像 Redis 是纯内存数据库);2是随着 feeds 数量越来越多,set 查询会随之变慢(像短视频的场景下,1晚上刷个上百条还是不成问题的)。
我们来简单试算一下,假设国民级 App 的日活跃用户在 3kw,每人每天平均刷 200 条视频 feeds,每条 feeds 的 id 长度为 32B。
如果以 Redis Set 的方案来计算:3kw * 200 * 32 * 1.5(Redis 数据结构自身存储) ~ 288G,每天需要消耗存储 288G,1个月呢?8.6T,1年呢?103T。以腾讯云 keewiDB 的持久内存来估计 64元/GB/月,1月成本大约 55w,有钱也不能这么造啊。
那有没有更优惠的实现方案呢?这就要说到本文的主角,布隆过滤器了。
方案二:Bloom Filter
布隆过滤器,本质上是一个高阶 Bitmap,最适合的场景就是海量数据的过滤了。
不了解 Bitmap 的同学可以参考 https://www.cnblogs.com/dragonsuc/p/10993938.html。
布隆过滤器介绍
布隆过滤器的结构如下图示:
简单说下它的使用:
1. 写入:对数据 data 进行 k 次 hash 运算(hash 函数可选择,本文不具体较少),得到结果后,对 bit 数组相应位置置1。
2. 检查:对数据 data 同样进行 k 次 hash 运算,得到结果后,检测 bloom bit 数组中相应位置是否全为1,如全是1,则表示该 data 存在于 bloom 中;否则,表示该数据不在 bloom 中。
结合上述描述,我们可以得出如下结论:
1. bloom 中存的摘要,而不是原始数据 data,所以空间占用远远低于 set 的占用。
2. bloom 无法删除数据,如上图示 x、y 都对 bit 数组中 bits[2] 置1了,如果删除 x,则 bits[2]为0,y判定时,也判定失败了。
3. bloom 无法动态扩展大小,如上图示,bit 数组是固定的,如果 bits 数组长度调整了,那么同样的 x、y hash 后的 bits 索引也会发生变化。
4. bloom 存在误判的可能,例如 x、y hash 后得到的 bits 数组索引都是 1、3、5,那么即使 bloom 中只添加了 x,当 y 来判定时,也会判定为存在。
这里不细究它的推导过程了,感兴趣的同学可以自行研究。
布隆过滤器实现曝光打击
由上述布隆过滤器的特性所知:必须合理选择 bloom 过滤器的规格,bloom bit 数组太小,则误判率过高;bloom bit 数组太大,则过于浪费存储。
还是以相同的条件来试算,
假设国民级 App 的日活跃用户在 3kw,每人每天平均刷 200 条视频 feeds,每条 feeds 的 id 长度为 32B。
如果以 Redis bloom 的方案来计算:400B * 3kw ~ 12G,相比 set 方案的 288G,节约了 96% 的存储成本。1月可以节约 52.8w 成本,降本增效杠杠的。
当设置 bloom 容量为 200 时,每人每天1个key,可以保证当天看到不重复的 feeds,BF 规格如下:
采用 Redis Bloom 插件计算,https://redis.io/docs/stack/bloom/。
进一步优化
上述场景下,Bloom 大小按照 200 计算,那活跃用户呢?总有一些高活用户,每天会刷大几百条视频,这部分用户不做特殊处理的话,体验会非常差,后面总是看到重复的视频。还有就是一些特殊场景,例如业务希望用户1月内都不要看到重复的 feeds。这种,如果仅仅以每天每人作为 bloom 的 key,那么实现1个月内不重复,1个用户要查询30个 bloom,有点夸张。
Redis 虽然能抗,但假设用户刷视频的频率是 10w/s,扩散后,对 Redis 的压力就是300w/s
怎么优化呢?有几种思路。
1. 最简单,让 Redis 抗,单机扛不住,分片还扛不住吗?分片扛不住,读写分离还扛不住吗?反正肯定能抗住。
2. 记录1个总数量的 bloom key,分级,递增设置容量。例如起始 bf0 容量是 1000,当 bf0 满了,新建一个 bf1,容量是 10000,bf1 满了,再新建一个 bf2,容量是 10w。这种方案有两个好处,1是递进的增加 bf 容量,减少 Redis 的 key 访问次数,减轻 Redis 的压力;2是不浪费存储,大部分用户都是非活跃用户,可能看到的 feeds 量在 1w 以内,只有真正活跃的用户才会分配 10w 以上的大 bf,精准的占用存储。
至此,本文就大体结束了,后面有时间了再开一篇布谷鸟过滤器的说明,先鸽一下。
标签:
推荐文章
- 世界速递!布隆过滤器在短视频 feeds 系统中的妙用
- 【全球新要闻】泉州黎明职业大学贴吧_泉州黎明职业大学
- 焦点短讯!勇士的信仰女神碎片集齐_勇士的信仰女神碎片
- 每日聚焦:2023年呈贡区文化馆免费群众艺术培训班报名时间+地点+对象
- 焦点播报:闵行这里首批旧改工程结构封顶, 预计今年5月回迁
- 最新资讯:永远的七日之都乌殷攻略_永远的七日之都乌鹭攻略
- 全球速看:滕云_关于滕云介绍
- 全球视点!单眼皮是显性基因还是隐性基因常染(单眼皮是显性基因还是隐性基因)
- 环球快看点丨粥的文案(粥的英文)
- 世界今热点:山东安丘贴吧_安丘贴吧
- 焦点速递!霜降古诗(霜降古诗)
- 每日热点:*ST海伦摘星脱帽又进一步
- 热头条丨怎么把苹果手机里面的东西备份_苹果怎么备份手机里的东西
- 世界最新:陶虹遐、张宇分别以底价竞得金科股份约1.62亿股、1.59亿股
- 今日热文:抖音红包怎么提现 怎么提现抖音里面的红包
- 【天天聚看点】汉缆股份董秘回复:公司目前暂未有超导技术规划及应用
- 天天微动态丨360账号已注销如何重新使用_360账号怎么注销
- 全球动态:SE 解密游戏《PARANORMASIGHT FILE23 本所七大不思议》现已发售
- 快消息!中国青年报精兵简政 不养闲人详细内容
- 环球关注:北京沙河公交通勤线路征集入口是哪个?
- 最资讯丨手机电脑同屏显示怎么关闭_手机电脑同屏显示
- 每日信息:神挡杀神!拜仁欧冠8战8胜 单季双杀巴萨国米与巴黎
- 天天快讯:绿到发光!宁王穿原谅绿套装游迪士尼,女友p了3天才发?
- 【时快讯】检验结果是阳性是什么意思_药检阳性是什么意思
- 焦点播报:当年上海滩生煎馒头名店今何在?老店搬家换了新名字,我们找到了创始人第三代
- 环球热推荐:脚踝处疼痛是怎么回事_脚踝肿痛怎么回事
- 天天滚动:高硼硅玻璃杯好还是钢化玻璃杯好_高硼硅玻璃杯好不好
- 世界百事通!上美股份增资至3.98亿元
- 讯息:拳皇所有人物介绍
- 速看:晨光股份(603899)3月8日主力资金净买入130.77万元
- 当前看点!电影蔷花红莲剧情介绍
- 环球新消息丨梅溪湖投资长沙有限公司电话地址
- 世界播报:低龄接种宫颈癌疫苗效果更佳
- 当前速读:vertiv
- 快消息!震坤行冲刺纽交所:或成中国MRO赴美第一股,2022年GMV达94亿元
- 焦点消息!三国中孙权的父亲是
- 环球报道:G-拉莫斯是自03/04赛季,欧冠淘汰赛单场至少参与3球第二年轻者
- 天天讯息:预防医学就业前景好的十大专业_预防医学就业前景?
- 当前速递!触不到的恋人美国版
- 【世界时快讯】百利天恒首个创新药SI-B001的III期临床研究方案专家讨论会成功召开
- 全球快看点丨1943年出生属什么属相
- 焦点信息:宠物运输专车_宠物运输
- 天天时讯:蜗牛鲍勃下载安装_蜗牛鲍勃太空版攻略
- 资讯推荐:山东省实验中学
- 世界今头条!银联标识的银行卡是什么_银联标识
- 全球热议:王志才是干什么的
- 环球快报:打印机无线怎么连接电脑_打印机无线连接电脑步骤
- 新动态:港股异动 | 信达生物(01801)升5% 旗下塞普替尼实现中国商业化上市
- 环球热点!天秤座是几月几号到几月几号生日 天秤座几月几日最幸运
- 环球热推荐:泽连斯基解除多名乌国家安全局高层官员职务
- 天天热推荐:考研大纲2015
- 微资讯!正确的养殖西瓜方法_如何种植西瓜比较好
- 世界看热讯:滇藏线旅游摄影_关于滇藏线旅游摄影介绍
- 环球即时:页面设置在哪里word
最新资讯
- 看热讯:“百亿补贴”提前上线 京东重金“买”用户恐难持续?
- 焦点关注:创业板注册制交易规则怎样买卖_创业板注册制交易规则
- 世界信息:JDG失败之后,TheShy机会来了!如果能击败EDG,则有复活甲机会
- 【全球聚看点】投资学专业介绍
- 【天天新要闻】杭州余杭景顺电子有限公司_关于杭州余杭景顺电子有限公司简述
- 全球观察:芒果台初代“一姐”李湘回归,接位浪姐四发布人,谢娜将何去何从
- 世界快资讯:运20 发动机
- 全球关注:u盘传输速度慢该怎么办啊_U盘传输速度慢该怎么办
- 环球快消息!麦田婚纱摄影
- 环球动态:为推进乡村振兴贡献智慧和力量(代表委员谈履职)
- 天天通讯!日常生活:谁家新燕啄春泥中的新燕指的是什么
- 今亮点!相公个个太腹黑有声小说_相公个个太腹黑
- 全球速递!简述网上银行的特点和优势_简述网上银行的特点
- 世界滚动:开网店需要什么手续
- 当前焦点!雷锋日|首都公共文明引导员争做“追锋人”
- 即时:卡布奇诺咖啡和拿铁咖啡有何区别_卡布奇诺咖啡的做法
- 全球即时:win7菜单栏跑到右边_win7任务栏跑到右边了怎么办
- 微资讯!深圳龙华新区疫情最新消息_深圳龙华新区
- 今日快看!汽车新消息:新款美版日产逍客亮相 外观/内饰配置升级
- 全球今热点:人体温度为什么降低了_人体温度
- 【报资讯】杨紫琼击败大魔王凯特,再获美国电影最佳主角奖
- 天天热头条丨男生发wanan是什么意思?_男生发wanan是什么意思
- 【快播报】哥伦比亚2月通胀率达13.28%,创23年来新高
- 信息:萨瓦迪卡是什么意思
- 每日焦点!全国政协委员兰臻:有一分热 发一分光 让乡村教育“薪火相传”
- 【全球速看料】返乡青年成致富带头人:农村小微创业者如何走向成功
- 环球热议:发觉的反义词是什么近义词指什么_发觉的反义词
- 热点!崇左退役军人志愿服务队:为烈士亲属服务代祭扫 传承雷锋精神
- 环球快讯:四部门部署开展10个重点区域地下水超采综合治理
- 热点评!2023年河南普通高校招生体育类专业统一考试最新消息(持续更新)
- 今日播报!1868年8月11日
- 环球微头条丨即使失败了100次 第101也要重新再来
- 【全球新要闻】处置违规网络账号群组16万余个
- 环球热点!周一诺baby_周一诺
- 【世界时快讯】皮肤丝虫病
- 天天时讯:教育局通报柳州一小学按父母职业排座位
- 焦点资讯:百闻牌:为SSR的觉醒卡组建挨打阵容?每次对手都会让我清醒!
- 每日热闻!服务心里红待人接物挺热情的意思_热情的意思
- 今日热闻!甘肃高速(一级)公路沿线充电基础设施建设工程项目全面开工
- 每日消息!钛铁矿磁选机厂家_钛铁矿
- 环球视讯!两会前瞻|醉驾入刑话题持续热议,有委员提议“提高入罪门槛”
- 【全球播资讯】C·费纳德
- 天天简讯:在非遗传承中“跳”出文化自信
- 环球热点评!刘涛发文为王子文庆生
- 天天消息!外套衣服图片_外套
- 全球球精选!让工业遗存焕发新光彩(文化只眼)
- 快讯:1日机构强推买入 6股极度低估
- 世界速看:新约圣经_关于新约圣经简介
- 视讯!倡议书的格式怎么写范文_倡议书的格式怎么写
- 焦点观察:“三提三争”树新风|惠及16270户!张店区全面实施35个老旧小区改造