【设计】计数(二)普通计数

这里说的是非基数类型的计数。

对于这类型计数,可以只使用一个变量存储计数值,比如点赞数,直接用一个like_count变量逐步累加就行。

但是考虑一个复杂场景,比如记录每一个作品的点赞数,这个时候就需要加一个作品维度了,如果使用mysql记录,那么scheme可能是:photo_id,like_count。

再复杂一些,作品里可能有多个计数的维度,比如除了点赞计数,还有评论计数,分享计数等等,那看上去需要每一种计数类型都建一张表了,其实也不用,可以再一列type,表明计数类型:photo_id,type,like_count,(photo_id, type)是一个唯一键。

 

另外,如果一个计数是热点类型,涉及到并发更新,可以使用如下两种策略削峰:

1.聚合:即先本地维护一个计数变量,当达到一定量后再统一更新到db;

2.将计数通过一定的hash方法分配到若干存储里,比如一个count分成10分存,每一份都对应一个redis节点,当然读的时候需要聚合;

你可能感兴趣的:(设计)