计数器表,用于保存用户的点击量等,通常使用一张独立的小表来存放,里面放一个int值,在每次点击后增加该值。

create table pv(
    count int unsigned not null
) engine=InnoDB;

update pv set count = count + 1;

对于InnoDB,对该行的修改会造成该行的锁定,使得点击后产生的事务只能串行执行。

多行

可以预先定义多行来保存点击量,然后每次更新时使用rand随机选取一行的主键id,更新该行,这样可以提升一些性能。

返回总量时使用sum把表内数据累加即可。

create table pv(
    id tinyint unsigned not null primary key,
    count int unsigned not null
) engine=InnoDB;

update pv set count = count + 1 where id = rand() * 100;

随机行

直接使用插入,使用大范围的随机数或者使用uuid等不会重复的作为id,另加上on duplicate key update处理碰撞问题。

create table pv(
    id char(32) not null primary key,
    count int unsigned not null
) engine=InnoDB;

insert into pv values(rand() * 10000, 1) on duplicate key update count = count + 1;

最后再运行一个定时任务定期把这些行收敛到一行即可,返回总量时仍可使用sum。


xncode
26 声望2 粉丝

« 上一篇
celery 使用