需求:服務端有大量的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創新之路”,就有機會天天聽我瞎嗶嗶~