code: func batchRW(value []byte) {
  	wg := sync.WaitGroup{}
  	base := *dataCnt / *workerCnt
  	wg.Add(*workerCnt)
  	for i := 0; i < *workerCnt; i++ {
  		go func(i int) {
  			defer wg.Done()
  			for j := 0; j < base; j++ {
  				txnCounter.WithLabelValues("txn").Inc()
  				start := time.Now()
  				k := base*i + j
  				txn, err := store.Begin()
  				if err != nil {
  					log.Fatal(err.Error())
  				}
  				key := fmt.Sprintf("key_%d", k)
  				err = txn.Set([]byte(key), value)
  				terror.Log(errors.Trace(err))
  				err = txn.Commit(context.Background())
  				if err != nil {
  					txnRolledbackCounter.WithLabelValues("txn").Inc()
  					terror.Call(txn.Rollback)
  				}
  
  				txnDurations.WithLabelValues("txn").Observe(time.Since(start).Seconds())
  			}
  		}(i)
  	}
  	wg.Wait()
  }
docs: // batchRW makes sure conflict free.