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:      1.527863ms
├─ Worst:     9.314063ms
├─ Completed: 19.117934ms
└─ Errors:    0

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

┌─ Best:      1.210019ms
├─ Worst:     9.619351ms
├─ Completed: 22.928681ms
└─ Errors:    0

Creating permissions (50)

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

┌─ Best:      910.055µs
├─ Worst:     4.750356ms
├─ Completed: 10.982296ms
└─ Errors:    0

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

┌─ Best:      1.151139ms
├─ Worst:     5.249086ms
├─ Completed: 15.235209ms
└─ Errors:    0

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

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

┌─ Best:      1.659252851s
├─ Worst:     4.376137439s
├─ Completed: 16.777127235s
└─ Errors:    0

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

┌─ Best:      1.560542471s
├─ Worst:     4.435043591s
├─ Completed: 16.728377868s
└─ Errors:    0

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

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

┌─ Best:      5.038549ms
├─ Worst:     1.736585875s
├─ Completed: 2.631255591s
└─ Errors:    0

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

┌─ Best:      5.283558ms
├─ Worst:     2.578699486s
├─ Completed: 3.700153913s
└─ Errors:    0

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

┌─ Best:      5.54825ms
├─ Worst:     2.228139785s
├─ Completed: 6.066778104s
└─ Errors:    0

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

┌─ Best:      2.055529ms
├─ Worst:     3.245736467s
├─ Completed: 9.061227682s
└─ Errors:    0

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

┌─ Best:      3.626772ms
├─ Worst:     2.110860023s
├─ Completed: 11.886107079s
└─ Errors:    0

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

┌─ Best:      3.897106ms
├─ Worst:     3.569739212s
├─ Completed: 18.306341356s
└─ Errors:    0

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

┌─ Best:      1.787169ms
├─ Worst:     2.583942625s
├─ Completed: 24.80972375s
└─ Errors:    0

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

┌─ Best:      3.171977ms
├─ Worst:     3.279059664s
├─ Completed: 36.848983052s
└─ 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:      6.684536726s
├─ Worst:     8.427821287s
├─ Completed: 8.432994248s
└─ Errors:    0

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

┌─ Best:      211.672635ms
├─ Worst:     529.708726ms
├─ Completed: 8.378625873s
└─ Errors:    0

User auth refresh

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

┌─ Best:      196.005199ms
├─ Worst:     352.782551ms
├─ Completed: 361.645953ms
└─ Errors:    0

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

┌─ Best:      4.857275ms
├─ Worst:     83.070053ms
├─ Completed: 312.102287ms
└─ Errors:    0

List records

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

┌─ Best:      3.272985ms
├─ Worst:     89.34626ms
├─ Completed: 378.518834ms
└─ Errors:    0

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

┌─ Best:      183.735016ms
├─ Worst:     440.460698ms
├─ Completed: 461.791982ms
└─ Errors:    0

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

┌─ Best:      2.16071ms
├─ Worst:     7.907735ms
├─ Completed: 3.144518791s
└─ Errors:    0

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

┌─ Best:      178.383848ms
├─ Worst:     1.470740027s
├─ Completed: 1.475654026s
└─ Errors:    0

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

┌─ Best:      145.559324ms
├─ Worst:     740.382789ms
├─ Completed: 759.692855ms
└─ 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:      269.8057ms
├─ Worst:     1.902820273s
├─ Completed: 1.920968023s
└─ Errors:    0

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

┌─ Best:      7.442683ms
├─ Worst:     34.798656ms
├─ Completed: 216.038337ms
└─ 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.096694ms
├─ Worst:     49.272252ms
├─ Completed: 250.496876ms
└─ Errors:    0

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

┌─ Best:      7.695492ms
├─ Worst:     63.060187ms
├─ Completed: 316.632778ms
└─ 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:      12.083077ms
├─ Worst:     66.406302ms
├─ Completed: 339.509035ms
└─ Errors:    0

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

