分享
  1. 首页
  2. 文章

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

Clouder · · 4081 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

各位大佬,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大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
4081 次点击
16 回复 | 直到 2019年09月16日 10:36:16
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