63

GitHub - efectn/go-orm-benchmarks: Advanced benchmarks for +10 Go ORMs.

 3 years ago
source link: https://github.com/efectn/go-orm-benchmarks
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Go ORM Benchmarks

Advanced benchmarks for +10 Go ORMs. Originally forked from orm-benchmark.

All package run in no-cache mode.

See go.mod for their latest versions.

# install
go install github.com/efectn/go-orm-benchmarks@latest
# all
go-orm-benchmarks -multi=20 -orm=all
# portion
go-orm-benchmarks -multi=20 -orm=gorm
go-orm-benchmarks -multi=10 -orm=pg
go-orm-benchmarks -multi=15 -orm=bun
# ... and so on...

Note: Also, you can run ./run_benchmarks.sh and you can get output like results.md format.

Results

Benchmark Enviroment:

  • go version go1.18.1 linux/amd64
  • Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
  • 16GB 1600MHz memory
  • PostgreSQL 14.2

From results.md:

orm-benchmark -multi=20

  4000 times - Insert
       raw:    13.02s      3255212 ns/op     720 B/op     13 allocs/op
      gorp:    13.16s      3288827 ns/op    1783 B/op     42 allocs/op
      sqlc:    13.18s      3294672 ns/op    2885 B/op     63 allocs/op
 sqlboiler:    13.19s      3298647 ns/op    1576 B/op     35 allocs/op
       dbr:    13.47s      3367938 ns/op    2693 B/op     65 allocs/op
        pg:    13.58s      3393871 ns/op     806 B/op     10 allocs/op
       bun:    14.03s      3506665 ns/op    5014 B/op     14 allocs/op
      gorm:    14.56s      3639400 ns/op    6933 B/op     90 allocs/op
       ent:    14.77s      3693396 ns/op    4216 B/op    100 allocs/op
     beego:    14.91s      3726279 ns/op    2376 B/op     56 allocs/op
    reform:    15.27s      3816701 ns/op    1792 B/op     51 allocs/op
       rel:    15.30s      3824917 ns/op    2504 B/op     42 allocs/op
      xorm:    15.32s      3829436 ns/op    3327 B/op     89 allocs/op
      godb:    15.85s      3962599 ns/op    4559 B/op    115 allocs/op
     upper:    16.78s      4194212 ns/op   13775 B/op    673 allocs/op
       pop:    18.49s      4622682 ns/op   10084 B/op    249 allocs/op

  4000 times - MultiInsert 100 row
       raw:    25.01s      6253405 ns/op  191258 B/op    931 allocs/op
     beego:    25.12s      6279130 ns/op  179717 B/op   2746 allocs/op
        pg:    26.51s      6626510 ns/op    4120 B/op    112 allocs/op
    reform:    27.32s      6831205 ns/op  466461 B/op   2748 allocs/op
       bun:    28.48s      7121107 ns/op   42484 B/op    219 allocs/op
       ent:    29.63s      7406418 ns/op  412129 B/op   4900 allocs/op
      gorm:    32.42s      8105585 ns/op  272300 B/op   3729 allocs/op
       rel:    33.48s      8370838 ns/op  303994 B/op   3263 allocs/op
      godb:    35.75s      8938434 ns/op  260078 B/op   5895 allocs/op
      xorm:    40.19s     10046385 ns/op  255168 B/op   5417 allocs/op
     upper:    46.22s     11555653 ns/op  545167 B/op  19473 allocs/op
      gorp:     doesn't support bulk-insert
 sqlboiler:     doesn't support bulk-insert
       dbr:     doesn't support bulk-insert
       pop:     doesn't support bulk-insert
      sqlc:     doesn't support bulk-insert

  4000 times - Update
       raw:     0.42s       106196 ns/op     750 B/op     13 allocs/op
       ent:     0.56s       140521 ns/op    4558 B/op     99 allocs/op
    reform:    13.42s      3355531 ns/op    1775 B/op     51 allocs/op
      gorp:    13.45s      3362383 ns/op    1204 B/op     32 allocs/op
      sqlc:    13.47s      3368367 ns/op     876 B/op     14 allocs/op
     beego:    13.60s      3399569 ns/op    1753 B/op     47 allocs/op
        pg:    14.26s      3564773 ns/op     768 B/op      9 allocs/op
       bun:    14.33s      3581336 ns/op    4732 B/op      5 allocs/op
      gorm:    14.49s      3621870 ns/op    6604 B/op     81 allocs/op
 sqlboiler:    14.61s      3652173 ns/op     901 B/op     17 allocs/op
       dbr:    14.95s      3737299 ns/op    2651 B/op     57 allocs/op
      xorm:    15.11s      3777118 ns/op    3650 B/op    126 allocs/op
       pop:    15.57s      3892037 ns/op    6586 B/op    198 allocs/op
      godb:    16.16s      4040401 ns/op    5162 B/op    154 allocs/op
       rel:    16.84s      4209090 ns/op    2528 B/op     41 allocs/op
     upper:    25.06s      6263904 ns/op   33503 B/op   1502 allocs/op

  4000 times - Read
      sqlc:     0.49s       122556 ns/op    2172 B/op     52 allocs/op
       raw:     0.49s       123397 ns/op    2062 B/op     50 allocs/op
    reform:     0.51s       128650 ns/op    3199 B/op     86 allocs/op
       pop:     0.56s       139620 ns/op    3555 B/op     71 allocs/op
       bun:     0.57s       142709 ns/op    5495 B/op     21 allocs/op
       rel:     0.59s       146392 ns/op    1800 B/op     45 allocs/op
 sqlboiler:     0.63s       157321 ns/op     965 B/op     14 allocs/op
     beego:     0.63s       158172 ns/op    2088 B/op     75 allocs/op
        pg:     0.64s       160565 ns/op     872 B/op     20 allocs/op
       ent:     0.67s       168133 ns/op    5404 B/op    149 allocs/op
       dbr:     0.70s       174635 ns/op    2184 B/op     37 allocs/op
      gorp:     0.72s       180514 ns/op    3878 B/op    194 allocs/op
      gorm:     0.91s       227725 ns/op    5152 B/op     94 allocs/op
      godb:     1.22s       306069 ns/op    4113 B/op    102 allocs/op
      xorm:     1.31s       326767 ns/op    4618 B/op    125 allocs/op
     upper:     2.18s       545960 ns/op    8136 B/op    315 allocs/op

  4000 times - MultiRead limit 100
    reform:     0.72s       180644 ns/op    2927 B/op     74 allocs/op
       raw:     1.48s       370397 ns/op   38342 B/op   1038 allocs/op
     upper:     1.53s       382464 ns/op    7841 B/op    294 allocs/op
        pg:     1.87s       466911 ns/op   23856 B/op    629 allocs/op
      sqlc:     1.88s       468887 ns/op   73158 B/op   1251 allocs/op
 sqlboiler:     2.06s       516048 ns/op   58594 B/op   1260 allocs/op
       ent:     2.35s       587629 ns/op   76045 B/op   2039 allocs/op
      gorp:     2.37s       593522 ns/op   57389 B/op   1494 allocs/op
       pop:     2.74s       684419 ns/op   75921 B/op   1511 allocs/op
       bun:     2.80s       699047 ns/op   34025 B/op   1124 allocs/op
       dbr:     2.85s       711905 ns/op   32416 B/op   1545 allocs/op
     beego:     2.87s       717417 ns/op   55201 B/op   3077 allocs/op
      gorm:     3.66s       913801 ns/op   57181 B/op   2278 allocs/op
       rel:     6.59s      1647903 ns/op   95321 B/op   2248 allocs/op
      godb:     7.41s      1851727 ns/op   75289 B/op   3084 allocs/op
      xorm:     7.54s      1884039 ns/op  120000 B/op   4687 allocs/op

To-Do List:

  • Add sqlh.
  • Use benchmark tools of testing as benchmark suite.

License

go-orm-benchmarks is licensed under the terms of the MIT License (see LICENSE).


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK