大家平时刷抖音、视频号、快手时,几乎总能刷到最新的视频。那这里是怎么实现的呢?
上述场景,可以简单抽象为曝光去重,就是用户看过的 feeds1、feeds2、feeds3 ...... 等,如何保证在用户下次进入系统时不会再次出现呢?今天,我们就来探讨下几种实现方案吧。
这个方案简单粗暴,就是每个用户用一个集合,存储看过的所有 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,有钱也不能这么造啊。
那有没有更优惠的实现方案呢?这就要说到本文的主角,布隆过滤器了。
布隆过滤器,本质上是一个高阶 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,精准的占用存储。
至此,本文就大体结束了,后面有时间了再开一篇布谷鸟过滤器的说明,先鸽一下。
标签:
精彩推荐
全国人大代表、重庆农商行董事长谢文辉:有必要将财富管理领域立法工作加快提上研究日程,谢文辉,立法工...
截至2023年3月9日收盘,中国海油(600938)报收于18 2元,上涨0 44%,换手率3 98%,成交量69 62万手,成交额12 69亿元。
1、《全国普通高等学校毕业生就业协议书》,简称“就业协议书”,俗称“三方协议”,是由教育部高校学生...
1、去百度文库,查看完整内容>内容来自用户:儒雅的甘为人梯3雨的四季1 研读文章,体会作者用笔之细腻,...
政府工作报告提出,把恢复和扩大消费摆在优先位置。多渠道增加城乡居民收入。稳定大宗消费,推动生活服...
同花顺金融研究中心3月9日讯,有投资者向黑芝麻提问,您好董秘,前一段看到公司说今年天臣18GW动力电池...
1、亲!请留下邮箱!我有文包哦!。本文到此分享完毕,希望对大家有所帮助。
近日,一个“大学四年挣到上百万”的创业经历火了。网上常常流传“成功学真经”,教导如何轻松实现“财...
1、我们首先在电脑上打开excel表格。2、2、选择一部分的单元格。3、3、右键点击选中的单元格,点击设置...
1、首先我们搜索一下淘宝,进入淘宝官网首页,然后右边会出现一个“免费注册”的字样。我们单击选择它。...
23年德国羽毛球公开赛,中国队在男单赛场一共派出了石宇奇,陆光祖、赵俊鹏和李诗沣四名选手,其中赵俊...
1、窦性心律即正常的心脏节律,窦房结位于右心房和上腔静脉的连接处,窦房结产生冲动,通过心房、房室交...
1、《绝世唐门》是湖南少年儿童出版社出版于2012年12月的一本玄幻异界网络小说,作者是唐家三少。2、是...
父亲去世留下千万豪宅,姐姐妄想独占,却不知10岁妹妹手段不一般,离婚,怀孕,相认,豪宅,二婚老伴
广东省佛山市顺德区德胜东路。顺德职业技术学院位于广东省佛山市,是一所经教育部批准成立、广东省人民...
1、最热闹的地方购物中心商业中心应该是春熙路,属于锦江区。2、锦江区是成都市11个市辖区之一,成立于19...
1、PDL,属于通信技术领域,是一种在利用光纤传输信号过程中存在的信号损耗。2、使用仪器可以进行测量,...
JBLBAR1300X真无线后环绕家庭影院支持11 1 4杜比全景声,拥有1170W总功率,为用户演绎新一代「浸化论」。
众所周知英雄联盟诞生过很多伟大的选手,比如三冠王Faker和亚运会冠军Uzi等知名选手,为了能让观众记住...
1、云南民族村位于云南省昆明市西南郊的滇池之畔,占地面积89公顷,是反映和展示云南二十六个民族社会文...
【本文来自《姚洋:今年中国经济面临三大挑战》评论区,标题为小编添加】作为民营中型企业的负责人,去...
评剧是我国华北、东北一带的主要戏曲。评剧是汉族传统戏曲剧种之一,也是广大人民所喜闻乐见的剧种之一...
阿坝州新型冠状病毒肺炎疫情:3月8日阿坝州疫情最新消息今天数据统计情况通报,截至3月8日02时30分阿坝州...
3月7日国家外汇管理局统计数据显示,截至2023年2月末,我国外汇储备规模为31332亿美元,较1月末下降513...
1、美式音标,也称K K 音标,作者为JohnS Kenyon u0026ThomasA Knott。2
资讯News
06-20
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
聚焦Policy
当好农民工的“护薪人” 近日,罗某等7名农民工在收到被拖欠的工资后,纷纷打电话向江西省南昌市...
“通讯录里所有人都知道我欠钱了” □ 本报记者 韩丹东 □ 本报见习记者 张守坤 ...
大连宝马车撞人案肇事司机被判死刑 本报讯 记者韩宇 10月29日,辽宁省大连市中级人民法院一审...
医院财务迷上网络赌博输光5000万元公款 □ 本报记者 马维博 □ 本报通讯员 汪宇堂 曹...
辊环车削 雕琢毫厘(工匠绝活) 【绝活看点】 23年来,雷虎始终扎根一线,改进钢材轧制工艺...
交警严查超标电动自行车挪用“白牌” 截至昨晚6时,处罚电动自行车违法行为共计6585笔;下一步将...
明起寒潮来袭 北方气温普降10℃以上 中央气象台预计,本周日北京平原地区最低气温降至-4℃左右...
多种蔬菜价格降幅达五成 包括菠菜、蒿子秆等 预计本月中旬蔬菜恢复供需平衡 本报讯(记者...
北京周日最低气温或达-4℃ 本报讯(记者 赵婷婷)北京青年报记者昨天从中央气象台获悉,新一股...
昌平一家四口确诊新冠肺炎 天通北苑第二社区升级为中风险地区 朝阳两涉疫校区及16所学校停课 ...