Skip to content

Latest commit

 

History

History
1071 lines (1061 loc) · 36.8 KB

File metadata and controls

1071 lines (1061 loc) · 36.8 KB

PocketBase v0.36.0 (Go 1.25.6)

Creating organizations (100)

Creating 50 organizations [reqs:50, conc:10, rule:""]

┌─ Best:      2.572356ms
├─ Worst:     22.558374ms
├─ Completed: 65.810335ms
└─ Errors:    0

Creating 50 organizations [reqs:50, conc:10, rule:"@request.body.name != ''"]

┌─ Best:      2.067197ms
├─ Worst:     21.466398ms
├─ Completed: 46.87488ms
└─ Errors:    0

Creating permissions (50)

Creating 25 permissions [reqs:25, conc:5, rule:""]

┌─ Best:      1.551567ms
├─ Worst:     14.903823ms
├─ Completed: 36.491651ms
└─ Errors:    0

Creating 25 permissions [reqs:25, conc:5, rule:"@request.body.name != ''"]

┌─ Best:      1.35554ms
├─ Worst:     3.843793ms
├─ Completed: 14.355129ms
└─ Errors:    0

Creating users (500 - expected to be slow due to passwordHash generation)

Creating 250 users [reqs:250, conc:50, rule:""]

┌─ Best:      273.7997ms
├─ Worst:     678.328157ms
├─ Completed: 2.408875354s
└─ Errors:    0

Creating 250 users [reqs:250, conc:50, rule:"@request.body.email != '' && @request.body.permissions:length > 0"]

┌─ Best:      197.66017ms
├─ Worst:     819.6233ms
├─ Completed: 2.499854322s
└─ Errors:    0

Creating posts (10k, 25k, 50k, 100k)

Creating 5000 posts10k [reqs:5000, conc:500, rule:""]

┌─ Best:      1.174603ms
├─ Worst:     1.965514503s
├─ Completed: 2.295052393s
└─ Errors:    0

Creating 5000 posts10k [reqs:5000, conc:500, rule:"@request.auth.id != '' && @request.body.public:isset = true"]

┌─ Best:      2.115076ms
├─ Worst:     1.951631338s
├─ Completed: 3.110882052s
└─ Errors:    0

Creating 12500 posts25k [reqs:12500, conc:500, rule:""]

┌─ Best:      1.131038ms
├─ Worst:     2.066015155s
├─ Completed: 5.741036266s
└─ Errors:    0

Creating 12500 posts25k [reqs:12500, conc:500, rule:"@request.auth.id != '' && @request.body.public:isset = true"]

┌─ Best:      1.74767ms
├─ Worst:     2.44321175s
├─ Completed: 5.793545959s
└─ Errors:    0

Creating 25000 posts50k [reqs:25000, conc:500, rule:""]

┌─ Best:      1.201201ms
├─ Worst:     2.753118739s
├─ Completed: 14.173781102s
└─ Errors:    0

Creating 25000 posts50k [reqs:25000, conc:500, rule:"@request.auth.id != '' && @request.body.public:isset = true"]

┌─ Best:      2.296127ms
├─ Worst:     8.051243208s
├─ Completed: 29.69433299s
└─ Errors:    0

Creating 50000 posts100k [reqs:50000, conc:500, rule:""]

┌─ Best:      1.297243ms
├─ Worst:     11.78575898s
├─ Completed: 49.583212883s
└─ Errors:    0

Creating 50000 posts100k [reqs:50000, conc:500, rule:"@request.auth.id != '' && @request.body.public:isset = true"]

┌─ Best:      1.50099ms
├─ Worst:     5.330017124s
├─ Completed: 32.809516241s
└─ Errors:    0

User auth with password (expected to be slow due to passwordHash verification)

users auth with email/pass - high concurrency [reqs:250, conc:250]

┌─ Best:      379.020023ms
├─ Worst:     1.394225787s
├─ Completed: 1.394781868s
└─ Errors:    0

users auth with email/pass - small concurrency [reqs:250, conc:10]

┌─ Best:      69.912977ms
├─ Worst:     99.426487ms
├─ Completed: 1.977028362s
└─ Errors:    0

User auth refresh

users - auth refresh (high concurrency) [reqs:1000, conc:1000]

┌─ Best:      19.003101ms
├─ Worst:     280.410359ms
├─ Completed: 282.324245ms
└─ Errors:    0

users - auth refresh (medium concurrency) [reqs:1000, conc:100]

┌─ Best:      577.303µs
├─ Worst:     254.133594ms
├─ Completed: 256.750956ms
└─ Errors:    0

List records

users - getOne for auth refresh comparison (medium concurrency) [reqs:1000, conc:100, rule:"", query:/n4bipcf45ea0k3g]

