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.40.0-dev (Go 1.27rc3, CGO)

Creating organizations (100)

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

┌─ Best:      841.602µs
├─ Worst:     10.787506ms
├─ Completed: 17.479724ms
└─ Errors:    0

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

┌─ Best:      565.921µs
├─ Worst:     13.076188ms
├─ Completed: 19.899032ms
└─ Errors:    0

Creating permissions (50)

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

┌─ Best:      645.927µs
├─ Worst:     12.803307ms
├─ Completed: 26.045022ms
└─ Errors:    0

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

┌─ Best:      896.804µs
├─ Worst:     3.07569ms
├─ Completed: 8.665362ms
└─ Errors:    0

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

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

┌─ Best:      294.560927ms
├─ Worst:     986.030805ms
├─ Completed: 3.064082957s
└─ Errors:    0

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

┌─ Best:      290.448682ms
├─ Worst:     1.148919006s
├─ Completed: 3.085270096s
└─ Errors:    0

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

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

┌─ Best:      1.021307ms
├─ Worst:     1.23320231s
├─ Completed: 1.771638434s
└─ Errors:    0

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

┌─ Best:      1.315558ms
├─ Worst:     1.967630674s
├─ Completed: 2.447939798s
└─ Errors:    0

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

┌─ Best:      824.048µs
├─ Worst:     1.612029694s
├─ Completed: 4.409524736s
└─ Errors:    0

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

┌─ Best:      1.283782ms
├─ Worst:     1.572644436s
├─ Completed: 4.333317161s
└─ Errors:    0

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

┌─ Best:      816.082µs
├─ Worst:     1.722244525s
├─ Completed: 8.521168706s
└─ Errors:    0

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

┌─ Best:      1.253865ms
├─ Worst:     1.985302359s
├─ Completed: 9.834492602s
└─ Errors:    0

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

┌─ Best:      760.726µs
├─ Worst:     1.641031263s
├─ Completed: 16.430677127s
└─ Errors:    0

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

┌─ Best:      1.264964ms
├─ Worst:     2.178299489s
├─ Completed: 20.041726781s
└─ 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:      896.519596ms
├─ Worst:     1.468650898s
├─ Completed: 1.484099725s
└─ Errors:    0

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

┌─ Best:      83.25083ms
├─ Worst:     145.337725ms
├─ Completed: 2.46348544s
└─ Errors:    0

User auth refresh

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

┌─ Best:      4.058531ms
├─ Worst:     203.167041ms
├─ Completed: 205.889006ms
└─ Errors:    0

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

┌─ Best:      532.723µs
├─ Worst:     168.479907ms
├─ Completed: 200.904962ms
└─ Errors:    0

List records

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

┌─ Best:      471.195µs
├─ Worst:     221.621573ms
├─ Completed: 247.481187ms
└─ Errors:    0

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

┌─ Best:      27.459288ms
├─ Worst:     396.438214ms
├─ Completed: 397.764918ms
└─ Errors:    0

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

┌─ Best:      1.794145ms
├─ Worst:     13.797327ms
├─ Completed: 3.370184586s
└─ Errors:    0

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

┌─ Best:      3.462647ms
├─ Worst:     622.011822ms
├─ Completed: 623.882711ms
└─ Errors:    0

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

┌─ Best:      17.994537ms
├─ Worst:     439.528435ms
├─ Completed: 446.620401ms
└─ 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:      114.285442ms
├─ Worst:     1.384924703s
├─ Completed: 1.387464112s
└─ Errors:    0

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

┌─ Best:      4.059162ms
├─ Worst:     34.172944ms
├─ Completed: 129.100289ms
└─ Errors:    0

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

┌─ Best:      4.078013ms
├─ Worst:     35.784694ms
├─ Completed: 134.015683ms
└─ Errors:    0

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

┌─ Best:      6.149837ms
├─ Worst:     55.617946ms
├─ Completed: 212.373314ms
└─ 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:      6.876788ms
├─ Worst:     60.004427ms
├─ Completed: 237.178861ms
└─ Errors:    0

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

