| 43 | } |
| 44 | |
| 45 | func insertData(db *sql.DB, tableName string, dataCount int64, pool *grpool.Pool) { |
| 46 | var i int64 |
| 47 | start := time.Now() |
| 48 | log.Infof("LOG: %v start time %v\n", tableName, start.String()) |
| 49 | var errCount int32 |
| 50 | |
| 51 | for i = 0; i < dataCount; i++ { |
| 52 | var vals [1024]byte |
| 53 | rand.Read(vals[:]) |
| 54 | data := string(vals[:]) |
| 55 | index := i |
| 56 | pool.WaitCount(1) |
| 57 | pool.JobQueue <- func() { |
| 58 | defer pool.JobDone() |
| 59 | _, err := db.Exec( |
| 60 | fmt.Sprintf("INSERT INTO `%s` VALUES (?, ?)", tableName), |
| 61 | index, data, |
| 62 | ) |
| 63 | if err != nil { |
| 64 | log.Errorf("Failed to insert data in database: %v %v\n", index, err) |
| 65 | atomic.AddInt32(&errCount, 1) |
| 66 | } else { |
| 67 | atomic.StoreInt32(&errCount, 0) |
| 68 | } |
| 69 | } |
| 70 | if i%10000 == 0 { |
| 71 | log.Infof("%v Inserted: %v %v\n", time.Now().Sub(start), tableName, i) |
| 72 | } |
| 73 | if errCount > 10000 { |
| 74 | log.Errorf("Error count reach max limit\n") |
| 75 | break |
| 76 | } |
| 77 | } |
| 78 | log.Infof("LOG: %v end time %v\n", tableName, time.Now().String()) |
| 79 | } |
| 80 | |
| 81 | func main() { |
| 82 | log.SetLevel(log.InfoLevel) |