┌─ Best:      3.187785ms
├─ Worst:     29.389207ms
├─ Completed: 137.35132ms
└─ Errors:    0

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

┌─ Best:      27.399704ms
├─ Worst:     308.597053ms
├─ Completed: 679.417086ms
└─ Errors:    0

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

┌─ Best:      1.538331ms
├─ Worst:     71.773292ms
├─ Completed: 134.125072ms
└─ 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.314763ms
├─ Worst:     28.196213ms
├─ Completed: 83.859615ms
└─ Errors:    0

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

┌─ Best:      10.691155ms
├─ Worst:     329.33128ms
├─ Completed: 728.563323ms
└─ 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.728217ms
├─ Worst:     86.09454ms
├─ Completed: 152.331221ms
└─ 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.645575ms
├─ Worst:     23.73851ms
├─ Completed: 89.722185ms
└─ Errors:    0

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

┌─ Best:      8.735731ms
├─ Worst:     184.727199ms
├─ Completed: 482.399083ms
└─ Errors:    0

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

┌─ Best:      19.275764ms
├─ Worst:     214.845613ms
├─ Completed: 576.830463ms
└─ 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.408487ms
├─ Worst:     42.550303ms
├─ Completed: 112.549406ms
└─ Errors:    0

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

┌─ Best:      195.629611ms
├─ Worst:     647.435375ms
├─ Completed: 3.724479409s
└─ 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.828209ms
├─ Worst:     55.160375ms
├─ Completed: 148.033378ms
└─ Errors:    0

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

┌─ Best:      67.92301ms
├─ Worst:     349.158277ms
├─ Completed: 1.587177872s
└─ 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.570253ms
├─ Worst:     69.364941ms
├─ Completed: 138.35579ms
└─ Errors:    0

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

┌─ Best:      169.279008ms
├─ Worst:     405.117451ms
├─ Completed: 2.51825692s
└─ 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.884624ms
├─ Worst:     52.015563ms
├─ Completed: 124.847511ms
└─ 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.18279599s
├─ Worst:     2.676899523s
├─ Completed: 19.179457285s
└─ 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:      7.465216ms
├─ Worst:     112.488418ms
├─ Completed: 384.423144ms
└─ 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:      1.650231521s
├─ Worst:     3.135342164s
├─ Completed: 23.716374972s
└─ 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:      3.776331ms
├─ Worst:     87.960172ms
├─ Completed: 217.473946ms
└─ Errors:    0

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

┌─ Best:      3.613126ms
├─ Worst:     11.342114ms
├─ Completed: 5.087157671s
└─ Errors:    0

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

┌─ Best:      350.294397ms
├─ Worst:     2.342375546s
├─ Completed: 2.348545761s
└─ Errors:    0

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

┌─ Best:      152.154706ms
├─ Worst:     843.596738ms
├─ Completed: 846.355074ms
└─ 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:      182.674056ms
├─ Worst:     2.687488555s
├─ Completed: 2.702947455s
└─ Errors:    0

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

┌─ Best:      6.054091ms
├─ Worst:     54.570627ms
├─ Completed: 295.738178ms
└─ Errors:    0

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

┌─ Best:      6.113414ms
├─ Worst:     80.215406ms
├─ Completed: 318.398017ms
└─ Errors:    0

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

┌─ Best:      10.916622ms
├─ Worst:     73.68738ms
├─ Completed: 356.77285ms
└─ 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.69821ms
├─ Worst:     82.445328ms
├─ Completed: 435.255527ms
└─ Errors:    0

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

┌─ Best:      4.098624ms
├─ Worst:     50.697657ms
├─ Completed: 210.77459ms
└─ Errors:    0

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

┌─ Best:      39.648311ms
├─ Worst:     586.552336ms
├─ Completed: 1.330262471s
└─ Errors:    0

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

┌─ Best:      2.00159ms
├─ Worst:     209.142343ms
├─ Completed: 283.756923ms
└─ 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.729741ms
├─ Worst:     21.582518ms
├─ Completed: 82.525659ms
└─ Errors:    0

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