┌─ Best:      2.003413ms
├─ Worst:     22.430842ms
├─ Completed: 60.114349ms
└─ Errors:    0

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

┌─ Best:      4.076913ms
├─ Worst:     568.057134ms
├─ Completed: 603.043365ms
└─ Errors:    0

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

┌─ Best:      1.331718ms
├─ Worst:     74.690836ms
├─ Completed: 101.005716ms
└─ 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.166182ms
├─ Worst:     25.98258ms
├─ Completed: 49.958739ms
└─ Errors:    0

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

┌─ Best:      4.122859ms
├─ Worst:     385.495777ms
├─ Completed: 451.583848ms
└─ 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.273507ms
├─ Worst:     59.17559ms
├─ Completed: 95.497758ms
└─ 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.008116ms
├─ Worst:     18.519406ms
├─ Completed: 35.005915ms
└─ Errors:    0

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

┌─ Best:      5.890099ms
├─ Worst:     236.517803ms
├─ Completed: 294.31888ms
└─ Errors:    0

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

┌─ Best:      6.211271ms
├─ Worst:     196.33214ms
├─ Completed: 285.065381ms
└─ 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:      1.196899ms
├─ Worst:     32.656429ms
├─ Completed: 53.722528ms
└─ Errors:    0

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

┌─ Best:      67.53707ms
├─ Worst:     448.424103ms
├─ Completed: 1.54349001s
└─ 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:      1.92672ms
├─ Worst:     64.24328ms
├─ Completed: 95.687931ms
└─ Errors:    0

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

┌─ Best:      35.769315ms
├─ Worst:     293.69042ms
├─ Completed: 1.095168328s
└─ 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.449966ms
├─ Worst:     51.647033ms
├─ Completed: 96.582647ms
└─ Errors:    0

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

┌─ Best:      19.250241ms
├─ Worst:     236.248589ms
├─ Completed: 585.263739ms
└─ 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:      1.475171ms
├─ Worst:     74.800281ms
├─ Completed: 99.981928ms
└─ Errors:    0

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

┌─ Best:      254.270465ms
├─ Worst:     755.318687ms
├─ Completed: 4.230749557s
└─ 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:      6.686595ms
├─ Worst:     79.507098ms
├─ Completed: 175.221075ms
└─ 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:      307.462219ms
├─ Worst:     888.131235ms
├─ Completed: 4.508237724s
└─ 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:      2.463065ms
├─ Worst:     72.764935ms
├─ Completed: 128.949741ms
└─ Errors:    0

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

┌─ Best:      2.820841ms
├─ Worst:     8.195584ms
├─ Completed: 4.320071822s
└─ Errors:    0

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

┌─ Best:      57.481837ms
├─ Worst:     666.394346ms
├─ Completed: 669.261445ms
└─ Errors:    0

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

┌─ Best:      10.460236ms
├─ Worst:     374.808386ms
├─ Completed: 381.160817ms
└─ 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:      40.734876ms
├─ Worst:     1.759142936s
├─ Completed: 1.762340593s
└─ Errors:    0

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

┌─ Best:      4.481387ms
├─ Worst:     25.500276ms
├─ Completed: 85.633441ms
└─ Errors:    0

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

┌─ Best:      4.886342ms
├─ Worst:     32.416518ms
├─ Completed: 148.968433ms
└─ Errors:    0

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

┌─ Best:      7.165811ms
├─ Worst:     63.792195ms
├─ Completed: 200.811814ms
└─ 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:      7.151937ms
├─ Worst:     66.201513ms
├─ Completed: 193.201918ms
└─ Errors:    0

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

┌─ Best:      3.139139ms
├─ Worst:     42.174852ms
├─ Completed: 123.055443ms
└─ Errors:    0

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

┌─ Best:      7.473237ms
├─ Worst:     1.129639316s
├─ Completed: 1.236781778s
└─ Errors:    0

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

┌─ Best:      1.354092ms
├─ Worst:     185.600156ms
├─ Completed: 201.195754ms
└─ Errors:    0

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

