使用访问者计数器的文本文件/当不同的请求更新一个文件时会发生什么?

时间:2013-12-06 17:20:27

标签: php mysql

我在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);

有什么理由我不应该这样做吗?我会有任何问题吗? 当几个访问者想要同时更新此文件时会发生什么?

2 个答案:

答案 0 :(得分:0)

可以将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.

答案 1 :(得分:-2)

我相信php当时只处理一个请求,因此更新文件应该不是问题,但为什么不使用分析或任何其他。为您节省一些负担并为您提供大量信息