Golang解析CSV檔案
- 讀取多檔案夾,可以開啟多個協程
var wg sync.WaitGroup
for index, dir := range Dirs {
wg.Add(1)
go readDir(dir)
}
wg.Wait()
周遊csv資料,拼接insert into,少量資料看不出啥問題,大量資料就有點殘廢了,10w資料耗時5min,經優化批量插入,耗時竟3s!!!看到差距了吧
當資料達到百萬級别,就有點崩潰了
wsarecv: an existing connection was forcibly closed by the remote host
繼續優化吧!
拆分資料分批導入,10w一個批次,1000w耗時3min,結果還能接受
var values []string
for i := 0; i <= len(list); i++ {
start := i * 100000
end := (i + 1) * 100000
if mod == 0 && i == len(list){
break
}
if i == len(list){
values = append(list[start:])
} else {
values = append(list[start:end])
}
result, err := tx.Exec(sqlCmd + fmt.Sprintf("values %s", strings.Join(values, ",")+";"))
if err != nil {
return err
}
}
再大數量級,待後續!
如果有什麼建議,評論區見!