┌─ Best:      1.470362ms
├─ Worst:     35.420048ms
├─ Completed: 65.55952ms
└─ Errors:    0

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

┌─ Best:      8.560929ms
├─ Worst:     639.404591ms
├─ Completed: 813.538478ms
└─ Errors:    0

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

┌─ Best:      1.544211ms
├─ Worst:     125.21463ms
├─ Completed: 159.453919ms
└─ 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:      2.016159ms
├─ Worst:     25.533676ms
├─ Completed: 63.436034ms
└─ Errors:    0

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

┌─ Best:      13.403156ms
├─ Worst:     449.200832ms
├─ Completed: 590.41681ms
└─ Errors:    0

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

┌─ Best:      13.711873ms
├─ Worst:     385.615079ms
├─ Completed: 509.59073ms
└─ 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:      1.477434ms
├─ Worst:     62.564073ms
├─ Completed: 87.680697ms
└─ Errors:    0

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

┌─ Best:      180.668105ms
├─ Worst:     800.483003ms
├─ Completed: 3.435107665s
└─ 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:      1.813363ms
├─ Worst:     120.789176ms
├─ Completed: 154.758213ms
└─ Errors:    0

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

┌─ Best:      135.176393ms
├─ Worst:     797.916138ms
├─ Completed: 2.8834888s
└─ 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:      1.508813ms
├─ Worst:     115.321996ms
├─ Completed: 134.347085ms
└─ Errors:    0

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

┌─ Best:      42.962518ms
├─ Worst:     487.404608ms
├─ Completed: 959.136331ms
└─ 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:      1.472788ms
├─ Worst:     95.21989ms
├─ Completed: 110.122177ms
└─ Errors:    0

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

┌─ Best:      689.328911ms
├─ Worst:     2.078649201s
├─ Completed: 9.772177909s
└─ 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:      5.998889ms
├─ Worst:     113.611448ms
├─ Completed: 192.571027ms
└─ 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:      845.297339ms
├─ Worst:     1.68251017s
├─ Completed: 11.499642142s
└─ 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:      2.22573ms
├─ Worst:     170.41273ms
├─ Completed: 224.351156ms
└─ Errors:    0

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

┌─ Best:      4.70202ms
├─ Worst:     18.544152ms
├─ Completed: 6.417058567s
└─ Errors:    0

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

┌─ Best:      54.089598ms
├─ Worst:     872.563245ms
├─ Completed: 873.823809ms
└─ Errors:    0

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

┌─ Best:      12.135696ms
├─ Worst:     351.300331ms
├─ Completed: 354.116909ms
└─ 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:      32.965024ms
├─ Worst:     2.790428899s
├─ Completed: 2.794844639s
└─ Errors:    0

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

┌─ Best:      6.742159ms
├─ Worst:     43.619986ms
├─ Completed: 174.779461ms
└─ Errors:    0

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

┌─ Best:      6.960101ms
├─ Worst:     33.246916ms
├─ Completed: 148.317167ms
└─ Errors:    0

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

┌─ Best:      8.195272ms
├─ Worst:     46.67115ms
├─ Completed: 168.038023ms
└─ 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:      10.027023ms
├─ Worst:     41.102086ms
├─ Completed: 193.030426ms
└─ Errors:    0

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

┌─ Best:      4.940641ms
├─ Worst:     23.609668ms
├─ Completed: 81.545754ms
└─ Errors:    0

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

┌─ Best:      31.85973ms
├─ Worst:     1.551068092s
├─ Completed: 1.901967433s
└─ Errors:    0

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

┌─ Best:      1.795448ms
├─ Worst:     220.954911ms
├─ Completed: 220.985099ms
└─ 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.471588ms
├─ Worst:     28.138057ms
├─ Completed: 55.202766ms
└─ Errors:    0

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

