mirror of https://github.com/VinGarcia/ksql.git
Add gorm to benchmarks
parent
e2899617f4
commit
23692d13d4
benchmarks
|
@ -11,6 +11,8 @@ import (
|
|||
_ "github.com/lib/pq"
|
||||
"github.com/vingarcia/ksql"
|
||||
"github.com/vingarcia/ksql/kpgx"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var UsersTable = ksql.NewTable("users")
|
||||
|
@ -21,13 +23,6 @@ func BenchmarkInsert(b *testing.B) {
|
|||
driver := "postgres"
|
||||
connStr := "host=localhost port=5432 user=postgres password=postgres dbname=ksql sslmode=disable"
|
||||
|
||||
ksqlDB, err := ksql.New(driver, connStr, ksql.Config{
|
||||
MaxOpenConns: 1,
|
||||
})
|
||||
if err != nil {
|
||||
b.FailNow()
|
||||
}
|
||||
|
||||
type User struct {
|
||||
ID int `ksql:"id" db:"id"`
|
||||
Name string `ksql:"name" db:"name"`
|
||||
|
@ -35,7 +30,14 @@ func BenchmarkInsert(b *testing.B) {
|
|||
}
|
||||
|
||||
b.Run("ksql-setup", func(b *testing.B) {
|
||||
err := recreateTable(connStr)
|
||||
ksqlDB, err := ksql.New(driver, connStr, ksql.Config{
|
||||
MaxOpenConns: 1,
|
||||
})
|
||||
if err != nil {
|
||||
b.Fatalf("error creating ksql client: %s", err)
|
||||
}
|
||||
|
||||
err = recreateTable(connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating table: %s", err.Error())
|
||||
}
|
||||
|
@ -53,22 +55,22 @@ func BenchmarkInsert(b *testing.B) {
|
|||
})
|
||||
})
|
||||
|
||||
pgxDB, err := kpgx.New(ctx, connStr, ksql.Config{
|
||||
MaxOpenConns: 1,
|
||||
})
|
||||
if err != nil {
|
||||
b.Fatalf("error creating pgx client: %s", err)
|
||||
}
|
||||
b.Run("kpgx-adapter-setup", func(b *testing.B) {
|
||||
kpgxDB, err := kpgx.New(ctx, connStr, ksql.Config{
|
||||
MaxOpenConns: 1,
|
||||
})
|
||||
if err != nil {
|
||||
b.Fatalf("error creating kpgx client: %s", err)
|
||||
}
|
||||
|
||||
b.Run("pgx-adapter-setup", func(b *testing.B) {
|
||||
err := recreateTable(connStr)
|
||||
err = recreateTable(connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating table: %s", err.Error())
|
||||
}
|
||||
|
||||
b.Run("insert-one", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
err := pgxDB.Insert(ctx, UsersTable, &User{
|
||||
err := kpgxDB.Insert(ctx, UsersTable, &User{
|
||||
Name: strconv.Itoa(i),
|
||||
Age: i,
|
||||
})
|
||||
|
@ -79,11 +81,14 @@ func BenchmarkInsert(b *testing.B) {
|
|||
})
|
||||
})
|
||||
|
||||
sqlxDB, err := sqlx.Open(driver, connStr)
|
||||
sqlxDB.SetMaxOpenConns(1)
|
||||
|
||||
b.Run("sqlx-setup", func(b *testing.B) {
|
||||
err := recreateTable(connStr)
|
||||
sqlxDB, err := sqlx.Open(driver, connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating sqlx client: %s", err)
|
||||
}
|
||||
sqlxDB.SetMaxOpenConns(1)
|
||||
|
||||
err = recreateTable(connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating table: %s", err.Error())
|
||||
}
|
||||
|
@ -110,6 +115,30 @@ func BenchmarkInsert(b *testing.B) {
|
|||
}
|
||||
})
|
||||
})
|
||||
|
||||
b.Run("gorm-adapter-setup", func(b *testing.B) {
|
||||
gormDB, err := gorm.Open(postgres.Open(connStr), &gorm.Config{})
|
||||
if err != nil {
|
||||
b.Fatalf("error creating gorm client: %s", err)
|
||||
}
|
||||
|
||||
err = recreateTable(connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating table: %s", err)
|
||||
}
|
||||
|
||||
b.Run("insert-one", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
err := gormDB.Table("users").Create(&User{
|
||||
Name: strconv.Itoa(i),
|
||||
Age: i,
|
||||
}).Error
|
||||
if err != nil {
|
||||
b.Fatalf("insert error: %s", err)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func BenchmarkQuery(b *testing.B) {
|
||||
|
@ -118,13 +147,6 @@ func BenchmarkQuery(b *testing.B) {
|
|||
driver := "postgres"
|
||||
connStr := "host=localhost port=5432 user=postgres password=postgres dbname=ksql sslmode=disable"
|
||||
|
||||
ksqlDB, err := ksql.New(driver, connStr, ksql.Config{
|
||||
MaxOpenConns: 1,
|
||||
})
|
||||
if err != nil {
|
||||
b.FailNow()
|
||||
}
|
||||
|
||||
type User struct {
|
||||
ID int `ksql:"id" db:"id"`
|
||||
Name string `ksql:"name" db:"name"`
|
||||
|
@ -132,7 +154,14 @@ func BenchmarkQuery(b *testing.B) {
|
|||
}
|
||||
|
||||
b.Run("ksql-setup", func(b *testing.B) {
|
||||
err := recreateTable(connStr)
|
||||
ksqlDB, err := ksql.New(driver, connStr, ksql.Config{
|
||||
MaxOpenConns: 1,
|
||||
})
|
||||
if err != nil {
|
||||
b.Fatalf("error creating ksql client: %s", err)
|
||||
}
|
||||
|
||||
err = recreateTable(connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating table: %s", err.Error())
|
||||
}
|
||||
|
@ -166,15 +195,15 @@ func BenchmarkQuery(b *testing.B) {
|
|||
})
|
||||
})
|
||||
|
||||
pgxDB, err := ksql.NewWithPGX(ctx, connStr, ksql.Config{
|
||||
MaxOpenConns: 1,
|
||||
})
|
||||
if err != nil {
|
||||
b.Fatalf("error creating pgx client: %s", err)
|
||||
}
|
||||
b.Run("kpgx-adapter-setup", func(b *testing.B) {
|
||||
kpgxDB, err := kpgx.New(ctx, connStr, ksql.Config{
|
||||
MaxOpenConns: 1,
|
||||
})
|
||||
if err != nil {
|
||||
b.Fatalf("error creating kpgx client: %s", err)
|
||||
}
|
||||
|
||||
b.Run("pgx-adapter-setup", func(b *testing.B) {
|
||||
err := recreateTable(connStr)
|
||||
err = recreateTable(connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating table: %s", err.Error())
|
||||
}
|
||||
|
@ -187,7 +216,7 @@ func BenchmarkQuery(b *testing.B) {
|
|||
b.Run("single-row", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
var user User
|
||||
err := pgxDB.QueryOne(ctx, &user, `SELECT * FROM users OFFSET $1 LIMIT 1`, i%100)
|
||||
err := kpgxDB.QueryOne(ctx, &user, `SELECT * FROM users OFFSET $1 LIMIT 1`, i%100)
|
||||
if err != nil {
|
||||
b.Fatalf("query error: %s", err.Error())
|
||||
}
|
||||
|
@ -197,7 +226,7 @@ func BenchmarkQuery(b *testing.B) {
|
|||
b.Run("multiple-rows", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
var users []User
|
||||
err := pgxDB.Query(ctx, &users, `SELECT * FROM users OFFSET $1 LIMIT 10`, i%90)
|
||||
err := kpgxDB.Query(ctx, &users, `SELECT * FROM users OFFSET $1 LIMIT 10`, i%90)
|
||||
if err != nil {
|
||||
b.Fatalf("query error: %s", err.Error())
|
||||
}
|
||||
|
@ -208,11 +237,14 @@ func BenchmarkQuery(b *testing.B) {
|
|||
})
|
||||
})
|
||||
|
||||
sqlxDB, err := sqlx.Open(driver, connStr)
|
||||
sqlxDB.SetMaxOpenConns(1)
|
||||
|
||||
b.Run("sqlx-setup", func(b *testing.B) {
|
||||
err := recreateTable(connStr)
|
||||
sqlxDB, err := sqlx.Open(driver, connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating sqlx client: %s", err)
|
||||
}
|
||||
sqlxDB.SetMaxOpenConns(1)
|
||||
|
||||
err = recreateTable(connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating table: %s", err.Error())
|
||||
}
|
||||
|
@ -249,7 +281,7 @@ func BenchmarkQuery(b *testing.B) {
|
|||
}
|
||||
for j := 0; j < 10; j++ {
|
||||
if !rows.Next() {
|
||||
b.Fatalf("missing user from inserted record, offset: %d", i%100)
|
||||
b.Fatalf("missing user from inserted record, offset: %d", i%90)
|
||||
}
|
||||
var user User
|
||||
rows.StructScan(&user)
|
||||
|
@ -266,6 +298,46 @@ func BenchmarkQuery(b *testing.B) {
|
|||
}
|
||||
})
|
||||
})
|
||||
|
||||
b.Run("gorm-setup", func(b *testing.B) {
|
||||
gormDB, err := gorm.Open(postgres.Open(connStr), &gorm.Config{})
|
||||
if err != nil {
|
||||
b.Fatalf("error creating gorm client: %s", err)
|
||||
}
|
||||
|
||||
err = recreateTable(connStr)
|
||||
if err != nil {
|
||||
b.Fatalf("error creating table: %s", err.Error())
|
||||
}
|
||||
|
||||
err = insertUsers(connStr, 100)
|
||||
if err != nil {
|
||||
b.Fatalf("error inserting users: %s", err.Error())
|
||||
}
|
||||
|
||||
b.Run("single-row", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
var user User
|
||||
err := gormDB.Table("users").Offset(i % 100).Take(&user).Error
|
||||
if err != nil {
|
||||
b.Fatalf("query error: %s", err)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
b.Run("multiple-rows", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
var users []User
|
||||
err := gormDB.Table("users").Offset(i % 90).Limit(10).Find(&users).Error
|
||||
if err != nil {
|
||||
b.Fatalf("query error: %s", err.Error())
|
||||
}
|
||||
if len(users) < 10 {
|
||||
b.Fatalf("expected 10 scanned users, but got: %d", len(users))
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func recreateTable(connStr string) error {
|
||||
|
|
|
@ -6,6 +6,8 @@ require (
|
|||
github.com/jmoiron/sqlx v1.3.4
|
||||
github.com/lib/pq v1.10.4
|
||||
github.com/vingarcia/ksql v1.1.0
|
||||
gorm.io/driver/postgres v1.2.2 // indirect
|
||||
gorm.io/gorm v1.22.3 // indirect
|
||||
)
|
||||
|
||||
replace github.com/vingarcia/ksql => ../
|
||||
|
|
|
@ -74,6 +74,10 @@ github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0f
|
|||
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||
github.com/jackc/puddle v1.1.3 h1:JnPg/5Q9xVJGfjsO5CPUOjnJps1JaRUm8I9FXVCFK94=
|
||||
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||
github.com/jinzhu/now v1.1.2 h1:eVKgfIdy9b6zbWBMgFpfDPoAMifwSZagU9HmEU6zgiI=
|
||||
github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
||||
github.com/jmoiron/sqlx v1.3.4 h1:wv+0IJZfL5z0uZoUjlpKgHkgaFSYD+r9CfrXjEXsO7w=
|
||||
github.com/jmoiron/sqlx v1.3.4/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ=
|
||||
|
@ -149,6 +153,8 @@ golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWP
|
|||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
|
@ -180,6 +186,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
|
@ -203,4 +211,9 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gorm.io/driver/postgres v1.2.2 h1:Ka9W6feOU+rPM9m007eYLMD4QoZuYGBnQ3Jp0faGSwg=
|
||||
gorm.io/driver/postgres v1.2.2/go.mod h1:Ik3tK+a3FMp8ORZl29v4b3M0RsgXsaeMXh9s9eVMXco=
|
||||
gorm.io/gorm v1.22.2/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0=
|
||||
gorm.io/gorm v1.22.3 h1:/JS6z+GStEQvJNW3t1FTwJwG/gZ+A7crFdRqtvG5ehA=
|
||||
gorm.io/gorm v1.22.3/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
|
|
Loading…
Reference in New Issue