diff --git a/README.md b/README.md index 18d860d..f93190b 100644 --- a/README.md +++ b/README.md @@ -2,142 +2,158 @@ A benchmark to compare the performance of golang orm package. -## Results (2014-1-7) +## Results (2014-8-22) ### Environment -* Aliyun Intel Xeon E5-2630 2.30GHz (4 core) +* MBP Intel Core i5 2.40GHz (2 cores) * 8G RAM -* CentOS 6.5 -* go version go1.2 linux/amd64 +* Mac OS X 10.9.4 +* go version go1.3.1 darwin/amd64 * [Go-MySQL-Driver Latest](https://github.com/go-sql-driver/mysql) ### MySQL -* MySQL 5.5.34 for Linux on x86_64 -* MySQL-server-5.5.34-1.rhel5.x86_64.rpm -* Config in my.cnf +* MySQL 5.6.13 Server for Mac OS X on x86_64 ### ORMs All package run in no-cache mode. -* [Beego ORM](http://beego.me/docs/mvc/model/overview.md) latest in branch [develop](https://github.com/astaxie/beego/tree/develop) -* [xorm](https://github.com/lunny/xorm) latest +* [Beego ORM](http://beego.me/docs/mvc/model/overview.md) latest +* [xorm](https://github.com/go-xorm/xorm) latest * [Hood](https://github.com/eaigner/hood) latest * [Qbs](https://github.com/coocood/qbs) latest (Disabled stmt cache / [patch](https://gist.github.com/slene/8297019) / [full](https://gist.github.com/slene/8297565)) ### Run ```go -go get github.com/beego/orm-benchmark -orm-benchmark -multi=20 -orm=all +go get github.com/nashtsai/orm-benchmark +cd $GOPATH/src/github.com/nashtsai/orm-benchmark +go build +./orm-benchmark -multi=5 -orm=all ``` ### Reports #### Sample 1 - ``` -40000 times - Insert - orm: 11.63s 290706 ns/op 1515 B/op 35 allocs/op - qbs: 12.92s 322982 ns/op 5846 B/op 111 allocs/op - xorm: 13.21s 330361 ns/op 2176 B/op 53 allocs/op - hood: 14.26s 356591 ns/op 14592 B/op 293 allocs/op - - 10000 times - MultiInsert 100 row - orm: 22.17s 2217284 ns/op 85061 B/op 854 allocs/op - xorm: 30.17s 3016717 ns/op 112572 B/op 1877 allocs/op + 10000 times - Insert + raw: 6.20s 619586 ns/op 329 B/op 10 allocs/op + qbs: 7.14s 714323 ns/op 5181 B/op 85 allocs/op + xorm: 7.78s 778007 ns/op 2356 B/op 63 allocs/op + orm: 8.69s 869307 ns/op 1573 B/op 38 allocs/op + hood: 9.65s 964711 ns/op 13497 B/op 193 allocs/op + + 2500 times - MultiInsert 100 row + raw: 9.80s 3920504 ns/op 50725 B/op 413 allocs/op + xorm: 11.28s 4513046 ns/op 116264 B/op 1864 allocs/op + orm: 13.36s 5343020 ns/op 88042 B/op 1245 allocs/op hood: Not support multi insert qbs: Not support multi insert - 40000 times - Update - orm: 12.77s 319335 ns/op 1463 B/op 34 allocs/op - qbs: 12.91s 322643 ns/op 5843 B/op 111 allocs/op - xorm: 12.93s 323136 ns/op 2500 B/op 73 allocs/op - hood: 14.53s 363331 ns/op 14578 B/op 293 allocs/op - - 80000 times - Read - orm: 19.57s 244639 ns/op 2762 B/op 81 allocs/op - hood: 19.76s 246961 ns/op 4981 B/op 96 allocs/op - qbs: 20.44s 255498 ns/op 8609 B/op 180 allocs/op - xorm: 27.35s 341934 ns/op 6807 B/op 193 allocs/op - - 40000 times - MultiRead limit 100 - orm: 39.32s 982898 ns/op 90386 B/op 3201 allocs/op - qbs: 62.58s 1564475 ns/op 221787 B/op 6151 allocs/op - xorm: 83.19s 2079663 ns/op 189770 B/op 6816 allocs/op - hood: 87.64s 2191093 ns/op 254457 B/op 9228 allocs/op + 10000 times - Update + qbs: 6.59s 659403 ns/op 5181 B/op 85 allocs/op + raw: 7.14s 714484 ns/op 343 B/op 10 allocs/op + xorm: 8.29s 829202 ns/op 2759 B/op 83 allocs/op + hood: 9.29s 928678 ns/op 13477 B/op 193 allocs/op + orm: 9.71s 970709 ns/op 1504 B/op 37 allocs/op + + 20000 times - Read + raw: 3.69s 184264 ns/op 921 B/op 23 allocs/op + qbs: 4.35s 217527 ns/op 7568 B/op 136 allocs/op + xorm: 5.82s 290913 ns/op 7186 B/op 177 allocs/op + hood: 7.31s 365405 ns/op 4831 B/op 68 allocs/op + orm: 7.56s 377792 ns/op 2772 B/op 75 allocs/op + + 10000 times - MultiRead limit 100 + xorm: 5.29s 528933 ns/op 35646 B/op 765 allocs/op + raw: 6.87s 687438 ns/op 32618 B/op 815 allocs/op + orm: 17.07s 1706562 ns/op 96891 B/op 3286 allocs/op + qbs: 19.64s 1963853 ns/op 221316 B/op 5216 allocs/op + hood: 22.66s 2265802 ns/op 239176 B/op 5552 allocs/op ``` #### Sample 2 - ``` - 40000 times - Insert - orm: 11.43s 285684 ns/op 1511 B/op 35 allocs/op - xorm: 12.32s 308044 ns/op 2182 B/op 53 allocs/op - qbs: 12.94s 323575 ns/op 5849 B/op 111 allocs/op - hood: 14.45s 361222 ns/op 14563 B/op 293 allocs/op - - 10000 times - MultiInsert 100 row - orm: 22.37s 2236512 ns/op 84921 B/op 853 allocs/op - xorm: 25.49s 2549191 ns/op 112714 B/op 1878 allocs/op - hood: Not support multi insert + 10000 times - Insert + raw: 6.39s 638549 ns/op 330 B/op 10 allocs/op + xorm: 6.86s 686125 ns/op 2364 B/op 63 allocs/op + qbs: 6.90s 689705 ns/op 5203 B/op 85 allocs/op + orm: 8.79s 879231 ns/op 1574 B/op 38 allocs/op + hood: 9.31s 930851 ns/op 13426 B/op 193 allocs/op + + 2500 times - MultiInsert 100 row + xorm: 7.50s 2999451 ns/op 116465 B/op 1864 allocs/op + raw: 8.59s 3435754 ns/op 50833 B/op 413 allocs/op + orm: 10.82s 4326730 ns/op 88097 B/op 1245 allocs/op qbs: Not support multi insert + hood: Not support multi insert - 40000 times - Update - orm: 12.95s 323640 ns/op 1460 B/op 34 allocs/op - qbs: 13.02s 325452 ns/op 5850 B/op 111 allocs/op - xorm: 13.13s 328245 ns/op 2503 B/op 73 allocs/op - hood: 14.70s 367445 ns/op 14559 B/op 293 allocs/op + 10000 times - Update + qbs: 6.98s 697781 ns/op 5199 B/op 85 allocs/op + xorm: 7.28s 727931 ns/op 2763 B/op 83 allocs/op + raw: 8.11s 811301 ns/op 344 B/op 10 allocs/op + orm: 9.45s 945375 ns/op 1505 B/op 37 allocs/op + hood: 9.81s 981114 ns/op 13425 B/op 193 allocs/op + + 20000 times - Read + raw: 3.65s 182250 ns/op 923 B/op 23 allocs/op + qbs: 4.61s 230311 ns/op 7600 B/op 136 allocs/op + xorm: 5.61s 280429 ns/op 7262 B/op 177 allocs/op + hood: 7.47s 373731 ns/op 4766 B/op 68 allocs/op + orm: 8.10s 404900 ns/op 2784 B/op 75 allocs/op + + 10000 times - MultiRead limit 100 + xorm: 5.74s 574265 ns/op 35584 B/op 765 allocs/op + raw: 6.77s 677382 ns/op 32672 B/op 815 allocs/op + orm: 17.02s 1701782 ns/op 97191 B/op 3286 allocs/op + qbs: 19.39s 1938879 ns/op 222771 B/op 5218 allocs/op + hood: 23.14s 2314262 ns/op 238526 B/op 5550 allocs/op +``` - 80000 times - Read - orm: 19.36s 241961 ns/op 2744 B/op 81 allocs/op - hood: 19.76s 246971 ns/op 4958 B/op 96 allocs/op - qbs: 20.47s 255905 ns/op 8628 B/op 180 allocs/op - xorm: 26.38s 329728 ns/op 6820 B/op 193 allocs/op +### Run2 - 40000 times - MultiRead limit 100 - orm: 39.48s 987091 ns/op 90160 B/op 3200 allocs/op - qbs: 63.17s 1579254 ns/op 221992 B/op 6152 allocs/op - xorm: 83.58s 2089464 ns/op 189706 B/op 6815 allocs/op - hood: 91.41s 2285256 ns/op 254087 B/op 9226 allocs/op +```go +./orm-benchmark -multi=20 -orm=all ``` -#### Sample 3 +### Reports + +#### Sample 1 ``` 40000 times - Insert - orm: 11.95s 298654 ns/op 1512 B/op 35 allocs/op - xorm: 12.47s 311666 ns/op 2179 B/op 53 allocs/op - qbs: 13.49s 337224 ns/op 5849 B/op 111 allocs/op - hood: 15.00s 374967 ns/op 14573 B/op 293 allocs/op + raw: 26.96s 674098 ns/op 329 B/op 10 allocs/op + xorm: 28.77s 719131 ns/op 2350 B/op 63 allocs/op + hood: 36.93s 923166 ns/op 13476 B/op 193 allocs/op + qbs: 38.12s 952943 ns/op 5174 B/op 85 allocs/op + orm: 49.44s 1235952 ns/op 1575 B/op 38 allocs/op 10000 times - MultiInsert 100 row - orm: 22.95s 2294502 ns/op 84920 B/op 853 allocs/op - xorm: 26.01s 2600964 ns/op 112579 B/op 1877 allocs/op - qbs: Not support multi insert + xorm: 39.27s 3926747 ns/op 116041 B/op 1863 allocs/op + raw: 39.80s 3979874 ns/op 50649 B/op 412 allocs/op + orm: 46.10s 4609617 ns/op 88066 B/op 1245 allocs/op hood: Not support multi insert + qbs: Not support multi insert 40000 times - Update - orm: 13.17s 329226 ns/op 1461 B/op 34 allocs/op - qbs: 13.27s 331845 ns/op 5847 B/op 111 allocs/op - xorm: 13.64s 340992 ns/op 2502 B/op 73 allocs/op - hood: 14.79s 369635 ns/op 14576 B/op 293 allocs/op + xorm: 32.31s 807782 ns/op 2754 B/op 83 allocs/op + raw: 33.28s 831928 ns/op 343 B/op 10 allocs/op + qbs: 33.74s 843511 ns/op 5174 B/op 85 allocs/op + orm: 39.70s 992435 ns/op 1505 B/op 37 allocs/op + hood: 43.85s 1096128 ns/op 13466 B/op 193 allocs/op 80000 times - Read - orm: 20.10s 251271 ns/op 2738 B/op 81 allocs/op - hood: 20.45s 255610 ns/op 4960 B/op 96 allocs/op - qbs: 21.13s 264091 ns/op 8651 B/op 180 allocs/op - xorm: 27.60s 345010 ns/op 6801 B/op 193 allocs/op + raw: 14.84s 185552 ns/op 921 B/op 23 allocs/op + qbs: 17.48s 218485 ns/op 7554 B/op 136 allocs/op + xorm: 22.73s 284130 ns/op 7078 B/op 177 allocs/op + hood: 29.56s 369516 ns/op 4798 B/op 68 allocs/op + orm: 30.70s 383693 ns/op 2766 B/op 75 allocs/op 40000 times - MultiRead limit 100 - orm: 40.36s 1008896 ns/op 90137 B/op 3200 allocs/op - qbs: 64.53s 1613287 ns/op 222005 B/op 6152 allocs/op - xorm: 81.46s 2036502 ns/op 189573 B/op 6815 allocs/op - hood: 90.95s 2273773 ns/op 253770 B/op 9225 allocs/op + xorm: 21.19s 529680 ns/op 35406 B/op 765 allocs/op + raw: 25.08s 626952 ns/op 32579 B/op 815 allocs/op + orm: 63.42s 1585418 ns/op 96642 B/op 3286 allocs/op + qbs: 73.63s 1840659 ns/op 221677 B/op 5215 allocs/op + hood: 88.25s 2206154 ns/op 239058 B/op 5552 allocs/op ``` - - -### Contact - -Maintain by [slene](https://github.com/slene) \ No newline at end of file diff --git a/README_old.md b/README_old.md new file mode 100644 index 0000000..4ae0822 --- /dev/null +++ b/README_old.md @@ -0,0 +1,143 @@ +# ORM Benchmark + +A benchmark to compare the performance of golang orm package. + +## Results (2014-1-7) + +### Environment + +* Aliyun Intel Xeon E5-2630 2.30GHz (4 core) +* 8G RAM +* CentOS 6.5 +* go version go1.2 linux/amd64 +* [Go-MySQL-Driver Latest](https://github.com/go-sql-driver/mysql) + +### MySQL + +* MySQL 5.5.34 for Linux on x86_64 +* MySQL-server-5.5.34-1.rhel5.x86_64.rpm +* Config in my.cnf + +### ORMs + +All package run in no-cache mode. + +* [Beego ORM](http://beego.me/docs/mvc/model/overview.md) latest in branch [develop](https://github.com/astaxie/beego/tree/develop) +* [xorm](https://github.com/go-xorm/xorm) latest +* [Hood](https://github.com/eaigner/hood) latest +* [Qbs](https://github.com/coocood/qbs) latest (Disabled stmt cache / [patch](https://gist.github.com/slene/8297019) / [full](https://gist.github.com/slene/8297565)) + +### Run + +```go +go get github.com/beego/orm-benchmark +orm-benchmark -multi=20 -orm=all +``` + +### Reports + +#### Sample 1 + +``` +40000 times - Insert + orm: 11.63s 290706 ns/op 1515 B/op 35 allocs/op + qbs: 12.92s 322982 ns/op 5846 B/op 111 allocs/op + xorm: 13.21s 330361 ns/op 2176 B/op 53 allocs/op + hood: 14.26s 356591 ns/op 14592 B/op 293 allocs/op + + 10000 times - MultiInsert 100 row + orm: 22.17s 2217284 ns/op 85061 B/op 854 allocs/op + xorm: 30.17s 3016717 ns/op 112572 B/op 1877 allocs/op + hood: Not support multi insert + qbs: Not support multi insert + + 40000 times - Update + orm: 12.77s 319335 ns/op 1463 B/op 34 allocs/op + qbs: 12.91s 322643 ns/op 5843 B/op 111 allocs/op + xorm: 12.93s 323136 ns/op 2500 B/op 73 allocs/op + hood: 14.53s 363331 ns/op 14578 B/op 293 allocs/op + + 80000 times - Read + orm: 19.57s 244639 ns/op 2762 B/op 81 allocs/op + hood: 19.76s 246961 ns/op 4981 B/op 96 allocs/op + qbs: 20.44s 255498 ns/op 8609 B/op 180 allocs/op + xorm: 27.35s 341934 ns/op 6807 B/op 193 allocs/op + + 40000 times - MultiRead limit 100 + orm: 39.32s 982898 ns/op 90386 B/op 3201 allocs/op + qbs: 62.58s 1564475 ns/op 221787 B/op 6151 allocs/op + xorm: 83.19s 2079663 ns/op 189770 B/op 6816 allocs/op + hood: 87.64s 2191093 ns/op 254457 B/op 9228 allocs/op +``` + +#### Sample 2 + +``` + 40000 times - Insert + orm: 11.43s 285684 ns/op 1511 B/op 35 allocs/op + xorm: 12.32s 308044 ns/op 2182 B/op 53 allocs/op + qbs: 12.94s 323575 ns/op 5849 B/op 111 allocs/op + hood: 14.45s 361222 ns/op 14563 B/op 293 allocs/op + + 10000 times - MultiInsert 100 row + orm: 22.37s 2236512 ns/op 84921 B/op 853 allocs/op + xorm: 25.49s 2549191 ns/op 112714 B/op 1878 allocs/op + hood: Not support multi insert + qbs: Not support multi insert + + 40000 times - Update + orm: 12.95s 323640 ns/op 1460 B/op 34 allocs/op + qbs: 13.02s 325452 ns/op 5850 B/op 111 allocs/op + xorm: 13.13s 328245 ns/op 2503 B/op 73 allocs/op + hood: 14.70s 367445 ns/op 14559 B/op 293 allocs/op + + 80000 times - Read + orm: 19.36s 241961 ns/op 2744 B/op 81 allocs/op + hood: 19.76s 246971 ns/op 4958 B/op 96 allocs/op + qbs: 20.47s 255905 ns/op 8628 B/op 180 allocs/op + xorm: 26.38s 329728 ns/op 6820 B/op 193 allocs/op + + 40000 times - MultiRead limit 100 + orm: 39.48s 987091 ns/op 90160 B/op 3200 allocs/op + qbs: 63.17s 1579254 ns/op 221992 B/op 6152 allocs/op + xorm: 83.58s 2089464 ns/op 189706 B/op 6815 allocs/op + hood: 91.41s 2285256 ns/op 254087 B/op 9226 allocs/op +``` + +#### Sample 3 +``` + 40000 times - Insert + orm: 11.95s 298654 ns/op 1512 B/op 35 allocs/op + xorm: 12.47s 311666 ns/op 2179 B/op 53 allocs/op + qbs: 13.49s 337224 ns/op 5849 B/op 111 allocs/op + hood: 15.00s 374967 ns/op 14573 B/op 293 allocs/op + + 10000 times - MultiInsert 100 row + orm: 22.95s 2294502 ns/op 84920 B/op 853 allocs/op + xorm: 26.01s 2600964 ns/op 112579 B/op 1877 allocs/op + qbs: Not support multi insert + hood: Not support multi insert + + 40000 times - Update + orm: 13.17s 329226 ns/op 1461 B/op 34 allocs/op + qbs: 13.27s 331845 ns/op 5847 B/op 111 allocs/op + xorm: 13.64s 340992 ns/op 2502 B/op 73 allocs/op + hood: 14.79s 369635 ns/op 14576 B/op 293 allocs/op + + 80000 times - Read + orm: 20.10s 251271 ns/op 2738 B/op 81 allocs/op + hood: 20.45s 255610 ns/op 4960 B/op 96 allocs/op + qbs: 21.13s 264091 ns/op 8651 B/op 180 allocs/op + xorm: 27.60s 345010 ns/op 6801 B/op 193 allocs/op + + 40000 times - MultiRead limit 100 + orm: 40.36s 1008896 ns/op 90137 B/op 3200 allocs/op + qbs: 64.53s 1613287 ns/op 222005 B/op 6152 allocs/op + xorm: 81.46s 2036502 ns/op 189573 B/op 6815 allocs/op + hood: 90.95s 2273773 ns/op 253770 B/op 9225 allocs/op +``` + + +### Contact + +Maintain by [slene](https://github.com/slene) \ No newline at end of file diff --git a/benchs/xorm.go b/benchs/xorm.go index 8f43566..75da0cc 100644 --- a/benchs/xorm.go +++ b/benchs/xorm.go @@ -3,7 +3,7 @@ package benchs import ( "fmt" - "github.com/lunny/xorm" + "github.com/go-xorm/xorm" ) var xo *xorm.Session @@ -21,8 +21,11 @@ func init() { engine.SetMaxIdleConns(ORM_MAX_IDLE) engine.SetMaxConns(ORM_MAX_CONN) + // cacher := xorm.NewLRUCacher(xorm.NewMemoryStore(), 1000000) + // engine.SetDefaultCacher(cacher) xo = engine.NewSession() + xo.IsAutoClose = false } } @@ -32,6 +35,7 @@ func XormInsert(b *B) { initDB() m = NewModel() }) + defer xo.Close() for i := 0; i < b.N; i++ { m.Id = 0 @@ -52,6 +56,7 @@ func XormInsertMulti(b *B) { ms = append(ms, NewModel()) } }) + defer xo.Close() for i := 0; i < b.N; i++ { if _, err := xo.InsertMulti(&ms); err != nil { @@ -68,6 +73,7 @@ func XormUpdate(b *B) { m = NewModel() xo.Insert(m) }) + defer xo.Close() for i := 0; i < b.N; i++ { if _, err := xo.Update(m); err != nil { @@ -84,6 +90,7 @@ func XormRead(b *B) { m = NewModel() xo.Insert(m) }) + defer xo.Close() for i := 0; i < b.N; i++ { if _, err := xo.Get(m); err != nil { @@ -107,6 +114,7 @@ func XormReadSlice(b *B) { } }) + defer xo.Close() for i := 0; i < b.N; i++ { var models []*Model if err := xo.Where("id > ?", 0).Limit(100).Find(&models); err != nil { diff --git a/main.go b/main.go index fa9ae8b..d657b87 100644 --- a/main.go +++ b/main.go @@ -8,7 +8,7 @@ import ( "strings" "time" - "github.com/beego/orm-benchmark/benchs" + "github.com/nashtsai/orm-benchmark/benchs" _ "github.com/go-sql-driver/mysql" )