┌─ Best:      758.818µs
├─ Worst:     228.655898ms
├─ Completed: 238.590419ms
└─ Errors:    0

users - getOne for auth refresh comparison (high concurrency) [reqs:1000, conc:1000, rule:"", query:/n4bipcf45ea0k3g]

┌─ Best:      23.148879ms
├─ Worst:     274.903164ms
├─ Completed: 277.736236ms
└─ Errors:    0

posts10k - simpleA (many requests, no rules, no concurrency) [reqs:1000, conc:1, rule:"", query:?perPage=20]

┌─ Best:      2.729034ms
├─ Worst:     12.578159ms
├─ Completed: 5.409520949s
└─ Errors:    0

posts10k - simpleB (many requests, no rules, high concurrency) [reqs:1000, conc:1000, rule:"", query:?perPage=20]

┌─ Best:      26.306863ms
├─ Worst:     886.706939ms
├─ Completed: 896.41329ms
└─ Errors:    0

posts10k - simpleC (many requests, no rules, high concurrency, skipTotal) [reqs:1000, conc:1000, rule:"", query:?perPage=20&skipTotal=1]

┌─ Best:      23.991666ms
├─ Worst:     445.296417ms
├─ Completed: 446.45515ms
└─ Errors:    0

posts10k - mixed read and write (simpleA list with additional 300 concurrent random posts10k updates running in the background) [reqs:1000, conc:1000, rule:"", query:?perPage=20]

┌─ Best:      58.306327ms
├─ Worst:     1.229234592s
├─ Completed: 1.233937174s
└─ Errors:    0

posts10k - expand author [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author]

┌─ Best:      4.742127ms
├─ Worst:     44.457019ms
├─ Completed: 127.096995ms
└─ Errors:    0

posts10k - expand author (limited fields) [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author&fields=id,collectionId,expand.author.id]

┌─ Best:      5.606097ms
├─ Worst:     28.94579ms
├─ Completed: 150.248896ms
└─ Errors:    0

posts10k - expand author.permissions [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author.permissions]

┌─ Best:      7.496916ms
├─ Worst:     38.871836ms
├─ Completed: 158.008607ms
└─ Errors:    0

posts10k - expand author.permissions (limited fields) [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author.permissions&fields=id,collectionId,expand.author.id,expand.author.expand.permissions.id]

┌─ Best:      8.858166ms
├─ Worst:     50.299537ms
├─ Completed: 190.034756ms
└─ Errors:    0

posts10k - simple auth rule [reqs:100, conc:10, rule:"@request.auth.id != ''", query:?perPage=20]

┌─ Best:      3.467932ms
├─ Worst:     29.785538ms
├─ Completed: 89.541947ms
└─ Errors:    0

posts10k - author check (no index) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20]

┌─ Best:      82.482169ms
├─ Worst:     502.961875ms
├─ Completed: 1.521148406s
└─ Errors:    0

posts10k - author check (with index) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20]

┌─ Best:      1.41855ms
├─ Worst:     139.198103ms
├─ Completed: 256.559173ms
└─ Errors:    0

posts10k - author check (with index and skipTotal) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20&skipTotal=1]

┌─ Best:      1.245537ms
├─ Worst:     49.170393ms
├─ Completed: 99.100755ms
└─ Errors:    0

posts10k - author.id (extra join) check (no index) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20]

┌─ Best:      44.801956ms
├─ Worst:     820.247768ms
├─ Completed: 1.878285939s
└─ Errors:    0

posts10k - author.id (extra join) check (with index) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20]

┌─ Best:      1.478402ms
├─ Worst:     156.756782ms
├─ Completed: 212.921577ms
└─ Errors:    0

posts10k - author.id (extra join) check (with index and skipTotal) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20&skipTotal=1]

┌─ Best:      1.280774ms
├─ Worst:     51.093643ms
├─ Completed: 97.599366ms
└─ Errors:    0

posts10k - loose large text search (no index) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20]

┌─ Best:      52.491872ms
├─ Worst:     491.316776ms
├─ Completed: 1.337481403s
└─ Errors:    0

posts10k - loose large text search (with index) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20]

┌─ Best:      31.436487ms
├─ Worst:     521.396606ms
├─ Completed: 1.121031971s
└─ Errors:    0

posts10k - loose large text search (with index and skipTotal) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20&skipTotal=1]

┌─ Best:      3.092743ms
├─ Worst:     125.611579ms
├─ Completed: 294.617866ms
└─ Errors:    0

posts10k - multiple select :each (no index, match-all) [reqs:100, conc:10, rule:"type:each != 'c'", query:?perPage=20]

┌─ Best:      609.12199ms
├─ Worst:     1.534996167s
├─ Completed: 8.681969668s
└─ Errors:    0