┌─ Best:      28.31714ms
├─ Worst:     1.211197593s
├─ Completed: 1.683449311s
└─ 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.739801ms
├─ Worst:     259.033104ms
├─ Completed: 259.083269ms
└─ 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.204472ms
├─ Worst:     27.426778ms
├─ Completed: 53.643956ms
└─ Errors:    0

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

┌─ Best:      42.322636ms
├─ Worst:     825.364859ms
├─ Completed: 1.270804357s
└─ Errors:    0

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

┌─ Best:      24.287452ms
├─ Worst:     726.222608ms
├─ Completed: 967.516564ms
└─ 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.269706ms
├─ Worst:     101.744971ms
├─ Completed: 109.604431ms
└─ Errors:    0

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

┌─ Best:      363.418279ms
├─ Worst:     2.501048255s
├─ Completed: 8.333420966s
└─ 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:      2.311959ms
├─ Worst:     214.987168ms
├─ Completed: 246.689723ms
└─ Errors:    0

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

┌─ Best:      315.357211ms
├─ Worst:     1.305736864s
├─ Completed: 5.447056184s
└─ 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:      1.75231ms
├─ Worst:     92.434264ms
├─ Completed: 122.426265ms
└─ Errors:    0

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

┌─ Best:      110.147891ms
├─ Worst:     970.054726ms
├─ Completed: 2.126721885s
└─ 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.429128ms
├─ Worst:     95.32164ms
├─ Completed: 103.533333ms
└─ Errors:    0

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

┌─ Best:      1.380486807s
├─ Worst:     2.595823217s
├─ Completed: 17.225320738s
└─ 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:      5.791711ms
├─ Worst:     182.724228ms
├─ Completed: 289.571066ms
└─ 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:      1.662407888s
├─ Worst:     2.70620902s
├─ Completed: 19.623085123s
└─ 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:      2.703341ms
├─ Worst:     102.81687ms
├─ Completed: 129.148177ms
└─ Errors:    0

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

┌─ Best:      8.188715ms
├─ Worst:     24.869923ms
├─ Completed: 10.405038738s
└─ Errors:    0

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

┌─ Best:      64.800912ms
├─ Worst:     1.468821508s
├─ Completed: 1.472173526s
└─ Errors:    0

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

┌─ Best:      24.621949ms
├─ Worst:     426.902376ms
├─ Completed: 430.715605ms
└─ 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:      123.089493ms
├─ Worst:     7.05724802s
├─ Completed: 7.063028849s
└─ Errors:    0

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

┌─ Best:      9.947938ms
├─ Worst:     69.817925ms
├─ Completed: 184.857755ms
└─ Errors:    0

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

┌─ Best:      10.866271ms
├─ Worst:     59.737887ms
├─ Completed: 200.507227ms
└─ Errors:    0

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

┌─ Best:      11.716519ms
├─ Worst:     74.878104ms
├─ Completed: 255.020969ms
└─ 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:      12.122203ms
├─ Worst:     103.722518ms
├─ Completed: 255.606811ms
└─ Errors:    0

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

┌─ Best:      8.720519ms
├─ Worst:     59.314546ms
├─ Completed: 178.079889ms
└─ Errors:    0

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

┌─ Best:      67.958559ms
├─ Worst:     1.339243303s
├─ Completed: 2.15146613s
└─ Errors:    0

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

┌─ Best:      2.053521ms
├─ Worst:     251.823457ms
├─ Completed: 252.379084ms
└─ 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.352102ms
├─ Worst:     18.057452ms
├─ Completed: 45.420933ms
└─ Errors:    0

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

┌─ Best:      66.113855ms
├─ Worst:     1.183459872s
├─ Completed: 2.00931348s
└─ 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.664157ms
├─ Worst:     234.861663ms
├─ Completed: 235.160144ms
└─ 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.416234ms
├─ Worst:     19.565822ms
├─ Completed: 50.766478ms
└─ Errors:    0

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

┌─ Best:      83.594313ms
├─ Worst:     946.289513ms
├─ Completed: 1.857860655s
└─ Errors:    0

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

