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

再大数量级,待后续!

如果有什么建议,评论区见!