posts10k - multiple select :each (no index, match-all, skipTotal) [reqs:100, conc:10, rule:"type:each != 'c'", query:?perPage=20&skipTotal=1]

┌─ Best:      3.388366ms
├─ Worst:     101.420411ms
├─ Completed: 186.864025ms
└─ Errors:    0

posts10k - multiple select :each (no index, at-least-one) [reqs:100, conc:10, rule:"type:each ?!= 'c'", query:?perPage=20]

┌─ Best:      131.973238ms
├─ Worst:     633.175599ms
├─ Completed: 2.338355973s
└─ Errors:    0

posts10k - multiple select :each (no index, at-least-one, skipTotal) [reqs:100, conc:10, rule:"type:each ?!= 'c'", query:?perPage=20&skipTotal=1]

┌─ Best:      1.980659ms
├─ Worst:     117.307875ms
├─ Completed: 183.384815ms
└─ Errors:    0

posts10k - nested single relations lookup (no indexes) [reqs:100, conc:10, rule:"author.organization.name != 'test'", query:?perPage=20]

┌─ Best:      459.175683ms
├─ Worst:     1.272005385s
├─ Completed: 7.611709312s
└─ Errors:    0

posts10k - nested single relations lookup (no indexes, skipTotal) [reqs:100, conc:10, rule:"author.organization.name != 'test'", query:?perPage=20&skipTotal=1]

┌─ Best:      2.67312ms
├─ Worst:     177.873357ms
├─ Completed: 297.413427ms
└─ Errors:    0

posts10k - nested multiple relations lookup (no indexes, match-all) [reqs:100, conc:10, rule:"author.permissions.active = true", query:?perPage=20]

┌─ Best:      1.376870824s
├─ Worst:     4.060105965s
├─ Completed: 24.670121597s
└─ Errors:    0

posts10k - nested multiple relations lookup (no indexes, match-all, skipTotal) [reqs:100, conc:10, rule:"author.permissions.active = true", query:?perPage=20&skipTotal=1]

┌─ Best:      12.76943ms
├─ Worst:     126.130174ms
├─ Completed: 292.187979ms
└─ Errors:    0

posts10k - nested multiple relations lookup (no indexes, at-least-one) [reqs:100, conc:10, rule:"author.permissions.active ?= true", query:?perPage=20]

┌─ Best:      945.785472ms
├─ Worst:     2.601170735s
├─ Completed: 12.544204803s
└─ Errors:    0

posts10k - nested multiple relations lookup (no indexes, at-least-one, skipTotal) [reqs:100, conc:10, rule:"author.permissions.active ?= true", query:?perPage=20&skipTotal=1]

┌─ Best:      4.922735ms
├─ Worst:     83.062842ms
├─ Completed: 172.505326ms
└─ Errors:    0

posts25k - simpleA (many requests, no rules, no concurrency) [reqs:1000, conc:1, rule:"", query:?perPage=20]

┌─ Best:      3.414259ms
├─ Worst:     10.273744ms
├─ Completed: 5.293858352s
└─ Errors:    0

posts25k - simpleB (many requests, no rules, high concurrency) [reqs:1000, conc:1000, rule:"", query:?perPage=20]

┌─ Best:      22.881166ms
├─ Worst:     1.021967273s
├─ Completed: 1.024946613s
└─ Errors:    0

posts25k - simpleC (many requests, no rules, high concurrency, skipTotal) [reqs:1000, conc:1000, rule:"", query:?perPage=20&skipTotal=1]

┌─ Best:      65.901962ms
├─ Worst:     332.297068ms
├─ Completed: 334.154608ms
└─ Errors:    0

posts25k - mixed read and write (simpleA list with additional 300 concurrent random posts25k updates running in the background) [reqs:1000, conc:1000, rule:"", query:?perPage=20]

┌─ Best:      112.697392ms
├─ Worst:     1.71174035s
├─ Completed: 1.7136608s
└─ Errors:    0

posts25k - expand author [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author]

┌─ Best:      7.086648ms
├─ Worst:     54.921776ms
├─ Completed: 158.715548ms
└─ Errors:    0

posts25k - expand author (limited fields) [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author&fields=id,collectionId,expand.author.id]

┌─ Best:      7.790236ms
├─ Worst:     49.012821ms
├─ Completed: 169.622379ms
└─ Errors:    0

posts25k - expand author.permissions [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author.permissions]

┌─ Best:      9.488102ms
├─ Worst:     101.715186ms
├─ Completed: 252.254479ms
└─ Errors:    0

posts25k - expand author.permissions (limited fields) [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author.permissions&fields=id,collectionId,expand.author.id,expand.author.expand.permissions.id]

┌─ Best:      11.844252ms
├─ Worst:     98.266497ms
├─ Completed: 284.146803ms
└─ Errors:    0

