gpt4 book ai didi

php - 如何在不破坏 MySQL 数据库的情况下跟踪页面浏览量

转载 作者:可可西里 更新时间:2023-11-01 06:31:56 25 4
gpt4 key购买 nike

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

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

这适用于中低流量。然而,在高流量下,持续写入数据库会导致高读写争用并最终导致数据库崩溃。

我已经在 Stackoverflow 和其他地方阅读了一些 QA,其中建议将 MongoDB 作为替代方案。但是,该选项不可用,我必须坚持使用 MySQL。此外,我无法控制引擎 — MyISAM 或 InnoDB(InnoDB 性能更好,因为基于行的锁定而不是表,如 MyISAM 的情况)。

考虑到上述情况,在不破坏数据库(在数据库或其他数据库中)的情况下跟踪综合浏览量的最佳可行方法是什么?我真的很感激提供代码片段作为起点的答案(如果可能的话)。

顺便说一句,我正在使用 PHP。

更新:@fire 在这里有一个很好的解决方案。但是,它需要使用内存缓存。我正在寻找无需特定基础设施即可轻松实现的东西。这是一个几乎可以在不同托管环境中使用的模块。转念一想,我想到的是某种基于 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);
}

关于php - 如何在不破坏 MySQL 数据库的情况下跟踪页面浏览量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13628627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com