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

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

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.

相关推荐
热点推荐
中超巨大争议!马莱莱染红太离谱,岳鑫8分钟后复刻,媒体人炮轰

中超巨大争议!马莱莱染红太离谱,岳鑫8分钟后复刻,媒体人炮轰

奥拜尔
2024-05-05 19:40:04
湖南一干部,被开除党籍和公职!

湖南一干部,被开除党籍和公职!

掌上岳阳
2024-05-05 20:48:22
王老吉新包装,被吐槽像“骨灰罐”!花1.5亿打下来的“红罐凉茶”,说换就换?网友:王老吉,你糊涂啊!

王老吉新包装,被吐槽像“骨灰罐”!花1.5亿打下来的“红罐凉茶”,说换就换?网友:王老吉,你糊涂啊!

起喜电影
2024-04-28 07:10:30
实力有差距,李诗沣1比2负乔纳坦,未来仍可期,汤杯国羽暂2比1

实力有差距,李诗沣1比2负乔纳坦,未来仍可期,汤杯国羽暂2比1

小兰看体育
2024-05-05 21:50:24
重庆这件事,已经不是践踏公平的问题了

重庆这件事,已经不是践踏公平的问题了

顾礼先生
2024-04-22 15:51:11
17岁小伙强奸33岁女子,女子苦苦哀求,你太小我不吃亏别这样做

17岁小伙强奸33岁女子,女子苦苦哀求,你太小我不吃亏别这样做

娱乐圈的笔娱君
2024-05-05 18:58:28
Makiyo瘦到不正常,脸部轮廓变形异常,她的身体已经亮了红灯!

Makiyo瘦到不正常,脸部轮廓变形异常,她的身体已经亮了红灯!

郑丁嘉话
2024-05-05 16:25:55
5月,国家将第30次发布养老金调整通知,涨多少?谁涨得更多?

5月,国家将第30次发布养老金调整通知,涨多少?谁涨得更多?

暖心人社
2024-05-05 22:49:55
笑喷了!马筱梅助力汪小菲硬杠大S,一条烤鱼干翻具俊晔DJ演唱会

笑喷了!马筱梅助力汪小菲硬杠大S,一条烤鱼干翻具俊晔DJ演唱会

柠檬有娱乐
2024-05-05 09:55:14
突然大跳水!已经“腰斩”,还会继续跌?

突然大跳水!已经“腰斩”,还会继续跌?

21世纪经济报道
2024-05-05 22:22:08
三大消息:普京这回动真格了!中方奉陪到底,27国对华出手

三大消息:普京这回动真格了!中方奉陪到底,27国对华出手

身边小事情
2024-05-04 10:57:46
凤凰传奇这回在北京鸟巢的演唱会可是闹了个大笑话!

凤凰传奇这回在北京鸟巢的演唱会可是闹了个大笑话!

穷游天下的阿等
2024-05-05 18:36:31
西甲:赫罗纳4-2双杀巴萨!队史首次进欧冠,还送皇马提前4轮夺冠

西甲:赫罗纳4-2双杀巴萨!队史首次进欧冠,还送皇马提前4轮夺冠

侃球熊弟
2024-05-05 02:34:43
英超最新积分战报 曼城让阿森纳大胜苍白无力 纽卡将曼联挤出前6

英超最新积分战报 曼城让阿森纳大胜苍白无力 纽卡将曼联挤出前6

狂言体育
2024-05-05 06:50:48
看到姐姐们吃的东西,我终于知道她们为什么越来越漂亮了

看到姐姐们吃的东西,我终于知道她们为什么越来越漂亮了

李保军财经
2024-05-05 15:36:55
美国犹太法案通过之后,犹太水军开始进入我们的互联网了

美国犹太法案通过之后,犹太水军开始进入我们的互联网了

怪口历史的K先生
2024-05-05 09:56:14
一起来看看北京大学部分学生会主席现今在何处高就!

一起来看看北京大学部分学生会主席现今在何处高就!

谁为锦年织彩衣
2024-05-05 07:05:03
田馥甄,当年朝内地开了3枪,2024年,全部正中自己的眉心!

田馥甄,当年朝内地开了3枪,2024年,全部正中自己的眉心!

闻星盼夏
2024-05-03 17:28:57
金球奖排行榜公布!第一换人,梅西飙升,或逆袭,C罗杀入前十

金球奖排行榜公布!第一换人,梅西飙升,或逆袭,C罗杀入前十

阿泰希特
2024-05-05 17:50:36
45岁男子脑梗离世!再次提醒:中老年人,晚饭后尽量少做4件事

45岁男子脑梗离世!再次提醒:中老年人,晚饭后尽量少做4件事

奇妙的本草
2024-04-25 19:00:03
2024-05-06 01:36:49
沙茶敏碎碎念
沙茶敏碎碎念
一个有态度的程序员
209文章数 4169关注度
往期回顾 全部

科技要闻

Meta买英伟达GPU已花300亿美元 超当年登月

头条要闻

夫妻驾驶特斯拉冲下山路身亡 行车记录仪数据消失不见

头条要闻

夫妻驾驶特斯拉冲下山路身亡 行车记录仪数据消失不见

体育要闻

对阵热刺补射破门,罗伯逊职业生涯首次英超连场进球

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

20大要点!巴菲特谈聊到AI、苹果、投资

汽车要闻

"高阶智驾"配上了 极狐阿尔法S先行版PRO亮相

态度原创

手机
时尚
亲子
家居
教育

手机要闻

iPhone16系列再次被确认:不锈钢电池壳成新宠,是否值得期待?

伊姐五一热推:电影《维和防暴队》;电视剧《微暗之火》......

亲子要闻

雀巢竟在亚非婴儿的食品中添加这么多糖!毒害从娃娃抓起?

家居要闻

心之所栖 黑白灰色系打造设计专属感

教育要闻

贸职的综合高中见闻

无障碍浏览 进入关怀版