posts25k - simple auth rule [reqs:100, conc:10, rule:"@request.auth.id != ''", query:?perPage=20]

┌─ Best:      5.808418ms
├─ Worst:     52.691761ms
├─ Completed: 132.926563ms
└─ Errors:    0

posts25k - author check (no index) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20]

┌─ Best:      123.812934ms
├─ Worst:     963.330262ms
├─ Completed: 2.808385005s
└─ Errors:    0

posts25k - author check (with index) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20]

┌─ Best:      1.74781ms
├─ Worst:     303.794301ms
├─ Completed: 348.927831ms
└─ Errors:    0

posts25k - author check (with index and skipTotal) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20&skipTotal=1]

┌─ Best:      2.196183ms
├─ Worst:     45.984689ms
├─ Completed: 134.81608ms
└─ Errors:    0

posts25k - author.id (extra join) check (no index) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20]

┌─ Best:      149.151726ms
├─ Worst:     1.96727627s
├─ Completed: 4.341952389s
└─ Errors:    0

posts25k - author.id (extra join) check (with index) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20]

┌─ Best:      2.101864ms
├─ Worst:     325.72623ms
├─ Completed: 440.963688ms
└─ Errors:    0

posts25k - author.id (extra join) check (with index and skipTotal) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20&skipTotal=1]

┌─ Best:      1.837189ms
├─ Worst:     68.261085ms
├─ Completed: 231.55066ms
└─ Errors:    0

posts25k - loose large text search (no index) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20]

┌─ Best:      139.292578ms
├─ Worst:     1.554289787s
├─ Completed: 3.948279618s
└─ Errors:    0

posts25k - loose large text search (with index) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20]

┌─ Best:      107.15488ms
├─ Worst:     1.209776596s
├─ Completed: 2.944530381s
└─ Errors:    0

posts25k - loose large text search (with index and skipTotal) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20&skipTotal=1]

┌─ Best:      2.548966ms
├─ Worst:     203.034216ms
├─ Completed: 350.449699ms
└─ Errors:    0

posts25k - multiple select :each (no index, match-all) [reqs:100, conc:10, rule:"type:each != 'c'", query:?perPage=20]

┌─ Best:      2.281403763s
├─ Worst:     4.157239156s
├─ Completed: 29.183843808s
└─ Errors:    0

posts25k - multiple select :each (no index, match-all, skipTotal) [reqs:100, conc:10, rule:"type:each != 'c'", query:?perPage=20&skipTotal=1]

┌─ Best:      4.637239ms
├─ Worst:     191.434877ms
├─ Completed: 406.923211ms
└─ Errors:    0

posts25k - multiple select :each (no index, at-least-one) [reqs:100, conc:10, rule:"type:each ?!= 'c'", query:?perPage=20]

┌─ Best:      154.635021ms
├─ Worst:     2.103815859s
├─ Completed: 6.740861761s
└─ Errors:    0

posts25k - multiple select :each (no index, at-least-one, skipTotal) [reqs:100, conc:10, rule:"type:each ?!= 'c'", query:?perPage=20&skipTotal=1]

┌─ Best:      2.548702ms
├─ Worst:     308.064043ms
├─ Completed: 446.146801ms
└─ Errors:    0

posts25k - nested single relations lookup (no indexes) [reqs:100, conc:10, rule:"author.organization.name != 'test'", query:?perPage=20]

┌─ Best:      1.286843227s
├─ Worst:     3.173248885s
├─ Completed: 18.291408665s
└─ Errors:    0

posts25k - nested single relations lookup (no indexes, skipTotal) [reqs:100, conc:10, rule:"author.organization.name != 'test'", query:?perPage=20&skipTotal=1]

┌─ Best:      2.157095ms
├─ Worst:     140.800084ms
├─ Completed: 186.055875ms
└─ Errors:    0

posts25k - nested multiple relations lookup (no indexes, match-all) [reqs:100, conc:10, rule:"author.permissions.active = true", query:?perPage=20]

┌─ Best:      2.818846425s
├─ Worst:     5.049525499s
├─ Completed: 39.683311298s
└─ Errors:    0

posts25k - nested multiple relations lookup (no indexes, match-all, skipTotal) [reqs:100, conc:10, rule:"author.permissions.active = true", query:?perPage=20&skipTotal=1]

┌─ Best:      19.458125ms
├─ Worst:     228.3481ms
├─ Completed: 471.007727ms
└─ Errors:    0

posts25k - nested multiple relations lookup (no indexes, at-least-one) [reqs:100, conc:10, rule:"author.permissions.active ?= true", query:?perPage=20]

┌─ Best:      2.738672314s
├─ Worst:     8.205090253s
├─ Completed: 49.119758621s
└─ Errors:    0

posts25k - nested multiple relations lookup (no indexes, at-least-one, skipTotal) [reqs:100, conc:10, rule:"author.permissions.active ?= true", query:?perPage=20&skipTotal=1]

┌─ Best:      5.188525ms
├─ Worst:     220.796137ms
├─ Completed: 300.262059ms
└─ Errors:    0

posts50k - simpleA (many requests, no rules, no concurrency) [reqs:1000, conc:1, rule:"", query:?perPage=20]

┌─ Best:      6.867777ms
├─ Worst:     28.86795ms
├─ Completed: 12.066100591s
└─ Errors:    0

posts50k - simpleB (many requests, no rules, high concurrency) [reqs:1000, conc:1000, rule:"", query:?perPage=20]

┌─ Best:      395.814536ms
├─ Worst:     4.254056111s
├─ Completed: 4.263943819s
└─ Errors:    0

posts50k - simpleC (many requests, no rules, high concurrency, skipTotal) [reqs:1000, conc:1000, rule:"", query:?perPage=20&skipTotal=1]

┌─ Best:      176.162557ms
├─ Worst:     923.283527ms
├─ Completed: 929.782301ms
└─ Errors:    0

posts50k - mixed read and write (simpleA list with additional 300 concurrent random posts50k updates running in the background) [reqs:1000, conc:1000, rule:"", query:?perPage=20]

┌─ Best:      433.215089ms
├─ Worst:     6.165995119s
├─ Completed: 6.173213412s
└─ Errors:    0

posts50k - expand author [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author]

┌─ Best:      18.276369ms
├─ Worst:     103.876475ms
├─ Completed: 379.765774ms
└─ Errors:    0

posts50k - expand author (limited fields) [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author&fields=id,collectionId,expand.author.id]

┌─ Best:      16.464955ms
├─ Worst:     119.116897ms
├─ Completed: 352.048072ms
└─ Errors:    0

posts50k - expand author.permissions [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author.permissions]

┌─ Best:      17.627344ms
├─ Worst:     157.455231ms
├─ Completed: 400.7475ms
└─ Errors:    0

posts50k - expand author.permissions (limited fields) [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author.permissions&fields=id,collectionId,expand.author.id,expand.author.expand.permissions.id]

┌─ Best:      13.230484ms
├─ Worst:     89.065452ms
├─ Completed: 257.950222ms
└─ Errors:    0

posts50k - simple auth rule [reqs:100, conc:10, rule:"@request.auth.id != ''", query:?perPage=20]

┌─ Best:      7.841172ms
├─ Worst:     88.758015ms
├─ Completed: 172.684685ms
└─ Errors:    0

posts50k - author check (no index) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20]

┌─ Best:      144.693793ms
├─ Worst:     1.093291489s
├─ Completed: 3.194340434s
└─ Errors:    0

posts50k - author check (with index) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20]

┌─ Best:      1.733485ms
├─ Worst:     315.610389ms
├─ Completed: 416.236005ms
└─ Errors:    0

posts50k - author check (with index and skipTotal) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20&skipTotal=1]

┌─ Best:      1.621ms
├─ Worst:     23.355144ms
├─ Completed: 47.294841ms
└─ Errors:    0

posts50k - author.id (extra join) check (no index) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20]

┌─ Best:      129.962996ms
├─ Worst:     943.273339ms
├─ Completed: 3.014243676s
└─ Errors:    0

posts50k - author.id (extra join) check (with index) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20]

┌─ Best:      1.469143ms
├─ Worst:     288.576118ms
├─ Completed: 349.667982ms
└─ Errors:    0

posts50k - author.id (extra join) check (with index and skipTotal) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20&skipTotal=1]

┌─ Best:      1.4948ms
├─ Worst:     21.843119ms
├─ Completed: 46.291836ms
└─ Errors:    0

posts50k - loose large text search (no index) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20]

┌─ Best:      147.842274ms
├─ Worst:     716.78023ms
├─ Completed: 2.443696314s
└─ Errors:    0

posts50k - loose large text search (with index) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20]

┌─ Best:      106.773174ms
├─ Worst:     704.59707ms
├─ Completed: 2.089016989s
└─ Errors:    0

posts50k - loose large text search (with index and skipTotal) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20&skipTotal=1]

┌─ Best:      1.706222ms
├─ Worst:     138.275375ms
├─ Completed: 167.368163ms
└─ Errors:    0

posts50k - multiple select :each (no index, match-all) [reqs:100, conc:10, rule:"type:each != 'c'", query:?perPage=20]

┌─ Best:      4.253452505s
├─ Worst:     6.700115993s
├─ Completed: 56.305841639s
└─ Errors:    0