┌─ Best:      38.515755ms
├─ Worst:     527.918199ms
├─ Completed: 1.240423053s
└─ 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.634018ms
├─ Worst:     157.269893ms
├─ Completed: 230.614509ms
└─ 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.2008ms
├─ Worst:     20.407343ms
├─ Completed: 84.078529ms
└─ Errors:    0

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

┌─ Best:      41.005387ms
├─ Worst:     436.823588ms
├─ Completed: 1.163971188s
└─ Errors:    0

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

┌─ Best:      37.454991ms
├─ Worst:     348.192505ms
├─ Completed: 1.078531411s
└─ 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.37784ms
├─ Worst:     72.878219ms
├─ Completed: 136.556751ms
└─ Errors:    0

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

┌─ Best:      808.744896ms
├─ Worst:     1.527317014s
├─ Completed: 10.3012249s
└─ 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:      2.084131ms
├─ Worst:     92.019488ms
├─ Completed: 173.96168ms
└─ Errors:    0

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

┌─ Best:      190.000087ms
├─ Worst:     587.180385ms
├─ Completed: 3.358209048s
└─ 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.819577ms
├─ Worst:     83.612363ms
├─ Completed: 163.687411ms
└─ Errors:    0

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

┌─ Best:      377.343318ms
├─ Worst:     994.146404ms
├─ Completed: 6.073568221s
└─ 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.385453ms
├─ Worst:     83.981377ms
├─ Completed: 161.296588ms
└─ Errors:    0

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

┌─ Best:      3.904468987s
├─ Worst:     5.7156857s
├─ Completed: 49.319881403s
└─ 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:      9.656968ms
├─ Worst:     227.5254ms
├─ Completed: 536.226969ms
└─ 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:      3.58990983s
├─ Worst:     6.988468556s
├─ Completed: 59.291700192s
└─ 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:      4.300098ms
├─ Worst:     145.600316ms
├─ Completed: 272.167114ms
└─ Errors:    0

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

┌─ Best:      6.371592ms
├─ Worst:     16.36479ms
├─ Completed: 8.013872536s
└─ Errors:    0

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

┌─ Best:      170.07562ms
├─ Worst:     3.960571686s
├─ Completed: 3.965349231s
└─ Errors:    0

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

┌─ Best:      127.872351ms
├─ Worst:     836.751919ms
├─ Completed: 841.478346ms
└─ 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:      206.202629ms
├─ Worst:     4.396529705s
├─ Completed: 4.422163345s
└─ Errors:    0

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

┌─ Best:      17.017116ms
├─ Worst:     81.879637ms
├─ Completed: 439.50215ms
└─ Errors:    0

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

┌─ Best:      14.253619ms
├─ Worst:     117.830663ms
├─ Completed: 465.432261ms
└─ Errors:    0

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

┌─ Best:      14.847628ms
├─ Worst:     116.686647ms
├─ Completed: 488.210624ms
└─ 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:      12.791496ms
├─ Worst:     173.50089ms
├─ Completed: 601.661423ms
└─ Errors:    0

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

┌─ Best:      10.740483ms
├─ Worst:     113.323913ms
├─ Completed: 374.01668ms
└─ Errors:    0

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

┌─ Best:      83.067829ms
├─ Worst:     844.855235ms
├─ Completed: 2.173459226s
└─ Errors:    0

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

┌─ Best:      1.948416ms
├─ Worst:     282.597949ms
├─ Completed: 351.525601ms
└─ 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.361211ms
├─ Worst:     25.521896ms
├─ Completed: 93.11659ms
└─ Errors:    0

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

┌─ Best:      65.224856ms
├─ Worst:     752.841446ms
├─ Completed: 2.001477828s
└─ Errors:    0

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

┌─ Best:      2.331381ms
├─ Worst:     206.22147ms
├─ Completed: 281.14243ms
└─ 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:      3.082788ms
├─ Worst:     20.324787ms
├─ Completed: 90.97556ms
└─ Errors:    0

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

┌─ Best:      84.419527ms
├─ Worst:     756.639344ms
├─ Completed: 2.253104241s
└─ Errors:    0

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

┌─ Best:      76.019557ms
├─ Worst:     855.117607ms
├─ Completed: 2.242003486s
└─ 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.557176ms
├─ Worst:     142.868737ms
├─ Completed: 207.612997ms
└─ Errors:    0

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

┌─ Best:      2.026748195s
├─ Worst:     2.993044751s
├─ Completed: 22.788023559s
└─ 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.176747ms
├─ Worst:     167.923969ms
├─ Completed: 253.730337ms
└─ Errors:    0

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

┌─ Best:      367.407912ms
├─ Worst:     1.606549351s
├─ Completed: 7.082087999s
└─ 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:      3.12244ms
├─ Worst:     204.734823ms
├─ Completed: 283.514049ms
└─ Errors:    0

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

┌─ Best:      781.879182ms
├─ Worst:     2.012300671s
├─ Completed: 12.556478816s
└─ 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:      2.903721ms
├─ Worst:     216.560375ms
├─ Completed: 300.184197ms
└─ Errors:    0

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

┌─ Best:      8.384931818s
├─ Worst:     11.551052927s
├─ Completed: 1m42.037555286s
└─ 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:      9.140779ms
├─ Worst:     396.022238ms
├─ Completed: 698.395406ms
└─ 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:      8.69855976s
├─ Worst:     13.809297078s
├─ Completed: 1m57.947543855s
└─ 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:      3.164755ms
├─ Worst:     296.449209ms
├─ Completed: 432.826395ms
└─ Errors:    0

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

┌─ Best:      11.389792ms
├─ Worst:     25.49769ms
├─ Completed: 13.3171449s
└─ Errors:    0

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

┌─ Best:      278.805117ms
├─ Worst:     6.842633822s
├─ Completed: 6.865809383s
└─ Errors:    0

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

┌─ Best:      187.851725ms
├─ Worst:     880.94105ms
├─ Completed: 887.744576ms
└─ 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:      165.559674ms
├─ Worst:     7.859227318s
├─ Completed: 7.882461805s
└─ Errors:    0

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

┌─ Best:      20.151136ms
├─ Worst:     185.122112ms
├─ Completed: 737.151971ms
└─ Errors:    0

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

┌─ Best:      15.665986ms
├─ Worst:     245.123926ms
├─ Completed: 726.661756ms
└─ Errors:    0

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

┌─ Best:      19.772168ms
├─ Worst:     176.07443ms
├─ Completed: 823.628916ms
└─ 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:      24.497767ms
├─ Worst:     254.334419ms
├─ Completed: 861.049495ms
└─ Errors:    0

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

┌─ Best:      20.52487ms
├─ Worst:     135.595487ms
├─ Completed: 625.176085ms
└─ Errors:    0

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

┌─ Best:      168.825137ms
├─ Worst:     1.291922971s
├─ Completed: 4.432419433s
└─ Errors:    0

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

┌─ Best:      2.537663ms
├─ Worst:     271.248509ms
├─ Completed: 347.809826ms
└─ 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.335274ms
├─ Worst:     30.909375ms
├─ Completed: 87.210747ms
└─ Errors:    0

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

┌─ Best:      198.989094ms
├─ Worst:     818.767976ms
├─ Completed: 4.067043975s
└─ 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.686683ms
├─ Worst:     254.217141ms
├─ Completed: 325.645865ms
└─ 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.431236ms
├─ Worst:     26.805838ms
├─ Completed: 89.782551ms
└─ Errors:    0

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

┌─ Best:      237.119669ms
├─ Worst:     738.619161ms
├─ Completed: 4.875519641s
└─ Errors:    0

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

┌─ Best:      213.925376ms
├─ Worst:     852.847664ms
├─ Completed: 4.041674522s
└─ 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.744245ms
├─ Worst:     172.721546ms
├─ Completed: 236.263455ms
└─ Errors:    0

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

