Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在刷新到mysql之前,如何处理memcache中的大页面显示_Php_Memcached_Analytics - Fatal编程技术网

Php 在刷新到mysql之前,如何处理memcache中的大页面显示

Php 在刷新到mysql之前,如何处理memcache中的大页面显示,php,memcached,analytics,Php,Memcached,Analytics,我正在写一个分析工具,每次点击一个页面都会记录下来。我面临的问题是,印象量可能会变得非常高,我可能需要每天处理数百万次,或者至少每秒处理300次(我的负责人说他们可以达到每秒10公里)。我目前的设置是,每次以插入方式直接访问MySQL innodb表中的页面时,php都会进行日志记录,这会变得很慢,而且服务器偶尔会错过一次点击,这对分析来说不是太糟糕,但并不理想。我的想法是将memcache放在前面,首先记录所有印象,然后运行计划的批处理过程,从memcache获取印象,然后在安静的时间(例如凌

我正在写一个分析工具,每次点击一个页面都会记录下来。我面临的问题是,印象量可能会变得非常高,我可能需要每天处理数百万次,或者至少每秒处理300次(我的负责人说他们可以达到每秒10公里)。我目前的设置是,每次以插入方式直接访问MySQL innodb表中的页面时,php都会进行日志记录,这会变得很慢,而且服务器偶尔会错过一次点击,这对分析来说不是太糟糕,但并不理想。我的想法是将memcache放在前面,首先记录所有印象,然后运行计划的批处理过程,从memcache获取印象,然后在安静的时间(例如凌晨3点)将其放入数据库。所以我的问题是

1) 这样做对吗?理想情况下,我不想实现任何新技术或实现NoSQL数据库,如mongo或Coach

2) 在memcache中我将如何执行此操作?由于无法找到缓存中当前的所有键,我想设置一个计数器,在每个印象中递增,然后设置一个键,将计数器作为包含数据的id,批处理过程将从其最后位置循环到计数器,并处理这些记录,然后将其最后位置设置为当前计数器

谢谢你的帮助


干杯

我不会创建一个seroperate批处理,而是将它集成到您的代码中

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

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

Memcached Manual如果你选择一些noSQL技术(我会推荐),你应该尝试redis,这是我认为最适合你的任务的技术…在这个例子中,视图和计数器之间的区别是什么?区别在于我没有注意到,计数器当然应该是视图。Edited.这种方法很有效,但是当并发添加到混合中时会出现问题,事情会相互覆盖!这是真的,您可以实现一个锁,正如我的注释所说,在我的示例中我还没有实现它。真的那么重要吗?因为密钥也可能被抛出memcached,这样会丢失更多的视图。由于高并发性,我经常遇到10个线程都访问相同的增量并相互践踏的情况!