posts50k - multiple select :each (no index, match-all, skipTotal) [reqs:100, conc:10, rule:"type:each != 'c'", query:?perPage=20&skipTotal=1]

┌─ Best:      3.71271ms
├─ Worst:     389.594678ms
├─ Completed: 465.106121ms
└─ Errors:    0

posts50k - multiple select :each (no index, at-least-one) [reqs:100, conc:10, rule:"type:each ?!= 'c'", query:?perPage=20]

┌─ Best:      651.197413ms
├─ Worst:     2.314696924s
├─ Completed: 9.479616129s
└─ Errors:    0

posts50k - multiple select :each (no index, at-least-one, skipTotal) [reqs:100, conc:10, rule:"type:each ?!= 'c'", query:?perPage=20&skipTotal=1]

┌─ Best:      2.660542ms
├─ Worst:     469.56901ms
├─ Completed: 588.656134ms
└─ Errors:    0

posts50k - nested single relations lookup (no indexes) [reqs:100, conc:10, rule:"author.organization.name != 'test'", query:?perPage=20]

┌─ Best:      2.008393198s
├─ Worst:     6.420988615s
├─ Completed: 34.040180766s
└─ Errors:    0

posts50k - nested single relations lookup (no indexes, skipTotal) [reqs:100, conc:10, rule:"author.organization.name != 'test'", query:?perPage=20&skipTotal=1]

┌─ Best:      1.956735ms
├─ Worst:     333.44531ms
├─ Completed: 371.315519ms
└─ Errors:    0

posts50k - nested multiple relations lookup (no indexes, match-all) [reqs:100, conc:10, rule:"author.permissions.active = true", query:?perPage=20]

┌─ Best:      7.366807629s
├─ Worst:     18.522370118s
├─ Completed: 1m57.36582043s
└─ Errors:    0

posts50k - nested multiple relations lookup (no indexes, match-all, skipTotal) [reqs:100, conc:10, rule:"author.permissions.active = true", query:?perPage=20&skipTotal=1]

┌─ Best:      21.690002ms
├─ Worst:     847.985052ms
├─ Completed: 1.530061696s
└─ Errors:    0

posts50k - nested multiple relations lookup (no indexes, at-least-one) [reqs:100, conc:10, rule:"author.permissions.active ?= true", query:?perPage=20]

┌─ Best:      3.218573399s
├─ Worst:     14.69924419s
├─ Completed: 50.849963725s
└─ Errors:    0

posts50k - nested multiple relations lookup (no indexes, at-least-one, skipTotal) [reqs:100, conc:10, rule:"author.permissions.active ?= true", query:?perPage=20&skipTotal=1]

┌─ Best:      5.878931ms
├─ Worst:     440.99828ms
├─ Completed: 579.86688ms
└─ Errors:    0

posts100k - simpleA (many requests, no rules, no concurrency) [reqs:1000, conc:1, rule:"", query:?perPage=20]

┌─ Best:      12.254352ms
├─ Worst:     34.208351ms
├─ Completed: 18.756715383s
└─ Errors:    0

posts100k - simpleB (many requests, no rules, high concurrency) [reqs:1000, conc:1000, rule:"", query:?perPage=20]

┌─ Best:      290.110257ms
├─ Worst:     4.614100826s
├─ Completed: 4.636228172s
└─ Errors:    0

posts100k - simpleC (many requests, no rules, high concurrency, skipTotal) [reqs:1000, conc:1000, rule:"", query:?perPage=20&skipTotal=1]

┌─ Best:      200.035484ms
├─ Worst:     532.968173ms
├─ Completed: 533.522544ms
└─ Errors:    0

posts100k - mixed read and write (simpleA list with additional 300 concurrent random posts100k updates running in the background) [reqs:1000, conc:1000, rule:"", query:?perPage=20]

┌─ Best:      488.7115ms
├─ Worst:     8.341230523s
├─ Completed: 8.349505777s
└─ Errors:    0

posts100k - expand author [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author]

┌─ Best:      34.78142ms
├─ Worst:     376.980498ms
├─ Completed: 1.204400427s
└─ Errors:    0

posts100k - expand author (limited fields) [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author&fields=id,collectionId,expand.author.id]

┌─ Best:      48.989191ms
├─ Worst:     343.87732ms
├─ Completed: 1.43570534s
└─ Errors:    0

posts100k - expand author.permissions [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author.permissions]

┌─ Best:      38.409388ms
├─ Worst:     312.026233ms
├─ Completed: 1.232831598s
└─ Errors:    0

posts100k - expand author.permissions (limited fields) [reqs:100, conc:10, rule:"", query:?perPage=20&expand=author.permissions&fields=id,collectionId,expand.author.id,expand.author.expand.permissions.id]

