2016-03-05 02:08:16 +03:00
|
|
|
package controller
|
|
|
|
|
|
|
|
func (c *Controller) cmdMassInsert(line string) error {
|
2016-03-28 18:57:41 +03:00
|
|
|
// // massinsert simply forwards a bunch of cmdSets
|
|
|
|
// var snumCols, snumPoints string
|
|
|
|
// var cols, objs int
|
|
|
|
// if line, snumCols = token(line); snumCols == "" {
|
|
|
|
// return errors.New("invalid number of arguments")
|
|
|
|
// }
|
|
|
|
// if line, snumPoints = token(line); snumPoints == "" {
|
|
|
|
// return errors.New("invalid number of arguments")
|
|
|
|
// }
|
|
|
|
// if line != "" {
|
|
|
|
// return errors.New("invalid number of arguments")
|
|
|
|
// }
|
|
|
|
// n, err := strconv.ParseUint(snumCols, 10, 64)
|
|
|
|
// if err != nil {
|
|
|
|
// return errors.New("invalid argument '" + snumCols + "'")
|
|
|
|
// }
|
|
|
|
// cols = int(n)
|
|
|
|
// n, err = strconv.ParseUint(snumPoints, 10, 64)
|
|
|
|
// if err != nil {
|
|
|
|
// return errors.New("invalid argument '" + snumPoints + "'")
|
|
|
|
// }
|
|
|
|
// docmd := func(cmd string) error {
|
|
|
|
// c.mu.Lock()
|
|
|
|
// defer c.mu.Unlock()
|
|
|
|
// _, d, err := c.command(cmd, nil)
|
|
|
|
// if err != nil {
|
|
|
|
// return err
|
|
|
|
// }
|
|
|
|
// if err := c.writeAOF(cmd, &d); err != nil {
|
|
|
|
// return err
|
|
|
|
// }
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
// rand.Seed(time.Now().UnixNano())
|
|
|
|
// objs = int(n)
|
|
|
|
// var wg sync.WaitGroup
|
|
|
|
// var k uint64
|
|
|
|
// wg.Add(cols)
|
|
|
|
// for i := 0; i < cols; i++ {
|
|
|
|
// key := "mi:" + strconv.FormatInt(int64(i), 10)
|
|
|
|
// go func(key string) {
|
|
|
|
// defer func() {
|
|
|
|
// wg.Done()
|
|
|
|
// }()
|
|
|
|
// for j := 0; j < objs; j++ {
|
|
|
|
// id := strconv.FormatInt(int64(j), 10)
|
|
|
|
// lat, lon := rand.Float64()*180-90, rand.Float64()*360-180
|
|
|
|
// var line string
|
|
|
|
// if true {
|
|
|
|
// fields := fmt.Sprintf("FIELD field %f", rand.Float64()*10)
|
|
|
|
// line = fmt.Sprintf(`set %s %s %s POINT %f %f`, key, id, fields, lat, lon)
|
|
|
|
// } else {
|
|
|
|
// line = fmt.Sprintf(`set %s %s POINT %f %f`, key, id, lat, lon)
|
|
|
|
// }
|
|
|
|
// if err := docmd(line); err != nil {
|
|
|
|
// log.Fatal(err)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
// atomic.AddUint64(&k, 1)
|
|
|
|
// if j%10000 == 10000-1 {
|
|
|
|
// log.Infof("massinsert: %s %d/%d", key, atomic.LoadUint64(&k), cols*objs)
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }(key)
|
|
|
|
// }
|
|
|
|
// wg.Wait()
|
|
|
|
// log.Infof("massinsert: done %d objects", atomic.LoadUint64(&k))
|
2016-03-05 02:08:16 +03:00
|
|
|
return nil
|
|
|
|
}
|