Jquery中文网 www.jquerycn.cn
Jquery中文网 >  后端编程  >  Go语言  >  正文 Go读取大量数据,开启多协程,将读取的文件内容导入数据库,出现丢失数据现象

Go读取大量数据,开启多协程,将读取的文件内容导入数据库,出现丢失数据现象

发布时间:2021-04-08   编辑:www.jquerycn.cn
jquery中文网为您提供Go读取大量数据,开启多协程,将读取的文件内容导入数据库,出现丢失数据现象等资源,欢迎您收藏本站,我们将为您提供最新的Go读取大量数据,开启多协程,将读取的文件内容导入数据库,出现丢失数据现象资源
各位大佬,Go新人,昨天写了一个数据库导入工具,从本地文件读取,处理完数据格式后,导入DbFileReadWriteChanel的数据是正确无缺少的,就在开启100协程写入数据,执行完毕后,发现导入后的数据表中缺少了100多条。<br>\ 清空数据表后,又运行,一次还是缺少,然后进行少量的数据测试,发现,还是丢失,但如果只是使用主线程,导入,则无问题。<br> 初步思考,代码出现问题的范围为一下代码块,请各位大佬协助,帮忙找一下问题所在,谢谢帮助。<br> ``` //将存入chanel中的数据导入到数据库表中 func (this *DbFileRead) ImportTable(DbFileReadWriteChanel chan DbFileRead, exitChan chan bool) error { for { v, ok := <-DbFileReadWriteChanel if !ok { break } //fmt.Println(v) _, sqlErr := Sqldb.Exec("INSERT INTO IPINFO_TABLE VALUES(?,?,?,?,?)", v.Id, v.StartIp, v.EndIp, v.County, v.Local) //Sqldb.Exec("UPDATE orders SET shipped_at=? WHERE id IN (?)", time.Now, []int64{11,22,33}) if sqlErr != nil { log.Printf("sql insert err is %v \n", sqlErr) return sqlErr } fmt.Printf("%d 当前已经完成 \n",v.Id) } defer Sqldb.Close() exitChan <- true close(exitChan) return nil } func main() { var dbfr *DbFileRead DbFileReadWriteChanel = make(chan DbFileRead, 600000) exitChan = make(chan bool,100) res, err := dbfr.ReadFile(FILEPATH) if err != nil && err == io.EOF { log.Printf("get file res success.") } handleResSlice := dbfr.HandleStringRes(res) dbfr.DbWriteChan(handleResSlice) //将handleResSlice 推入chanel中 //dbfr.ImportTable(DbFileReadWriteChanel, exitChan) for i:=0;i<100 ;i { go dbfr.ImportTable(DbFileReadWriteChanel, exitChan) } //time.Sleep(time.Second*10) for { v, ok := <-exitChan fmt.Println("exit ", v) if !ok { break } } } ```
到此这篇关于“Go读取大量数据,开启多协程,将读取的文件内容导入数据库,出现丢失数据现象”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
mysql常见出错代码中文解释
MySQL常见错误代码解析
HTML5中indexedDB 数据库的相关介绍
XML 用途
memcache是什么?
mysql innodb数据库引擎解析
indexedDB 数据库
Mysql数据库的导入和导出的测试
Mysql数据库备份方案讨论
java中redis主-主实现方案

[关闭]