现在的位置: 首页 > 综合 > 正文

网站计数器表的设计

2018年01月25日 ⁄ 综合 ⁄ 共 501字 ⁄ 字号 评论关闭

在做web项目时经常需要统计网站的访问量。下面就来看看怎么做.

为了尽可能保持简单,假设有一个计数器表,只有一行记录,用于统计网站的点击量。

CREATE TABLE hit_counter(

cnt int unsigned not null

) ENGINE=InnoDB;

网站的每次点击都会更新计数器

Update hit_counter SET cnt=cnt+1;

问题是该行对于任何更新计数器的更新事务实际上是一个全局性的“互斥量”.它会序列化那些事务,可以通过使用多行并更新随即行来得到更高的并发。这需要对表做下面的改动:

CREATE TABLE hit_counter (

slot tinyint unsigned not null primary key,

cnt int unsigned not null

) ENGINE=InnoDB;

先填充100行。现在查询可以随机地选择一行并且更新它:

UPDATE hit_counter SET cnt=cnt+1 WHERE slot=RAND()*100;

为了得到统计,使用聚合查询就可以了:

SELECT SUM(cnt) FROM hit_counter;

一个常见的需求是非常频繁地新开计数器(例如,每天一个)。

抱歉!评论已关闭.