┌─ Best:      49.2533ms
├─ Worst:     360.929553ms
├─ Completed: 1.212924659s
└─ Errors:    0

posts100k - simple auth rule [reqs:100, conc:10, rule:"@request.auth.id != ''", query:?perPage=20]

┌─ Best:      30.476442ms
├─ Worst:     311.276561ms
├─ Completed: 878.635753ms
└─ Errors:    0

posts100k - author check (no index) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20]

┌─ Best:      535.463627ms
├─ Worst:     5.525706604s
├─ Completed: 12.959510616s
└─ Errors:    0

posts100k - author check (with index) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20]

┌─ Best:      2.424727ms
├─ Worst:     489.165855ms
├─ Completed: 601.477617ms
└─ Errors:    0

posts100k - author check (with index and skipTotal) [reqs:100, conc:10, rule:"author = @request.auth.id", query:?perPage=20&skipTotal=1]

┌─ Best:      1.680005ms
├─ Worst:     54.029837ms
├─ Completed: 109.364479ms
└─ Errors:    0

posts100k - author.id (extra join) check (no index) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20]

┌─ Best:      515.185787ms
├─ Worst:     2.48958959s
├─ Completed: 10.91308949s
└─ Errors:    0

posts100k - author.id (extra join) check (with index) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20]

┌─ Best:      1.777992ms
├─ Worst:     331.353698ms
├─ Completed: 371.948177ms
└─ Errors:    0

posts100k - author.id (extra join) check (with index and skipTotal) [reqs:100, conc:10, rule:"author.id = @request.auth.id", query:?perPage=20&skipTotal=1]

┌─ Best:      1.354989ms
├─ Worst:     19.803176ms
├─ Completed: 45.70183ms
└─ Errors:    0

posts100k - loose large text search (no index) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20]

┌─ Best:      471.764524ms
├─ Worst:     740.617796ms
├─ Completed: 5.707783382s
└─ Errors:    0

posts100k - loose large text search (with index) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20]

┌─ Best:      270.045079ms
├─ Worst:     843.565376ms
├─ Completed: 4.150673787s
└─ Errors:    0

posts100k - loose large text search (with index and skipTotal) [reqs:100, conc:10, rule:"description ~ 'ipsum dolor'", query:?perPage=20&skipTotal=1]

┌─ Best:      1.206447ms
├─ Worst:     151.018924ms
├─ Completed: 183.788662ms
└─ Errors:    0

posts100k - multiple select :each (no index, match-all) [reqs:100, conc:10, rule:"type:each != 'c'", query:?perPage=20]

┌─ Best:      5.834147874s
├─ Worst:     12.620963528s
├─ Completed: 1m41.544885666s
└─ Errors:    0

posts100k - multiple select :each (no index, match-all, skipTotal) [reqs:100, conc:10, rule:"type:each != 'c'", query:?perPage=20&skipTotal=1]

┌─ Best:      7.755979ms
├─ Worst:     1.039612294s
├─ Completed: 1.247106862s
└─ Errors:    0

posts100k - multiple select :each (no index, at-least-one) [reqs:100, conc:10, rule:"type:each ?!= 'c'", query:?perPage=20]

┌─ Best:      915.999389ms
├─ Worst:     5.808681854s
├─ Completed: 22.059597954s
└─ Errors:    0

posts100k - multiple select :each (no index, at-least-one, skipTotal) [reqs:100, conc:10, rule:"type:each ?!= 'c'", query:?perPage=20&skipTotal=1]

┌─ Best:      2.186003ms
├─ Worst:     357.667049ms
├─ Completed: 394.653592ms
└─ Errors:    0

posts100k - nested single relations lookup (no indexes) [reqs:100, conc:10, rule:"author.organization.name != 'test'", query:?perPage=20]

┌─ Best:      4.955988954s
├─ Worst:     8.052390777s
├─ Completed: 1m1.132454405s
└─ Errors:    0

posts100k - nested single relations lookup (no indexes, skipTotal) [reqs:100, conc:10, rule:"author.organization.name != 'test'", query:?perPage=20&skipTotal=1]

┌─ Best:      2.309496ms
├─ Worst:     538.851727ms
├─ Completed: 586.19472ms
└─ Errors:    0

posts100k - nested multiple relations lookup (no indexes, match-all) [reqs:100, conc:10, rule:"author.permissions.active = true", query:?perPage=20]

┌─ Best:      15.74333052s
├─ Worst:     35.712267825s
├─ Completed: 4m7.052073059s
└─ Errors:    0

posts100k - nested multiple relations lookup (no indexes, match-all, skipTotal) [reqs:100, conc:10, rule:"author.permissions.active = true", query:?perPage=20&skipTotal=1]

┌─ Best:      18.287835ms
├─ Worst:     529.431389ms
├─ Completed: 736.341775ms
└─ Errors:    0