┌─ Best:      68.795647ms
├─ Worst:     957.068226ms
├─ Completed: 1.684158122s
└─ 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.644447ms
├─ Worst:     125.457622ms
├─ Completed: 141.710071ms
└─ Errors:    0

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

┌─ Best:      1.018236445s
├─ Worst:     3.317885551s
├─ Completed: 15.875688842s
└─ 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:      2.15371ms
├─ Worst:     170.260355ms
├─ Completed: 197.923597ms
└─ Errors:    0

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

┌─ Best:      857.809779ms
├─ Worst:     2.113203534s
├─ Completed: 11.776462401s
└─ 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:      1.498728ms
├─ Worst:     134.092693ms
├─ Completed: 144.034483ms
└─ Errors:    0

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

┌─ Best:      221.45632ms
├─ Worst:     1.086992336s
├─ Completed: 3.401380905s
└─ 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.335972ms
├─ Worst:     217.045361ms
├─ Completed: 236.398412ms
└─ Errors:    0

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

┌─ Best:      2.931748831s
├─ Worst:     5.046750685s
├─ Completed: 33.924796689s
└─ 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:      6.755015ms
├─ Worst:     148.939637ms
├─ Completed: 251.511033ms
└─ 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:      3.524160024s
├─ Worst:     5.619925795s
├─ Completed: 41.707961642s
└─ 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:      2.455931ms
├─ Worst:     142.527016ms
├─ Completed: 189.878658ms
└─ Errors:    0

Go vs JS route execution

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

┌─ Best:      731.761238ms
├─ Worst:     10.123410914s
├─ Completed: 10.124829266s
└─ Errors:    0

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

┌─ Best:      1.917661474s
├─ Worst:     9.547924656s
├─ Completed: 9.551767355s
└─ Errors:    0

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

┌─ Best:      254.238787ms
├─ Worst:     1.536272091s
├─ Completed: 5.713166723s
└─ Errors:    0

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

┌─ Best:      82.933669ms
├─ Worst:     1.53044116s
├─ Completed: 5.675308872s
└─ Errors:    0

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

┌─ Best:      8.889182ms
├─ Worst:     26.411899ms
├─ Completed: 6.916080268s
└─ Errors:    0

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

┌─ Best:      8.608187ms
├─ Worst:     24.595829ms
├─ Completed: 6.776985506s
└─ Errors:    0

Go vs JS hooks execution

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

┌─ Best:      1.332563ms
├─ Worst:     54.293498ms
├─ Completed: 87.452009ms
└─ Errors:    0

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

┌─ Best:      1.217348ms
├─ Worst:     20.723652ms
├─ Completed: 59.12733ms
└─ Errors:    0

Deleting records

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

┌─ Best:      898.325µs
├─ Worst:     37.581498ms
├─ Completed: 54.144884ms
└─ Errors:    0

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

┌─ Best:      834.602µs
├─ Worst:     41.740801ms
├─ Completed: 70.892059ms
└─ Errors:    0

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

┌─ Best:      749.657µs
├─ Worst:     7.21761ms
├─ Completed: 29.860571ms
└─ Errors:    0

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

┌─ Best:      818.898µs
├─ Worst:     12.529353ms
├─ Completed: 38.400582ms
└─ Errors:    0

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

┌─ Best:      869.35µs
├─ Worst:     11.260486ms
├─ Completed: 34.22138ms
└─ Errors:    0

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

┌─ Best:      969.898µs
├─ Worst:     9.153215ms
├─ Completed: 32.062389ms
└─ Errors:    0

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

┌─ Best:      833.512µs
├─ Worst:     57.742691ms
├─ Completed: 80.125775ms
└─ Errors:    0

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

┌─ Best:      909.488µs
├─ Worst:     9.551495ms
├─ Completed: 29.194556ms
└─ Errors:    0

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

┌─ Best:      243.279574ms
├─ Worst:     7.502656678s
├─ Completed: 21.336209649s
└─ Errors:    0

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

┌─ Best:      200.898555ms
├─ Worst:     25.809310413s
├─ Completed: 54.244476316s
└─ Errors:    0