创建独立的表存储计数器可以使计数器表小且快。使用独立的表可以帮助避免查询缓存失败,并且可以使用更好的方法。
每次点击都会导致对计数器进行更新
update hit_count set cnt = cnt+1;
问题在于,对于任何想要更新这一行的事务来说,这条记录上都有一个全局的互斥锁(mutex)。这会使得这些事务只能串行执行。要获得更高的并发更新性能,也可以将计数器保存在多行中,每次随机选择一行进行更新。需要对计数器表进行修改
CREATE TABLE hit_counter (
slot TINYINT UNSIGNED NOT NULL PRIMARY KEY,
cnt INT UNSIGNED NOT NULL )ENGINE=INNODB;
然后预先在这张表增加100行数据,随机选择一个slot进行更新;
UPDATE hit_counter SET cnt = cnt +1 WHERE slot = CEILING(RAND()*90+10);
(此sql语句在执行时有更新失败和一次更新多条情况的发生,原因未知,建议随机数由程序生成,再填写到sql语句中)。
网友评论