5秒处理5千万的数据
浏览量:436
<?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操作文件处理完成,并记录文件

神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。