加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

措施员经典口试题:怎样实现一个海量计数体系

发布时间:2020-03-24 00:19:52 所属栏目:编程 来源:站长网
导读:我们在开拓中,常常有一些计数相干的事变。譬喻,抖音上的短视频,有评述数,播放数。发送微博的时辰,也有转发数,评述数,点赞数,电商网站上,有着商品售卖金额,商品的出售件数等统计。那么,这些统计是怎么做到的呢? 不难想到,我们可以在用户查察这

我们在开拓中,常常有一些计数相干的事变。譬喻,抖音上的短视频,有评述数,播放数。发送微博的时辰,也有转发数,评述数,点赞数,电商网站上,有着商品售卖金额,商品的出售件数等统计。那么,这些统计是怎么做到的呢?

措施员经典口试题:怎样实现一个海量计数体系

不难想到,我们可以在用户查察这条评述的时辰,去统计总共有几多个赞。举个例子,你在虎扑上颁发一条评述,每当有人点赞的时辰,城市在评述下面增进一条点赞记录,记录谁谁谁点赞了。当有人会见这条评述的时辰,我们可以行使Mysql的SelectCount语句,对其举办统计,查询总共有几多笔记录,而且返回给前段。这种方案有什么题目呢?当数据量小的时辰,我们总可以很是敏捷地计较到功效。可是跟着数据量的增大,譬喻一条很是火的评述,也许已经稀有十万个赞了,每次都去查询服从都较量低。评述的内容是焦点数据,评述的点赞数是次要数据,假如查询点赞数目的耗时过长,反而会影响首要营业。我们要做的,是只管地少去查询,可能让查询的速率更快。

在此之前的方案,我们每次都是全量Count一遍,那么,我们能不能把这个数据存起来呢?这样子,就不必要每次有人来查询的时辰,都去统计。每次有改观的时辰,就去数据库内里举办selectCount,查询后将功效生涯下来。之后每次有人会见这条评述,我们就直接返回,而不必要举办SelectCount。虽然,每次都去SelectCount也是一个笨要领,我们为什么不每次有人点赞就+1,有人打消点赞就减一呢。我们将点赞数据的电话分为两种变乱,一种是+1,另一种是-1。虽然,这种做法的隐藏风险点就是并发题目,譬喻原本的数据是5,溘然来了两个+1的哀求,因为他们并发执行了,最终的功效酿成6。这种环境下我们必要加锁防备并发,可能让数据库帮我们实现。

仅是这样是远远不足的,我们怎样面临突发的流量呢?譬喻溘然发作了一个热门变乱,溘然火了一条评述,也许10分钟之内就已经几万个点赞了。若是我们每次都去数据库更新,那势必服从会大大低落。为了应对这种突发性的流量,业内的办理方案各人着实都很是认识,不就回收动静行罗列办削峰嘛。可是,这种突发性的流量轻易造成MQ会萃,那么有没有什么好的要领呢?着实很是简朴,原来我们要举办10次+1的操纵,为什么我们不归并成1次+10操纵呢。这样就能大大镌汰数据库的压力,我们一样平常有两场常见的实现方法,一种是对异部行罗列办使命归并,其它一种是我们可以将计数存在缓存上,按期将数据刷到数据库中。

我们更多回收的是第二种要领,而且我们还会进一步优化,就是我们会将点赞的统计存放在Redis这种的缓存中间件上,然后再按期刷到磁盘上。对付这样的统计数据,冷热长短常明明的,根基上,回收回收这种方案,已经可以合用大部门计数辖档退。接待各人存眷我,配合进修,配合前进。各人的支持是我继承唠嗑的动力。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读