php – 如何在不破坏MySQL数据库的情况下跟踪综合浏览量

我正在尝试使用以下查询跟踪 MySQL数据库中的网页浏览:

“UPDATE $table SET pageviews = pageviews 1 WHERE page_id = 1”

这适用于低到中等流量.但是,在高流量时,对DB的不断写入会导致高读/写争用,并最终导致DB崩溃.

我已经在Stackoverflow和其他地方阅读了几个QA,其中建议使用MongoDB作为替代方案.但是,这个选择不可用,我必须坚持使用MysqL.此外,我无法控制引擎 – MyISAM或InnoDB(InnoDB由于基于行的锁定而不是表格而表现更好,如MyISAM的情况).

考虑到上面的场景,在不破坏数据库(在数据库或其他情况下)的情况下,跟踪网页浏览的最佳方法是什么?我真的很感激答案提供代码片段作为起点(如果可行).

顺便说一下,我正在使用PHP.

更新:
@fire在这里有一个很好的解决方案.但是,它需要使用memcache.我正在寻找一些可以轻松实现而无需特定基础知识的东西.这适用于几乎可以在不同托管环境中使用的模块.在第二个想法,我想到的是某种基于cookie或文件日志的实现.我不确定这种实施如何在实践中发挥作用.我们非常欢迎任何进一步的投入

我会使用memcached来存储计数,然后将它与cron上的数据库同步…
// Increment
$page_id = 1;
$memcache = new Memcache();
$memcache->connect('localhost',11211);

if (!$memcache->get('page_' . $page_id)) {
    $memcache->set('page_' . $page_id,1);
}
else {
    $memcache->increment('page_' . $page_id,1);
}

// Cron
if ($pageviews = $memcache->get('page_' . $page_id)) {
    $sql = "UPDATE pages SET pageviews = pageviews + " . $pageviews . " WHERE page_id = " . $page_id;
    MysqL_query($sql);
    $memcache->delete('page_' . $page_id);
}

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...