网易首页 > 网易号 > 正文 申请入驻

程序员经典面试题:如何实现一个海量计数系统

0
分享至

我们在开发中,经常有一些计数相关的工作。例如,抖音上的短视频,有评论数,播放数。发送微博的时候,也有转发数,评论数,点赞数,电商网站上,有着商品售卖金额,商品的出售件数等统计。那么,这些统计是怎么做到的呢?

不难想到,我们可以在用户查看这条评论的时候,去统计总共有多少个赞。举个例子,你在虎扑上发表一条评论,每当有人点赞的时候,都会在评论下面增加一条点赞记录,记录谁谁谁点赞了。当有人访问这条评论的时候,我们可以使用Mysql的SelectCount语句,对其进行统计,查询总共有多少条记录,并且返回给前段。这种方案有什么问题呢?当数据量小的时候,我们总可以非常迅速地计算到结果。但是随着数据量的增大,例如一条非常火的评论,可能已经有数十万个赞了,每次都去查询效率都比较低。评论的内容是核心数据,评论的点赞数是次要数据,如果查询点赞数量的耗时过长,反而会影响主要业务。我们要做的,是尽量地少去查询,或者让查询的速度更快。

在此之前的方案,我们每次都是全量Count一遍,那么,我们能不能把这个数据存起来呢?这样子,就不需要每次有人来查询的时候,都去统计。每次有变更的时候,就去数据库里面进行selectCount,查询后将结果保存下来。之后每次有人访问这条评论,我们就直接返回,而不需要进行SelectCount。当然,每次都去SelectCount也是一个笨方法,我们为什么不每次有人点赞就+1,有人取消点赞就减一呢。我们将点赞数据的电话分为两种事件,一种是+1,另一种是-1。当然,这种做法的潜在风险点就是并发问题,例如原来的数据是5,突然来了两个+1的请求,由于他们并发执行了,最终的结果变成6。这种情况下我们需要加锁防止并发,或者让数据库帮我们实现。

仅是这样是远远不够的,我们如何面对突发的流量呢?例如突然爆发了一个热点事件,突然火了一条评论,可能10分钟之内就已经几万个点赞了。假如我们每次都去数据库更新,那势必效率会大大降低。为了应对这种突发性的流量,业内的解决方案大家其实都非常熟悉,不就采用消息队列进行削峰嘛。但是,这种突发性的流量容易造成MQ堆积,那么有没有什么好的方法呢?其实非常简单,本来我们要进行10次+1的操作,为什么我们不合并成1次+10操作呢。这样就能大大减少数据库的压力,我们一般有两场常见的实现方式,一种是对异步队列进行任务合并,另外一种是我们可以将计数存在缓存上,定期将数据刷到数据库中。

我们更多采用的是第二种方法,并且我们还会进一步优化,就是我们会将点赞的统计存放在Redis这种的缓存中间件上,然后再定期刷到磁盘上。对于这样的统计数据,冷热是非常明显的,基本上,采用采用这种方案,已经可以适用大部分计数系统了。欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
太适合广东队!强力中锋狂轰30分15篮板,他才是宏远内线的答案?

太适合广东队!强力中锋狂轰30分15篮板,他才是宏远内线的答案?

绯雨儿
2024-05-25 16:21:53
伊朗:群体约的炮,含泪也要打完

伊朗:群体约的炮,含泪也要打完

更夫频道
2024-05-22 21:39:04
普通人眼中的互联网历史——2005年

普通人眼中的互联网历史——2005年

冒泡泡的鱼儿
2024-05-24 12:45:59
打疯了!王艺迪3-0送黑马出局,钱天一1-3惨败,梁靖崑轰11-0

打疯了!王艺迪3-0送黑马出局,钱天一1-3惨败,梁靖崑轰11-0

知轩体育
2024-05-25 12:16:34
王玉雯内衣若隐若现,是谁让她这么穿的?你说这是青春校园剧?

王玉雯内衣若隐若现,是谁让她这么穿的?你说这是青春校园剧?

娱乐八卦木木子
2024-05-25 13:57:41
谍战剧《特别行动》今晚开播,剧情新颖扣人心弦,央视又出爆款了

谍战剧《特别行动》今晚开播,剧情新颖扣人心弦,央视又出爆款了

