go 协程批量查询数据库

go 协程批量查询数据库



func init() {
	dsn := fmt.Sprintf("%s:%s@%s(%s:%d)/%s", USERNAME, PASSWORD, NETWORK, SERVER, PORT, DATABASE)
	NEWDB, err = sql.Open("mysql", dsn)
	if err != nil {
		fmt.Printf("Open mysql failed,err:%v\n", err)
		return
	}
	//DB.SetConnMaxLifetime(1 * time.Second) //最大连接周期,超过时间的连接就close
	NEWDB.SetMaxOpenConns(8) //设置最大连接数
	NEWDB.SetMaxIdleConns(5) //设置闲置连接数
	fmt.Printf("数据库连接池准备成功")
}


func process() {
	//DB := NEWDB
	//4个携程,4个查询连接,还要写入,最少8个连接数
	total := 100
	process := 4
	pageSize := 10
	eachTimes := total / process //没给携程处理的条数
	for i := 0; i < process; i++ {
		startId := i * eachTimes
		endId := eachTimes * (i + 1)

		go func(i int, startId int) {
			subTotal := 0
			for {
				if startId >= endId {
					fmt.Println("已处理完毕:", subTotal)
					break
				}
				fmt.Println("[process]:", i, ",start_id: ", startId, "end_id:", endId, "limit: ", pageSize)

				signLog := new(SignInLog)
				rows, err := DB.Query("select * from sign_in_log  where id > ? and id<? limit ?", startId, endId, pageSize)
				if err != nil {
					fmt.Println(err)
				}
				for rows.Next() {
					rows.Scan()
					err := rows.Scan(
						&signLog.ID,
						&signLog.UserId,
						&signLog.RecentSignTime,
						&signLog.FirstSignTime,
						&signLog.SignType
					)
					if err != nil {
						fmt.Printf("err : %v \n", err)
						continue
					}
					fmt.Printf("%+v \n", signLog)
					//NewInsertData(signLog)
					subTotal++
				}
				defer rows.Close()
				startId += pageSize
			}
		}(i, startId)
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值