需求:服务端有大量的log日志文件。需要取每个文件的其中两列导入到数据库中
第一版:简单实现
使用cat、awk每次提取一条记录导入到数据库
time cat /Users/wen/Downloads/*.txtaa | awk -F '#' '
{printf("insert into test.t_user_ip values(\"%s\",\"%s\");", $2,$4)}
' | mysql -h 127.0.0.1 -uroot -p123456
第二版:提高导入数据速度
每条SQL导入1000条数据,如果数据量巨大,使用此方法速度有明显提升。部分逻辑处理,使用php。
time cat /Users/wen/Downloads/*.txtaa | php -B '$data = array();' -R '
$tmp = explode("#", $argn);
$data[] = "(\"".$tmp["1"]."\", \"".$tmp["3"]."\")";
if(count($data) > 1000) {
$sql = "insert into test.t_user_ip values ".implode(",", $data).";";
$data = array();
echo $sql."\n";
}
' -E '
echo "insert into test.t_user_ip values ".implode(",", $data).";\n";
' | mysql -h 127.0.0.1 -uroot -p123456
** mysql只需要连接一次,然后循环读取SQL并执行 **
关注公众号"web创新之路”,就有机会天天听我瞎哔哔~