[Groonga-commit] groonga/grnxx at dd1c2bd [master] Gnx: add a benchmark for db.InsertRow2() and db.SetValue2().

Back to archive index

susumu.yata null+****@clear*****
Tue Apr 7 22:12:28 JST 2015


susumu.yata	2015-04-07 22:12:28 +0900 (Tue, 07 Apr 2015)

  New Revision: dd1c2bd6042b38ad9d6b91521d25cb46ff9bcf2b
  https://github.com/groonga/grnxx/commit/dd1c2bd6042b38ad9d6b91521d25cb46ff9bcf2b

  Message:
    Gnx: add a benchmark for db.InsertRow2() and db.SetValue2().

  Modified files:
    go2/benchmark.go

  Modified: go2/benchmark.go (+121 -53)
===================================================================
--- go2/benchmark.go    2015-04-07 22:11:45 +0900 (730f230)
+++ go2/benchmark.go    2015-04-07 22:12:28 +0900 (76739a7)
@@ -65,50 +65,6 @@ func generateCommands() []string {
 			}
 		}
 	}
-
-//	columnsOption := strings.Join(columnNames, ",")
-//	numValues := len(columnNames)
-//	if *flagKey != "" {
-//		if columnsOption == "" {
-//			columnsOption = "_key"
-//		} else {
-//			columnsOption = "_key," + columnsOption
-//		}
-//		numValues += 1
-//	}
-//	loadPrefix := fmt.Sprintf("%s --table Table --columns '%s' --values ",
-//		*flagLoad, columnsOption)
-//	scanner := bufio.NewScanner(os.Stdin)
-//	for i := 0; i < *flagRows; i += *flagBlock {
-//		var blockValues [][]interface{}
-//		for j := 0; (j < *flagBlock) && ((i + j) < *flagRows); j++ {
-//			var rowValues []interface{}
-//			if *flagKey != "" {
-//				rowValues = append(rowValues, generateValue(*flagKey))
-//			}
-//			for _, columnType := range columnTypes {
-//				switch columnType {
-//				case "Text", "LongText":
-//					if scanner.Scan() {
-//						rowValues = append(rowValues, scanner.Text())
-//					} else {
-//						rowValues = append(rowValues, generateValue(columnType))
-//					}
-//				default:
-//					rowValues = append(rowValues, generateValue(columnType))
-//				}
-//			}
-//			blockValues = append(blockValues, rowValues)
-//		}
-//		bytes, err := json.Marshal(blockValues)
-//		if err != nil {
-//			log.Fatalln(err)
-//		}
-//		block := string(bytes)
-//		block = strings.Replace(block, "\\", "\\\\", -1)
-//		block = strings.Replace(block, "'", "\\'", -1)
-//		commands = append(commands, loadPrefix+"'"+block+"'")
-//	}
 	return commands
 }
 
@@ -582,16 +538,127 @@ func benchmarkDirect(commands []string, sources []interface{}) {
 	}
 	endTime := time.Now()
 	fmt.Println("elapsed:", endTime.Sub(startTime))
+}
 
-//	command := fmt.Sprintf("select %s --limit -1 --cache no", tableName)
-//	for i := 0; i < *flagPartition; i++ {
-//		jsonBytes, err := db.GroongaQuery(i, command)
-//		if err != nil {
-//			log.Println(err)
-//			return
-//		}
-//		fmt.Printf("result[%d]: %s\n", i, string(jsonBytes))
-//	}
+func benchmarkDirect2(commands []string, sources []interface{}) {
+	fmt.Println("benchmarkDirect2()")
+
+//	fmt.Println(sources)
+
+	db, dir, err := gnx.CreateTempDB("", "gnx-benchmark", *flagPartition)
+	if err != nil {
+		log.Fatalln(err)
+	}
+	defer os.RemoveAll(dir)
+	defer db.Close()
+	for _, command := range commands {
+		for i := 0; i < *flagPartition; i++ {
+//			fmt.Println(command)
+			if _, err := db.GroongaQuery(i, command); err != nil {
+				log.Fatalln(err)
+			}
+		}
+	}
+
+	file, err := os.Create("Direct2.prof")
+	if err != nil {
+		log.Fatalln(err)
+	}
+	defer file.Close()
+	if err := pprof.StartCPUProfile(file); err != nil {
+		log.Fatalln(err)
+	}
+	defer pprof.StopCPUProfile()
+
+	startTime := time.Now()
+	table, err := db.FindTable(tableName)
+	if err != nil {
+		log.Fatalln(err)
+	}
+	var columns []*gnx.Column
+	for _, columnName := range columnNames {
+		column, err := db.FindColumn(table, columnName)
+		if err != nil {
+			log.Fatalln(err)
+		}
+		columns = append(columns, column)
+	}
+	var rowIDs []gnx.Int
+	if *flagKey == "" {
+		for i := 0; i < *flagRows; i++ {
+			_, rowID, err := db.InsertRow2(table, nil)
+			if err != nil {
+				log.Fatalln(err)
+			}
+			rowIDs = append(rowIDs, rowID)
+		}
+	} else {
+		switch keys := sources[0].(type) {
+		case []gnx.Int:
+			for _, key := range keys {
+				_, rowID, err := db.InsertRow2(table, key)
+				if err != nil {
+					log.Fatalln(err)
+				}
+				rowIDs = append(rowIDs, rowID)
+			}
+		case []gnx.Float:
+			for _, key := range keys {
+				_, rowID, err := db.InsertRow2(table, key)
+				if err != nil {
+					log.Fatalln(err)
+				}
+				rowIDs = append(rowIDs, rowID)
+			}
+		case []gnx.Text:
+			for _, key := range keys {
+				_, rowID, err := db.InsertRow2(table, key)
+				if err != nil {
+					log.Fatalln(err)
+				}
+				rowIDs = append(rowIDs, rowID)
+			}
+		default:
+			log.Fatalln("unsupported key type")
+		}
+	}
+	for i, source := range sources {
+		if columnNames[i] == "_key" {
+			continue
+		}
+		switch values := source.(type) {
+		case []gnx.Bool:
+			for j, value := range values {
+				err := db.SetValue2(columns[i], rowIDs[j], value)
+				if err != nil {
+					log.Fatalln(err)
+				}
+			}
+		case []gnx.Int:
+			for j, value := range values {
+				err := db.SetValue2(columns[i], rowIDs[j], value)
+				if err != nil {
+					log.Fatalln(err)
+				}
+			}
+		case []gnx.Float:
+			for j, value := range values {
+				err := db.SetValue2(columns[i], rowIDs[j], value)
+				if err != nil {
+					log.Fatalln(err)
+				}
+			}
+		case []gnx.Text:
+			for j, value := range values {
+				err := db.SetValue2(columns[i], rowIDs[j], value)
+				if err != nil {
+					log.Fatalln(err)
+				}
+			}
+		}
+	}
+	endTime := time.Now()
+	fmt.Println("elapsed:", endTime.Sub(startTime))
 }
 
 func benchmark() {
@@ -608,6 +675,7 @@ func benchmark() {
 	benchmarkLoadC(commands, sources)
 	benchmarkLoadCMap(commands, sources)
 	benchmarkDirect(commands, sources)
+	benchmarkDirect2(commands, sources)
 }
 
 func print() {
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index