计数器表,用于保存用户的点击量等,通常使用一张独立的小表来存放,里面放一个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。