我在y网站上有一个使用db 的简单访问者计数器
请忽略语法错误
$date = date('Y/m/d');
$record = $this->db->query("select * from `page_view` where `date` = '$date' ");
if (empty($record))
$this->db->query(" insert into `page_view`(`date`,`view` ) value ('$date' ,'1') ");
else {
$sql = "UPDATE `page_view` SET `view` = `view`+1 WHERE `date` = '{$date}'";
$this->db->query($sql);
}
我每天大约有50万访客,这有点高,我的mysql负载也是如此。我想知道我是否可以使用一个文本文件来存储每天的点击量,并在一天结束时将总访问次数从文本文件移动/存储到数据库。
至少在我识别并重写慢速查询之前。
$today = date('Y/m/d');
list ($counter , $date ) = explode('#' , file_get_contents('counter.txt'));
$counter++;
if( $today == $data )
file_put_contents('counter.txt' , $counter.'#'.$date );
else
file_put_contents('counter.txt' , '1#'.$today);
有什么理由不让我这么做吗?我会有什么问题吗?当几个访问者想要同时更新这个文件时会发生什么?
file_put_contents()的第三个参数"LOCK_EX"可以传递给"在进行写入时获取文件的独占锁"。不过,我同意@jszobody的观点,数据库将是最好的选择。
http://php.net/file_put_contents
int file_put_contents ( string $filename , mixed $data [, **int $flags = 0** [, resource $context ]] )
LOCK_EX Acquire an exclusive lock on the file while proceeding to the writing.
我相信php一次只处理一个请求,所以更新文件应该不是问题,但为什么不使用分析或任何其他方法呢。为您节省了一些负载,并为您提供了大量信息