愚与趣
2024-05-25 11:10:02
羽球大冷门!3场下克上,头号种子翻车,王祉怡决赛PK世界冠军!

羽球大冷门!3场下克上,头号种子翻车,王祉怡决赛PK世界冠军!

刘姚尧的文字城堡
2024-05-25 18:27:50
涨知识了:鼻毛老“窜”出来的男人,暗示了啥?鼻毛为什么会变白

涨知识了:鼻毛老“窜”出来的男人,暗示了啥?鼻毛为什么会变白

奇妙的本草
2024-05-23 18:00:08
基德:本打算让东契奇投两分,但他军训了戈贝尔

基德:本打算让东契奇投两分,但他军训了戈贝尔

体育杂谈吧
2024-05-25 11:56:41
乒乓球太原赛:女单4强诞生!中日各2人,平野挽救5个赛点胜国乒

乒乓球太原赛:女单4强诞生!中日各2人,平野挽救5个赛点胜国乒

全言作品
2024-05-25 13:03:18
记者扮男客潜入采耳店,偷拍服务全过程:女技师、柔式按摩别有洞天

记者扮男客潜入采耳店,偷拍服务全过程:女技师、柔式按摩别有洞天

古今档案
2024-05-07 13:04:58
李晓旭享受惬意生活!兼职店长+穿情侣装,开百万豪车带妻子兜风

李晓旭享受惬意生活!兼职店长+穿情侣装,开百万豪车带妻子兜风

理工男评篮球
2024-05-25 15:17:16
到今年网贷逾期3年了,催收短信变成这样子了!

到今年网贷逾期3年了,催收短信变成这样子了!

杨胜诉
2024-05-15 14:10:47
小伙在广州打工,和大8岁的女房东结婚,落户广州,她生了2个孩子

小伙在广州打工,和大8岁的女房东结婚,落户广州,她生了2个孩子

娱乐小可爱蛙
2024-05-25 11:09:08
穷疯了?橡树集团刚入主国米,门票提价3300万欧,球迷怀念张康阳

穷疯了?橡树集团刚入主国米,门票提价3300万欧,球迷怀念张康阳

体育全天候
2024-05-24 21:08:00
预售110万起!红旗国雅实车到店,大过宾利飞驰+4座,配4.0T V8

预售110万起!红旗国雅实车到店,大过宾利飞驰+4座,配4.0T V8

燕赵女司机
2024-05-23 19:18:22
沙俄300年的对外扩张史,证明唇亡齿寒无效?邻居就是用来欺负的

沙俄300年的对外扩张史,证明唇亡齿寒无效?邻居就是用来欺负的

高志凯频道
2024-05-24 09:05:47
李尚福普京刚会面,美就派军舰闯台海,中俄已做两手准备

李尚福普京刚会面,美就派军舰闯台海,中俄已做两手准备

山野阿李呀
2024-05-21 20:38:11
四川省一地两任县委书记先后被查

四川省一地两任县委书记先后被查

鲁中晨报
2024-05-25 14:26:03
“美国想要中国大陆和台湾对抗,东盟没必要卷入”

“美国想要中国大陆和台湾对抗,东盟没必要卷入”

观察者网
2024-05-24 21:36:10
2024-05-25 21:26:44
沙茶敏碎碎念
沙茶敏碎碎念
一个有态度的程序员
209文章数 4169关注度
往期回顾 全部

科技要闻

B站终究还是妥协了

头条要闻

俄军队已控制乌约18%的土地 普京:足以向人民宣布胜利

头条要闻

俄军队已控制乌约18%的土地 普京:足以向人民宣布胜利

体育要闻

华子致命失误直接离场 东契奇对戈贝尔怒吼

娱乐要闻

霍启仁求婚成功,郭晶晶要有妯娌了

财经要闻

360,投了新能源最大的雷

汽车要闻

纯电续航205km版售12.99万起 风神L7上市交付

态度原创

游戏
艺术
本地
教育
公开课

Faker入选名人堂后,LCK官方发布其各项纪录:唯一一位S赛四冠王

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

本地新闻

2024沈阳皇姑第二届半程马拉松

教育要闻

【中招咨询】北京市第二十中学:走进二十中学 争做中国脊梁

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版