如何在刷新到mysql之前处理memcache中的大页面印象

时间:2011-06-09 10:57:17

标签: php memcached analytics

我正在编写一个分析工具,它实际上会在每次页面被点击时进行记录。我遇到的问题是印象数量可能会变得非常高,我可能需要每天处理数百万或每秒至少300次(我的头人说他们可以达到每秒10k)。我目前的设置是每次将页面作为插入直接插入MySQL innodb表时进行php日志记录,这变得很慢并且服务器似乎偶尔会错过一次对分析而言并不太糟糕但不太理想。我的想法是将memcache放在前面并首先记录所有印象,然后运行预定的批处理过程,该过程从memcache获取印象,然后在安静的时间段将它们放入数据库中,例如凌晨3点。所以我的问题是

1)这是正确的方法吗?理想情况下,我不想实现任何新技术或实现NoSQL数据库,如mongo或沙发。

2)我如何在memcache中执行此操作?由于无法找到当前缓存中的所有密钥,我正在考虑设置一个计数器,该计数器在每次展示时递增,然后一个计数器的密钥作为包含数据的id,批处理将从其最后位置循环到柜台并处理这些记录,然后将其最后位置设置为当前柜台..

感谢任何帮助

干杯

1 个答案:

答案 0 :(得分:0)

我不会创建单独的批处理,而是在代码中集成它。

请注意,这里没有检查/验证/锁定。一些伪代码:

$mViews = $oMemcache->get('views');
if ($mViews > 1000) {
    $oDatabase->update($mViews);
    $oMemcached->replace('views', 1);
}
else {
    $oMemcached->increment('views');
}