susumu.yata
null+****@clear*****
Fri May 8 10:43:33 JST 2015
susumu.yata 2015-05-08 10:43:33 +0900 (Fri, 08 May 2015) New Revision: 9366d0823b70042c5f8d3f98a89a4b1be7156bfb https://github.com/groonga/grnxx/commit/9366d0823b70042c5f8d3f98a89a4b1be7156bfb Message: Gnx: add benchmark for GrnColumn.SetValue(). Modified files: go3/gnx/grn_test.go Modified: go3/gnx/grn_test.go (+107 -0) =================================================================== --- go3/gnx/grn_test.go 2015-05-07 18:17:45 +0900 (e5faccf) +++ go3/gnx/grn_test.go 2015-05-08 10:43:33 +0900 (e6d6f6a) @@ -1,6 +1,7 @@ package gnx import ( + "fmt" "io/ioutil" "math/rand" "os" @@ -702,6 +703,112 @@ func TestGrnColumnGetValueForTextVector(t *testing.T) { var numTestRows = 100000 +func benchmarkGrnColumnSetValueForScalar(b *testing.B, valueType string) { + b.StopTimer() + dirPath, _, db, table := + createTempGrnTable(b, "Table", nil) + defer removeTempGrnDB(b, dirPath, db) + ids := make([]Int, numTestRows) + values := make([]interface{}, numTestRows) + for i, _ := range ids { + _, id, err := table.InsertRow(nil) + if err != nil { + b.Fatalf("Table.InsertRow() failed: %s", err) + } + ids[i] = id + values[i] = generateRandomValue(valueType) + } + + for i := 0; i < b.N; i++ { + column, err := table.CreateColumn(fmt.Sprintf("V%d", i), valueType, nil) + if err != nil { + b.Fatalf("Table.CreateColumn() failed(): %s", err) + } + b.StartTimer() + for i, id := range ids { + if err := column.SetValue(id, values[i]); err != nil { + b.Fatalf("Column.SetValue() failed: %s", err) + } + ids[i] = id + } + b.StopTimer() + } +} + +func benchmarkGrnColumnSetValueForVector(b *testing.B, valueType string) { + b.StopTimer() + dirPath, _, db, table := + createTempGrnTable(b, "Table", nil) + defer removeTempGrnDB(b, dirPath, db) + ids := make([]Int, numTestRows) + values := make([]interface{}, numTestRows) + for i, _ := range ids { + _, id, err := table.InsertRow(nil) + if err != nil { + b.Fatalf("Table.InsertRow() failed: %s", err) + } + ids[i] = id + values[i] = generateRandomVectorValue(valueType) + } + + for i := 0; i < b.N; i++ { + options := NewColumnOptions() + options.ColumnType = VectorColumn + column, err := table.CreateColumn(fmt.Sprintf("V%d", i), valueType, options) + if err != nil { + b.Fatalf("Table.CreateColumn() failed(): %s", err) + } + b.StartTimer() + for i, id := range ids { + if err := column.SetValue(id, values[i]); err != nil { + b.Fatalf("Column.SetValue() failed: %s", err) + } + ids[i] = id + } + b.StopTimer() + } +} + +func BenchmarkGrnColumnSetValueForBool(b *testing.B) { + benchmarkGrnColumnSetValueForScalar(b, "Bool") +} + +func BenchmarkGrnColumnSetValueForInt(b *testing.B) { + benchmarkGrnColumnSetValueForScalar(b, "Int") +} + +func BenchmarkGrnColumnSetValueForFloat(b *testing.B) { + benchmarkGrnColumnSetValueForScalar(b, "Float") +} + +func BenchmarkGrnColumnSetValueForGeoPoint(b *testing.B) { + benchmarkGrnColumnSetValueForScalar(b, "GeoPoint") +} + +func BenchmarkGrnColumnSetValueForText(b *testing.B) { + benchmarkGrnColumnSetValueForScalar(b, "Text") +} + +func BenchmarkGrnColumnSetValueForBoolVector(b *testing.B) { + benchmarkGrnColumnSetValueForVector(b, "Bool") +} + +func BenchmarkGrnColumnSetValueForIntVector(b *testing.B) { + benchmarkGrnColumnSetValueForVector(b, "Int") +} + +func BenchmarkGrnColumnSetValueForFloatVector(b *testing.B) { + benchmarkGrnColumnSetValueForVector(b, "Float") +} + +func BenchmarkGrnColumnSetValueForGeoPointVector(b *testing.B) { + benchmarkGrnColumnSetValueForVector(b, "GeoPoint") +} + +func BenchmarkGrnColumnSetValueForTextVector(b *testing.B) { + benchmarkGrnColumnSetValueForVector(b, "Text") +} + func benchmarkGrnColumnGetValueForScalar(b *testing.B, valueType string) { dirPath, _, db, table, column := createTempGrnColumn(b, "Table", nil, "Value", valueType, nil) -------------- next part -------------- HTML����������������������������...다운로드