posts100k - nested multiple relations lookup (no indexes, at-least-one) [reqs:100, conc:10, rule:"author.permissions.active ?= true", query:?perPage=20]

┌─ Best:      7.396098524s
├─ Worst:     20.451209453s
├─ Completed: 2m7.479163621s
└─ Errors:    0

posts100k - nested multiple relations lookup (no indexes, at-least-one, skipTotal) [reqs:100, conc:10, rule:"author.permissions.active ?= true", query:?perPage=20&skipTotal=1]

┌─ Best:      8.077284ms
├─ Worst:     674.757513ms
├─ Completed: 815.643764ms
└─ Errors:    0

Go vs JS route execution

JS route (high concurrency) [reqs:500, conc:500]

┌─ Best:      6.731865377s
├─ Worst:     16.996814354s
├─ Completed: 17.004933769s
└─ Errors:    0

Go route (high concurrency) [reqs:500, conc:500]

┌─ Best:      2.183992203s
├─ Worst:     12.631903945s
├─ Completed: 12.634477529s
└─ Errors:    0

JS route (medium concurrency) [reqs:500, conc:50]

┌─ Best:      649.708658ms
├─ Worst:     1.310221623s
├─ Completed: 9.960471896s
└─ Errors:    0

Go route (medium concurrency) [reqs:500, conc:50]

┌─ Best:      709.832149ms
├─ Worst:     1.487754509s
├─ Completed: 11.018801599s
└─ Errors:    0

JS route (no concurrency) [reqs:500, conc:1]

┌─ Best:      18.397814ms
├─ Worst:     50.959887ms
├─ Completed: 13.553638003s
└─ Errors:    0

Go route (no concurrency) [reqs:500, conc:1]

┌─ Best:      17.162755ms
├─ Worst:     41.302581ms
├─ Completed: 12.352826695s
└─ Errors:    0

Go vs JS hooks execution

JS OnRecordBeforeUpdateRequest hook handler - [reqs:100, conc:10]

┌─ Best:      2.059428ms
├─ Worst:     175.552363ms
├─ Completed: 230.416179ms
└─ Errors:    0

Go OnRecordBeforeUpdateRequest hook handler - [reqs:100, conc:10]

┌─ Best:      2.298522ms
├─ Worst:     33.490751ms
├─ Completed: 78.942407ms
└─ Errors:    0

Deleting records

deleting 100 posts10k - simple (no cascade, no rule) [conc:10, rule:""]

┌─ Best:      1.249346ms
├─ Worst:     23.719086ms
├─ Completed: 52.57571ms
└─ Errors:    0

deleting 100 posts10k - simple (no cascade, with rule) [conc:10, rule:"@request.auth.id != ''"]

┌─ Best:      1.689669ms
├─ Worst:     58.030411ms
├─ Completed: 102.510667ms
└─ Errors:    0

deleting 100 posts25k - simple (no cascade, no rule) [conc:10, rule:""]

┌─ Best:      1.935764ms
├─ Worst:     17.397468ms
├─ Completed: 57.284856ms
└─ Errors:    0

deleting 100 posts25k - simple (no cascade, with rule) [conc:10, rule:"@request.auth.id != ''"]

┌─ Best:      1.838871ms
├─ Worst:     15.349381ms
├─ Completed: 56.342454ms
└─ Errors:    0

deleting 100 posts50k - simple (no cascade, no rule) [conc:10, rule:""]

┌─ Best:      1.407204ms
├─ Worst:     19.076909ms
├─ Completed: 74.162154ms
└─ Errors:    0

deleting 100 posts50k - simple (no cascade, with rule) [conc:10, rule:"@request.auth.id != ''"]

┌─ Best:      1.720106ms
├─ Worst:     22.871483ms
├─ Completed: 67.44283ms
└─ Errors:    0

deleting 100 posts100k - simple (no cascade, no rule) [conc:10, rule:""]

┌─ Best:      1.586655ms
├─ Worst:     95.524428ms
├─ Completed: 139.763459ms
└─ Errors:    0

deleting 100 posts100k - simple (no cascade, with rule) [conc:10, rule:"@request.auth.id != ''"]

┌─ Best:      1.76392ms
├─ Worst:     16.230439ms
├─ Completed: 58.579369ms
└─ Errors:    0

deleting 100 users - with cascade deleting all associated posts [conc:10, rule:""]

┌─ Best:      224.267727ms
├─ Worst:     11.551965728s
├─ Completed: 26.982114756s
└─ Errors:    0

deleting 100 organizations - with cascade deleting all users and associated posts [conc:10, rule:""]

┌─ Best:      146.738ms
├─ Worst:     33.234883613s
├─ Completed: 1m1.764906967s
└─ Errors:    0