5秒处理5千万的数据
浏览量:431
<?php // 统计结果集合 $list = array(); //打开文件 文件是5000多万的数据量,需要统计 $handle = fopen ("2016-06-07.txt", "r"); // 分析日志 while (!feof($handle)) { $buffer = rtrim(fgets($handle)); if (empty($buffer)) { continue; } //数据格式 1377+13731d293a28d6424bf84561872ac1d4+tianjia+1465228800+1465266246 $a_info = explode('+', $buffer); //截取数据 //获取一个session开始时间和结束时间 if (!isset($list[$a_info[0]][$a_info[1]]['start_time'])) { $list[$a_info[0]][$a_info[1]]['start_time'] = $a_info[4]; } $list[$a_info[0]][$a_info[1]]['end_time'] = $a_info[4]; } fclose ($handle); echo "<pre>"; //统计在线时长,单位(分钟) foreach ($list as $k => $user) { // 多个session,在线时间重叠,排重计算时间段 $pre_user_k = null; $pre_session_info = null; foreach ($user as $uk => $session_info) { var_dump($session_info); var_dump($pre_session_info); if ($pre_session_info != null) { if (($session_info['start_time'] >= $pre_session_info['start_time']) && ($session_info['start_time'] <= $pre_session_info['end_time'])) { $user[$pre_user_k]['end_time'] = $session_info['end_time']; unset($user[$uk]); $pre_session_info = $user[$pre_user_k]; continue; } } $pre_session_info = $session_info; $pre_user_k = $uk; } // 在线时长换算为分钟 $online_seconds = 0; foreach ($user as $session_info) { $online_seconds += ($session_info['end_time'] - $session_info['start_time']); } $list[$k]['online_minute'] = ceil($online_seconds / 60); $online_seconds = 0; } file_put_contents('result.txt', json_encode($list));
记录客服操作的日志,并分析客服在线时长,直接处理文件太大,但是分割文件成小文件在存入数据库,数据量也太大,于是我想到不用mysql统计数据,直接用php操作文件处理完成,并记录文件
神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。