天天看點

Golang 導入csv檔案,千萬級資料導入優化Golang解析CSV檔案

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
			}
}
           

再大數量級,待後續!

如果有什麼建議,評論區見!