┌─ Best:      4.58006563s
├─ Worst:     5.329980556s
├─ Completed: 51.096952402s
└─ 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:      1.909651ms
├─ Worst:     408.956844ms
├─ Completed: 497.421429ms
└─ Errors:    0

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

┌─ Best:      927.578103ms
├─ Worst:     2.337930196s
├─ Completed: 14.276455177s
└─ 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.616524ms
├─ Worst:     396.410736ms
├─ Completed: 476.957493ms
└─ Errors:    0

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

┌─ Best:      972.130478ms
├─ Worst:     3.279649846s
├─ Completed: 24.331614591s
└─ 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:      1.722327ms
├─ Worst:     437.505237ms
├─ Completed: 515.945926ms
└─ Errors:    0

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

┌─ Best:      18.195572507s
├─ Worst:     22.740390728s
├─ Completed: 3m28.647543328s
└─ 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.198619ms
├─ Worst:     495.329384ms
├─ Completed: 774.788616ms
└─ 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:      21.440185079s
├─ Worst:     27.425364749s
├─ Completed: 3m57.755385423s
└─ 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:      3.179833ms
├─ Worst:     320.897662ms
├─ Completed: 438.63622ms
└─ Errors:    0

Go vs JS route execution

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

┌─ Best:      493.795098ms
├─ Worst:     10.608741434s
├─ Completed: 10.619191014s
└─ Errors:    0

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

┌─ Best:      1.249494514s
├─ Worst:     9.339061578s
├─ Completed: 9.352298121s
└─ Errors:    0

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

┌─ Best:      272.939845ms
├─ Worst:     982.911014ms
├─ Completed: 6.179299759s
└─ Errors:    0

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

┌─ Best:      258.602168ms
├─ Worst:     1.558297445s
├─ Completed: 6.506201276s
└─ Errors:    0

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

┌─ Best:      16.77877ms
├─ Worst:     32.249617ms
├─ Completed: 9.861279757s
└─ Errors:    0

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

┌─ Best:      16.560095ms
├─ Worst:     31.125715ms
├─ Completed: 9.94103104s
└─ Errors:    0

Go vs JS hooks execution

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

┌─ Best:      1.753882ms
├─ Worst:     161.037538ms
├─ Completed: 225.067744ms
└─ Errors:    0

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

┌─ Best:      2.200523ms
├─ Worst:     24.253715ms
├─ Completed: 71.791264ms
└─ Errors:    0

Deleting records

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

┌─ Best:      1.177042ms
├─ Worst:     17.074506ms
├─ Completed: 53.082361ms
└─ Errors:    0

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

┌─ Best:      1.678403ms
├─ Worst:     37.865342ms
├─ Completed: 98.825242ms
└─ Errors:    0

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

┌─ Best:      1.725203ms
├─ Worst:     8.770895ms
├─ Completed: 47.084521ms
└─ Errors:    0

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

┌─ Best:      1.883923ms
├─ Worst:     12.869704ms
├─ Completed: 53.18378ms
└─ Errors:    0

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

┌─ Best:      940.122µs
├─ Worst:     21.174721ms
├─ Completed: 70.075737ms
└─ Errors:    0

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

┌─ Best:      1.297523ms
├─ Worst:     15.079031ms
├─ Completed: 51.056505ms
└─ Errors:    0

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

┌─ Best:      1.292963ms
├─ Worst:     44.349335ms
├─ Completed: 81.997056ms
└─ Errors:    0

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

┌─ Best:      1.314643ms
├─ Worst:     11.991066ms
├─ Completed: 54.473562ms
└─ Errors:    0

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

┌─ Best:      133.17695ms
├─ Worst:     9.189139214s
├─ Completed: 14.899818394s
└─ Errors:    0

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

┌─ Best:      366.279169ms
├─ Worst:     14.604844923s
├─ Completed: 34.983128784s
└─ Errors:    0