大家平时刷抖音、视频号、快手时,几乎总能刷到最新的视频。那这里是怎么实现的呢?
上述场景,可以简单抽象为曝光去重,就是用户看过的 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,精准的占用存储。
至此,本文就大体结束了,后面有时间了再开一篇布谷鸟过滤器的说明,先鸽一下。
上述场景,可以简单抽象为曝光去重,就是用户看过的feeds1、feeds2、feeds3 等,如何保证在用户下次进入系统时不会再次出现呢?今天,
中证网讯(记者吴科任)北交所新股安达科技(830809)将于3月13日开始申购,发行价为每股13元。开源证券研报认为,安达科技的磷酸铁锂产品质量处于
爱旭股份(600732 SH)披露2022年度业绩快报,公司营业总收入为350 75亿元,较上年同期增长126 72%;归属于上市公司股东的净利润为23 28亿元,扣
为拓展公司试验检测及调试服务板块,将业务推广至广东区域外市场,南网科技(688248)拟以总额不超过2 5亿元,并入两家电力技术服务领域区域头部
硅谷银行英国分部接触多家英国银行,寻求24小时内收购方案
盐湖股份(000792 SZ)披露2022年度业绩快报,公司实现营业总收入307 48亿元,较上年同期增长108 06%;归属于上市公司股东的净利润156 14亿元,较
涉及多只中国美元基金!硅谷银行的破产处置,你需要知道这些
十堰郧西县新能源汽车产业研究院成为产业发展“新引擎”
新京报讯(首席记者郭铁)3月12日上午,三峡圣农45MWp分布式光伏项目首批成功并网。首批并网的是圣农光泽基地南排肉鸡养殖场3座鸡舍,并网容量约
一图看懂丨硅谷银行极速坍塌!医疗公司最先承压?
浦发硅谷银行成立于2012年8月,是一家在中国境内注册的法人银行。浦发硅谷银行拥有规范的公司治理架构,有独立经营的资产负债表。 作为中国
(观察者网讯)在今年的全国两会上,“科技自立自强”再度成为热点词。2023年政府工作报告强调:科技政策要聚焦自立自强,突出企业科技创新主
夏弥来为大家解答以下的问题,同分异构体,说一说同分异构体的简介,现在让我们一起来看看吧!1、异构体一般指同分异构体。2、
3月10日,文旅部宣布,2023年3月15日起,试点恢复全国旅行社及在线旅游企业经营中国公民赴有关国家(第二批)出境团队旅游和“机票+酒店”业务。
2019年,知名仓储式超市Costco在上海开出中国大陆首店,热情的消费者曾引发过大客流。据上观新闻消息,3月10日,上海第二家开市客(Costco)在浦
从兰石重装获悉,3月10日,兰石重装与中信银行签订司库系统服务协议。中信银行推出了业内首个银行自主研发的司库管理系统。双方将携手共进、务
证券时报e公司讯,从文科园林获悉,3月10日下午,深圳文科园林股份有限公司与深圳市晟世环保能源股份有限公司、深圳海辰光储能源科技有限公司
针对近日美国财政部宣布将多家中国实体列入“特别指定国民清单”实施制裁,商务部新闻发言人10日回应称,中方注意到,美方以所谓涉伊为由,将
1、卢薇薇。2、女。3、偶像剧《我和我的兄弟~恩》中的女主角。本文到此结束,希望对大家有所帮助。
1、如果是的话开局在基地点新年礼物,然后一般都是150级左右可以杀龙,成半神得杀冰老头掉天书或者用神之残魂找守墓老人转,应该是200级,找守
3月10日,广发瑞轩三个月定开混合最新单位净值为0 7807元,累计净值为0 7807元,较前一交易日下跌1 21%。历史数据显示该基金近1个月下跌4 72%
3月10日,金鹰改革红利混合最新单位净值为2 372元,累计净值为2 372元,较前一交易日下跌0 96%。历史数据显示该基金近1个月下跌5 16%,近3个月
3月10日,朱雀企业优选A最新单位净值为1 0452元,累计净值为1 0452元,较前一交易日下跌1 5%。历史数据显示该基金近1个月下跌5 65%,近3个月下
3月10日,广发价值优势混合最新单位净值为1 4546元,累计净值为1 4546元,较前一交易日下跌1 4%。历史数据显示该基金近1个月下跌0 32%,近3个
3月10日,华商稳定增利债券A最新单位净值为1 756元,累计净值为2 086元,较前一交易日上涨0 06%。历史数据显示该基金近1个月下跌0 4%,近3个月
如何抓好今冬明春市场监管领域安全生
12月16日,达州市达川区市场监督管理局下发《市场监管领域今冬明春安全生产隐患大排查大整治行动工作方案》,要求下属各部门从2022年12月16日起至2023年3月15日,全面聚焦城镇燃气、特种设备、危险化学品、烟花爆
《2021年度中国对外直接投资统计公报
金港高速公路连接柬埔寨首都金边和该国最大深水海港西哈努克港,是中国路桥按建造—运营—移交模式投资的项目,采用中国设计及质量标准,横跨5个省份,全长187 05公里,双向四车道。金港高速公路通车后,从金边到
总体保持稳定恢复态势 工业经济展现
2022年1至10月,浙江省宁波市811家汽车制造业规上工业总产值2646 8亿元,同比增长14 2%。图为11月19日,工人在领克汽车宁波梅山工厂的总装车间作业。今年以来,受疫情多发散发、市场需求不振等因素影响,国内工业
14家券商获首批个人养老金代销展业资
11月18日晚间,证监会发布《个人养老金基金销售机构名录》,共37家机构入围,其中券商14家,银行16家,独立基金销售机构7家。14家券商包括华泰证券、中信证券、海通证券、国泰君安、申万宏源、中金财富和长江证券
北京再担保承保规模超6000亿 覆盖中
北京中小企业融资再担保有限公司(简称北京再担保)发布的最新数据显示,成立14年来已累计承保规模超过6000亿元,覆盖中小微企业(农户)超过16万户次,积极推动北京市中小微企业融资规模不断扩大。北京再担保2008年
Copyright @ 2001-2023 www.u74.cn All Rights Reserved 商业时报网 版权所有
网站信息内容, 均为相关单位具有著作权,未经书面授权,转载注明出处
未经商业时报网书面授权,请勿建立镜像,转载请注明来源,违者依法必究