Skip to content
This page View Markdown Open in ChatGPT Open in Claude
Benchmark · Linode (Akamai Cloud) · Dedicated CPU · 12 October 2026

8 vCPU, 16 GB RAM : 12,640 to 13,748 requests per second for a whole table.

API Maker 4.0.0 on a Linode Dedicated 16 GB (g6-dedicated-8) : 8 dedicated vCPUs and 16 GB of RAM at $144 a month, its databases on the same machine. Every API was loaded for 15 seconds by autocannon from a second server, two times, on MongoDB, PostgreSQL and MySQL, public and with two tokens, while the server sampled the memory and CPU of every part each second.

Get all · MongoDB 12,640req/s PostgreSQL 12,641 · MySQL 13,748
Get by id, cached 47,980req/s answered from Redis · PostgreSQL 47,888 · MySQL 48,818
Custom API · MongoDB 8,893req/s TypeScript, lean : run in the server · in the sandbox 7,569
API Maker memory 111MB at rest · 176 MB at most under load

The server

Server Linode (Akamai Cloud), Dedicated 16 GB (g6-dedicated-8), dedicated cpu, $144 / month
CPU AMD EPYC 7642 48-Core Processor, 8 dedicated vCPUs (KVM)
KVM guest, 1 thread per core · L1d 512 KiB (8 instances) · L2 4 MiB (8 instances) · L3 128 MiB (8 instances) · BogoMIPS 4599.99
Memory 16 GB (15,991 MB usable), swap 8.5 GB (496 MB of Linode + 8 GB made by the installer)
Disk, region 320 GB SSD, Mumbai, India (ap-west)
System Ubuntu 24.04.4 LTS, Linux 6.8.0-134, Docker 29.9.0
API Maker 4.0.0 : release build of api_maker_be_rust 864bb64 (opt-level 3, fat LTO), installed by its installer (https://apimaker.dev/v4/install.sh), no reverse proxy
Settings the defaults of the installer (lean code of the account runs in the server with QuickJS : sandbox.codeInServer), and the sandboxes kept running for the whole run (removeSandboxInactiveSinceMinutes 1440)
Databases MongoDB 8.0.10 (the MongoDB of API Maker, a replica set of one member, in Docker) · Redis 7.0.5 (the Redis of API Maker, in Docker) · PostgreSQL 18.6 (official image postgres:18, max_connections 500) · MySQL 8.4.11 (official image mysql:8.4, max_connections 500) : all on the same server
Sandboxes TypeScript on Node.js 24.21.0 (an image of 403 MB built by API Maker), 2 sandboxes of the account (sandboxCountForAdmin 2, the default), each opening up to 8 runners when it is busy (one per vCPU)
Load generator Dedicated 64 GB (g6-dedicated-32) : AMD EPYC 7642 48-Core Processor, 32 dedicated vCPUs, Ubuntu 24.04.4 LTS, Node.js 24.21.0, autocannon 8.0.0 with 20 worker threads
Network Private network of the same data centre, round trip 0.28 ms (ping)
Host A strict anti-affinity placement group kept the three dedicated CPU servers (2, 4 and 8 vCPUs) on three different hosts. All seven servers were measured at the same time, each by a load generator of its own.
Date 12 October 2026, 05:30 to 06:44 UTC

Only what a database needs was running while it was measured : API Maker and its two sandboxes, its MongoDB and Redis (API Maker always needs them) and the database under test. The other benchmark databases were stopped, API Maker was restarted and the swap emptied back into memory before each database, when it fitted there. How every number was taken : How API Maker is benchmarked. Every server side by side : All results.

The data

Every table holds the ten rows of the API Maker benchmark dataset : https://apimaker.dev/json/benchmark_dataset.json. Ten customers, ten columns each ; a get all answers all ten (2,418 bytes of JSON on MongoDB), a get by id one of them.

_id customer_id first_name last_name phone last_update pincode shipping_id dob country
60ae2488c37cd955cc144161 2 NICK WAHLBERG 1123456789 2006-02-15T04:34:00.330Z 111111 2 2022-10-30T03:25:03.000Z India
60ae24c8c37cd955cc144162 1 PENELOPE GUINESS 123456789 2006-02-15T04:34:00.330Z 100050 1 2022-10-30T03:25:03.000Z India
60ae247ac37cd955cc144160 3 ED CHASE 2123456789 2006-02-15T04:34:00.330Z 222222 3 2022-10-30T03:25:03.000Z India
60ace1401efc56684403c68c 4 JENNIFER DAVIS 3123456789 2006-02-15T04:34:00.330Z 100050 4 2022-10-30T03:25:03.000Z India
60accda51efc56684403c685 5 JOHNNY LOLLOBRIGIDA 4123456789 2006-02-15T04:34:00.330Z 485125 1 2022-10-30T03:25:03.000Z India
606b7d364bebce00196eade7 6 JOHNNY LOLLOBRIGIDA 5123456789 2006-02-15T04:34:00.330Z 123456 2 2022-10-30T03:25:03.000Z India
606b75961055000018fa9d98 7 GRACE MOSTEL 6123456789 2006-02-15T04:34:00.330Z 356589 3 2022-10-30T03:25:03.000Z India
6064dd02730026001956663e 8 MATTHEW JOHANSSON 7123456789 2006-02-15T04:34:00.330Z 100050 4 2022-10-30T03:25:03.000Z India
6064dcb8730026001956663c 9 JOE SWANK 8123456789 2006-02-15T04:34:00.330Z 251415 1 2022-10-30T03:25:03.000Z India
6064c4c02bafb90018955299 10 CHRISTIAN GABLE 9123456789 2006-02-15T04:34:00.330Z 100050 2022-10-30T03:25:03.000Z India

Results at a glance

Requests per second, the average of two rounds of 15 seconds with 100 connections. Public APIs need no token ; both tokens means every request carries x-am-authorization (the token of an API user, whose groups decide what it may call) and x-am-user-authorization (the token of a row of the customers table, made by a DB token generator), and API Maker checks both.

Requests per second · 8 vCPU, 16 GB RAM, dedicated CPUMongoDBPostgreSQLMySQL
Get allpublic12,64012,64113,748
Get allboth tokens12,10611,91312,712
Get all with cachingpublic43,98043,17344,027
Get all with cachingboth tokens36,12335,40335,915
Get all by streampublic11,89813,07313,095
Get all by streamboth tokens11,51612,16212,340
Custom API calling get all QuickJSpublic8,8939,1769,820
Custom API calling get all QuickJSboth tokens8,4268,5619,129
Custom API in the sandbox Sandboxpublic7,5697,9168,657
Get all with a pre hook QuickJSboth tokens9,2799,52410,204
Get by idpublic14,22413,57114,510
Get by idboth tokens13,44312,65613,517
Get by id with cachingpublic47,98047,88848,818
Get by id with cachingboth tokens38,52138,04538,544
Insert one rowpublic5,4905,8743,542
API Access MongoDB PostgreSQL MySQL
Get all Public 12,640 p99 17 ms 12,641 p99 10 ms 13,748 p99 9 ms
Get all Both tokens 12,106 p99 17 ms 11,913 p99 10 ms 12,712 p99 10 ms
Get all with caching Public 43,980 p99 3 ms 43,173 p99 3 ms 44,027 p99 3 ms
Get all with caching Both tokens 36,123 p99 4 ms 35,403 p99 4 ms 35,915 p99 4 ms
Get all by stream Public 11,898 p99 17 ms 13,073 p99 9 ms 13,095 p99 9 ms
Get all by stream Both tokens 11,516 p99 18 ms 12,162 p99 10 ms 12,340 p99 10 ms
Custom API calling get all QuickJS Public 8,893 p99 20 ms 9,176 p99 13 ms 9,820 p99 12 ms
Custom API calling get all QuickJS Both tokens 8,426 p99 21 ms 8,561 p99 14 ms 9,129 p99 13 ms
Custom API in the sandbox Sandbox Public 7,569 p99 24 ms 7,916 p99 22 ms 8,657 p99 20 ms
Get all with a pre hook QuickJS Both tokens 9,279 p99 20 ms 9,524 p99 13 ms 10,204 p99 13 ms
Get by id Public 14,224 p99 14 ms 13,571 p99 9 ms 14,510 p99 8 ms
Get by id Both tokens 13,443 p99 14 ms 12,656 p99 11 ms 13,517 p99 9 ms
Get by id with caching Public 47,980 p99 3 ms 47,888 p99 3 ms 48,818 p99 3 ms
Get by id with caching Both tokens 38,521 p99 4 ms 38,045 p99 4 ms 38,544 p99 4 ms
Insert one row Public 5,490 p99 32 ms 5,874 p99 19 ms 3,542 p99 38 ms
Custom API without a database Public 39,192 p99 4 ms
Custom API without a database, in the sandbox Public 27,920 p99 8 ms

0 errors Every one of the 32,429,901 requests of these runs was answered with status 200 or 201 : no error, no timeout.

Memory

What each part of the server held, in MB : at rest (the 60 seconds after API Maker and its sandboxes started, before any request) and under load. The bars show the second the whole server held the most memory while its database was loaded, out of the 15,991 MB of the server ; the table gives the most each part held on its own. API Maker is the resident memory of its process ; a container is counted the way docker stats counts it.

API MakerMongoDB of API MakerRedisPostgreSQL / MySQLSandboxesLinux, Docker, the restAvailable
MongoDB
at restunder load
PostgreSQL
at restunder load
MySQL
at restunder load
Part MongoDB
at rest → under load
PostgreSQL
at rest → under load
MySQL
at rest → under load
API Maker (process), in RAM 111 → 176 110 → 159 107 → 152
… and in swap 0 → 0 0 → 0 0 → 0
MongoDB of API Maker, in RAM 127 → 384 369 → 372 369 → 372
… and in swap 0 → 0 0 → 0 0 → 0
Redis, in RAM 3 → 4 3 → 4 3 → 4
Database under test, in RAM MongoDB above 38 → 320 421 → 519
… and in swap MongoDB above 0 → 0 0 → 0
Sandboxes (2 containers), in RAM 55 → 856 55 → 818 55 → 880
… and in swap 0 → 0 0 → 0 0 → 0
Whole server, RAM used 946 → 2093 1232 → 2349 1627 → 2602
Swap used 0 → 0 0 → 0 0 → 0

CPU

On 8 vCPUs, API Maker, the database and the sandboxes share the same 8 vCPUs : every request costs the work of all of them. During get all, public, the CPU was split this way (average of the 15 seconds, in vCPUs : 8.0 is the whole server ; a process counts its own kernel time) :

MongoDB PostgreSQL MySQL
API Maker 3.3 vCPU 3.0 vCPU 2.9 vCPU
The database 3.3 vCPU 1.7 vCPU 1.6 vCPU
MongoDB of API Maker (when it is not the one tested) – 0.0 vCPU 0.0 vCPU
Sandboxes (idle : no code runs in get all) 0.0 vCPU 0.0 vCPU 0.0 vCPU
Whole server busy (of its 8 vCPUs) 94 % 73 % 72 %
… of which kernel time (network, disk), counted in the lines above too 31 % 28 % 31 %

Steal time (CPU the hypervisor gave to other servers) was 0 % on average, 7 % at most. The load generator, sampled the same way, was never more than 13 % busy over its 32 cores : it was never the limit.

Get all

The schema API of a table answers all its rows : GET /api/schema/<user>/<instance>/<database>/<table>. Every request reads the ten rows from the database, converts them with the schema of the table and sends them as JSON. About this API.

Get all : public

No token : the API is public. Each answer : 2,418 bytes (MongoDB), status 200.

Requests / second 12,640 192,274 requests in 15 s
Latency p50 7ms average 7.3 ms
Latency p99 17ms max 44 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 12,818 · 2 : 12,461 req/s · spread 2.8 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.3 vCPU, 131 MB RSS · MongoDB 3.3 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 94 %, of which kernel (network, disk) 31 % · memory used 975 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get all, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg    │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼────────┼─────────┼───────┤
│ Latency │ 3 ms │ 7 ms │ 14 ms │ 17 ms │ 7.3 ms │ 2.97 ms │ 44 ms │
└─────────┴──────┴──────┴───────┴───────┴────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 12,551  │ 12,551  │ 12,863  │ 13,079  │ 12,818.4 │ 153.17 │ 12,550  │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 34.3 MB │ 34.3 MB │ 35.2 MB │ 35.8 MB │ 35.1 MB  │ 416 kB │ 34.3 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 2            │
├────────────┼──────────────┤
│ 2.5        │ 3            │
├────────────┼──────────────┤
│ 10         │ 4            │
├────────────┼──────────────┤
│ 25         │ 5            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 9            │
├────────────┼──────────────┤
│ 90         │ 11           │
├────────────┼──────────────┤
│ 97.5       │ 14           │
├────────────┼──────────────┤
│ 99         │ 17           │
├────────────┼──────────────┤
│ 99.9       │ 27           │
├────────────┼──────────────┤
│ 99.99      │ 37           │
├────────────┼──────────────┤
│ 99.999     │ 42           │
└────────────┴──────────────┘

192k requests in 15.01s, 526 MB read

Requests / second 12,641 188,004 requests in 15 s
Latency p50 7ms average 7.5 ms
Latency p99 10ms max 19 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 12,748 · 2 : 12,534 req/s · spread 1.7 % · the output below is round 2, the closer to the average

Server during this run API Maker 3.0 vCPU, 139 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.7 vCPU · sandboxes 0.0 vCPU, 815 MB · whole server busy 73 %, of which kernel (network, disk) 28 % · memory used 2291 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get all, public · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 6 ms │ 7 ms │ 9 ms  │ 10 ms │ 7.48 ms │ 0.92 ms │ 19 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 12,223  │ 12,223  │ 12,447  │ 13,335  │ 12,534.14 │ 268.67 │ 12,220  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 29.6 MB │ 29.6 MB │ 30.2 MB │ 32.3 MB │ 30.4 MB   │ 651 kB │ 29.6 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 7            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 8            │
├────────────┼──────────────┤
│ 97.5       │ 9            │
├────────────┼──────────────┤
│ 99         │ 10           │
├────────────┼──────────────┤
│ 99.9       │ 11           │
├────────────┼──────────────┤
│ 99.99      │ 16           │
├────────────┼──────────────┤
│ 99.999     │ 18           │
└────────────┴──────────────┘

188k requests in 15.01s, 456 MB read

Requests / second 13,748 206,778 requests in 15 s
Latency p50 7ms average 6.8 ms
Latency p99 9ms max 14 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 13,785 · 2 : 13,711 req/s · spread 0.5 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.9 vCPU, 126 MB RSS · MongoDB 0.0 vCPU · MySQL 1.6 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 72 %, of which kernel (network, disk) 31 % · memory used 1667 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get all, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 5 ms │ 7 ms │ 8 ms  │ 9 ms │ 6.76 ms │ 0.85 ms │ 14 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 13,575  │ 13,575  │ 13,743  │ 14,207  │ 13,785.34 │ 168.64 │ 13,575  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 32.9 MB │ 32.9 MB │ 33.3 MB │ 34.4 MB │ 33.4 MB   │ 407 kB │ 32.9 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 5            │
├────────────┼──────────────┤
│ 2.5        │ 5            │
├────────────┼──────────────┤
│ 10         │ 6            │
├────────────┼──────────────┤
│ 25         │ 6            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 7            │
├────────────┼──────────────┤
│ 90         │ 8            │
├────────────┼──────────────┤
│ 97.5       │ 8            │
├────────────┼──────────────┤
│ 99         │ 9            │
├────────────┼──────────────┤
│ 99.9       │ 10           │
├────────────┼──────────────┤
│ 99.99      │ 12           │
├────────────┼──────────────┤
│ 99.999     │ 13           │
└────────────┴──────────────┘

207k requests in 15.01s, 501 MB read

Get all : both tokens

With x-am-authorization and x-am-user-authorization, both checked on every request. Each answer : 2,418 bytes (MongoDB), status 200.

Requests / second 12,106 185,158 requests in 15 s
Latency p50 7ms average 7.6 ms
Latency p99 17ms max 42 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 12,344 · 2 : 11,868 req/s · spread 3.9 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.7 vCPU, 131 MB RSS · MongoDB 2.9 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 94 %, of which kernel (network, disk) 30 % · memory used 990 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get all, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg    │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼────────┼─────────┼───────┤
│ Latency │ 3 ms │ 7 ms │ 14 ms │ 17 ms │ 7.6 ms │ 2.91 ms │ 42 ms │
└─────────┴──────┴──────┴───────┴───────┴────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%  │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 11,943  │ 11,943  │ 12,399  │ 12,799 │ 12,344.27 │ 211.4  │ 11,940  │
├───────────┼─────────┼─────────┼─────────┼────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 32.7 MB │ 32.7 MB │ 33.9 MB │ 35 MB  │ 33.8 MB   │ 582 kB │ 32.7 MB │
└───────────┴─────────┴─────────┴─────────┴────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 2            │
├────────────┼──────────────┤
│ 2.5        │ 3            │
├────────────┼──────────────┤
│ 10         │ 4            │
├────────────┼──────────────┤
│ 25         │ 6            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 9            │
├────────────┼──────────────┤
│ 90         │ 11           │
├────────────┼──────────────┤
│ 97.5       │ 14           │
├────────────┼──────────────┤
│ 99         │ 17           │
├────────────┼──────────────┤
│ 99.9       │ 26           │
├────────────┼──────────────┤
│ 99.99      │ 34           │
├────────────┼──────────────┤
│ 99.999     │ 42           │
└────────────┴──────────────┘

185k requests in 15.01s, 506 MB read

Requests / second 11,913 181,979 requests in 15 s
Latency p50 8ms average 7.7 ms
Latency p99 10ms max 18 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 12,133 · 2 : 11,693 req/s · spread 3.7 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.3 vCPU, 126 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.7 vCPU · sandboxes 0.0 vCPU, 57 MB · whole server busy 75 %, of which kernel (network, disk) 27 % · memory used 1284 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get all, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev  │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼────────┼───────┤
│ Latency │ 6 ms │ 8 ms │ 9 ms  │ 10 ms │ 7.74 ms │ 0.9 ms │ 18 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 11,831  │ 11,831  │ 12,087  │ 12,831  │ 12,132.54 │ 217.6  │ 11,830  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 28.7 MB │ 28.7 MB │ 29.3 MB │ 31.1 MB │ 29.4 MB   │ 525 kB │ 28.7 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 7            │
├────────────┼──────────────┤
│ 50         │ 8            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 9            │
├────────────┼──────────────┤
│ 97.5       │ 9            │
├────────────┼──────────────┤
│ 99         │ 10           │
├────────────┼──────────────┤
│ 99.9       │ 11           │
├────────────┼──────────────┤
│ 99.99      │ 14           │
├────────────┼──────────────┤
│ 99.999     │ 17           │
└────────────┴──────────────┘

182k requests in 15.01s, 441 MB read

Requests / second 12,712 192,036 requests in 15 s
Latency p50 7ms average 7.3 ms
Latency p99 10ms max 16 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 12,804 · 2 : 12,620 req/s · spread 1.4 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.3 vCPU, 129 MB RSS · MongoDB 0.0 vCPU · MySQL 1.5 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 74 %, of which kernel (network, disk) 29 % · memory used 1670 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get all, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 6 ms │ 7 ms │ 9 ms  │ 10 ms │ 7.31 ms │ 1.03 ms │ 16 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 11,647  │ 11,647  │ 12,847  │ 13,439  │ 12,803.47 │ 398.71 │ 11,640  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 28.2 MB │ 28.2 MB │ 31.1 MB │ 32.6 MB │ 31 MB     │ 968 kB │ 28.2 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 6            │
├────────────┼──────────────┤
│ 25         │ 7            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 8            │
├────────────┼──────────────┤
│ 97.5       │ 9            │
├────────────┼──────────────┤
│ 99         │ 10           │
├────────────┼──────────────┤
│ 99.9       │ 13           │
├────────────┼──────────────┤
│ 99.99      │ 15           │
├────────────┼──────────────┤
│ 99.999     │ 16           │
└────────────┴──────────────┘

192k requests in 15.01s, 465 MB read

Get all with caching

The same request on a table whose API settings say enableCaching: true. The first answer is kept in Redis, under a key made of who asks and what is asked ; the next requests are answered from Redis until the answer expires or something writes the table. About this API.

Get all with caching : public

No token : the API is public. Each answer : 2,418 bytes (MongoDB), status 200.

Requests / second 43,980 658,305 requests in 15 s
Latency p50 2ms average 1.8 ms
Latency p99 3ms max 207 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 44,069 · 2 : 43,890 req/s · spread 0.4 % · the output below is round 2, the closer to the average

Server during this run API Maker 6.2 vCPU, 142 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 855 MB · Redis 0.3 vCPU · whole server busy 86 %, of which kernel (network, disk) 34 % · memory used 2003 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get all with caching, public · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public_cached"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public_cached
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max    │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
│ Latency │ 1 ms │ 2 ms │ 3 ms  │ 3 ms │ 1.79 ms │ 0.78 ms │ 207 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
┌───────────┬────────┬────────┬────────┬────────┬───────────┬─────────┬────────┐
│ Stat      │ 1%     │ 2.5%   │ 50%    │ 97.5%  │ Avg       │ Stdev   │ Min    │
├───────────┼────────┼────────┼────────┼────────┼───────────┼─────────┼────────┤
│ Req/Sec   │ 43,103 │ 43,103 │ 43,871 │ 44,607 │ 43,890.14 │ 416     │ 43,087 │
├───────────┼────────┼────────┼────────┼────────┼───────────┼─────────┼────────┤
│ Bytes/Sec │ 118 MB │ 118 MB │ 120 MB │ 122 MB │ 120 MB    │ 1.13 MB │ 118 MB │
└───────────┴────────┴────────┴────────┴────────┴───────────┴─────────┴────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 1            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 2            │
├────────────┼──────────────┤
│ 90         │ 2            │
├────────────┼──────────────┤
│ 97.5       │ 3            │
├────────────┼──────────────┤
│ 99         │ 3            │
├────────────┼──────────────┤
│ 99.9       │ 4            │
├────────────┼──────────────┤
│ 99.99      │ 7            │
├────────────┼──────────────┤
│ 99.999     │ 9            │
└────────────┴──────────────┘

658k requests in 15.01s, 1.8 GB read

Requests / second 43,173 649,417 requests in 15 s
Latency p50 2ms average 1.8 ms
Latency p99 3ms max 10 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 43,052 · 2 : 43,295 req/s · spread 0.6 % · the output below is round 2, the closer to the average

Server during this run API Maker 6.2 vCPU, 137 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.0 vCPU · sandboxes 0.0 vCPU, 814 MB · Redis 0.3 vCPU · whole server busy 86 %, of which kernel (network, disk) 34 % · memory used 2279 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get all with caching, public · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public_cached"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public_cached
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev  │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼────────┼───────┤
│ Latency │ 1 ms │ 2 ms │ 3 ms  │ 3 ms │ 1.82 ms │ 0.6 ms │ 10 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴────────┴───────┘
┌───────────┬────────┬────────┬────────┬────────┬───────────┬─────────┬────────┐
│ Stat      │ 1%     │ 2.5%   │ 50%    │ 97.5%  │ Avg       │ Stdev   │ Min    │
├───────────┼────────┼────────┼────────┼────────┼───────────┼─────────┼────────┤
│ Req/Sec   │ 42,591 │ 42,591 │ 43,455 │ 43,935 │ 43,294.94 │ 417.21  │ 42,577 │
├───────────┼────────┼────────┼────────┼────────┼───────────┼─────────┼────────┤
│ Bytes/Sec │ 103 MB │ 103 MB │ 105 MB │ 107 MB │ 105 MB    │ 1.01 MB │ 103 MB │
└───────────┴────────┴────────┴────────┴────────┴───────────┴─────────┴────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 1            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 2            │
├────────────┼──────────────┤
│ 90         │ 2            │
├────────────┼──────────────┤
│ 97.5       │ 3            │
├────────────┼──────────────┤
│ 99         │ 3            │
├────────────┼──────────────┤
│ 99.9       │ 4            │
├────────────┼──────────────┤
│ 99.99      │ 6            │
├────────────┼──────────────┤
│ 99.999     │ 9            │
└────────────┴──────────────┘

650k requests in 15.01s, 1.58 GB read

Requests / second 44,027 663,287 requests in 15 s
Latency p50 2ms average 1.8 ms
Latency p99 3ms max 9 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 44,219 · 2 : 43,835 req/s · spread 0.9 % · the output below is round 1, the closer to the average

Server during this run API Maker 6.2 vCPU, 125 MB RSS · MongoDB 0.0 vCPU · MySQL 0.0 vCPU · sandboxes 0.0 vCPU, 55 MB · Redis 0.3 vCPU · whole server busy 86 %, of which kernel (network, disk) 34 % · memory used 1623 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get all with caching, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public_cached"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public_cached
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬────────┬──────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev  │ Max  │
├─────────┼──────┼──────┼───────┼──────┼─────────┼────────┼──────┤
│ Latency │ 1 ms │ 2 ms │ 3 ms  │ 3 ms │ 1.77 ms │ 0.6 ms │ 9 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴────────┴──────┘
┌───────────┬────────┬────────┬────────┬────────┬───────────┬─────────┬────────┐
│ Stat      │ 1%     │ 2.5%   │ 50%    │ 97.5%  │ Avg       │ Stdev   │ Min    │
├───────────┼────────┼────────┼────────┼────────┼───────────┼─────────┼────────┤
│ Req/Sec   │ 43,199 │ 43,199 │ 44,383 │ 45,567 │ 44,218.67 │ 629.97  │ 43,179 │
├───────────┼────────┼────────┼────────┼────────┼───────────┼─────────┼────────┤
│ Bytes/Sec │ 105 MB │ 105 MB │ 108 MB │ 111 MB │ 107 MB    │ 1.53 MB │ 105 MB │
└───────────┴────────┴────────┴────────┴────────┴───────────┴─────────┴────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 1            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 2            │
├────────────┼──────────────┤
│ 90         │ 2            │
├────────────┼──────────────┤
│ 97.5       │ 3            │
├────────────┼──────────────┤
│ 99         │ 3            │
├────────────┼──────────────┤
│ 99.9       │ 4            │
├────────────┼──────────────┤
│ 99.99      │ 6            │
├────────────┼──────────────┤
│ 99.999     │ 8            │
└────────────┴──────────────┘

663k requests in 15.01s, 1.61 GB read

Get all with caching : both tokens

With x-am-authorization and x-am-user-authorization, both checked on every request. Each answer : 2,418 bytes (MongoDB), status 200.

Requests / second 36,123 535,203 requests in 15 s
Latency p50 2ms average 2.3 ms
Latency p99 4ms max 10 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 36,562 · 2 : 35,683 req/s · spread 2.4 % · the output below is round 2, the closer to the average

Server during this run API Maker 6.5 vCPU, 143 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 855 MB · Redis 0.3 vCPU · whole server busy 90 %, of which kernel (network, disk) 29 % · memory used 2020 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get all with caching, both tokens · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_cached"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_cached
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg    │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼────────┼─────────┼───────┤
│ Latency │ 1 ms │ 2 ms │ 4 ms  │ 4 ms │ 2.3 ms │ 0.69 ms │ 10 ms │
└─────────┴──────┴──────┴───────┴──────┴────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 35,039  │ 35,039  │ 35,711  │ 36,511  │ 35,683.2 │ 405.25 │ 35,021  │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 95.9 MB │ 95.9 MB │ 97.7 MB │ 99.9 MB │ 97.7 MB  │ 1.1 MB │ 95.9 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 2            │
├────────────┼──────────────┤
│ 25         │ 2            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 3            │
├────────────┼──────────────┤
│ 90         │ 3            │
├────────────┼──────────────┤
│ 97.5       │ 4            │
├────────────┼──────────────┤
│ 99         │ 4            │
├────────────┼──────────────┤
│ 99.9       │ 5            │
├────────────┼──────────────┤
│ 99.99      │ 7            │
├────────────┼──────────────┤
│ 99.999     │ 9            │
└────────────┴──────────────┘

535k requests in 15.01s, 1.46 GB read

Requests / second 35,403 528,689 requests in 15 s
Latency p50 2ms average 2.3 ms
Latency p99 4ms max 212 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 35,560 · 2 : 35,246 req/s · spread 0.9 % · the output below is round 2, the closer to the average

Server during this run API Maker 6.5 vCPU, 137 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.0 vCPU · sandboxes 0.0 vCPU, 814 MB · Redis 0.3 vCPU · whole server busy 90 %, of which kernel (network, disk) 29 % · memory used 2273 MB of 15991 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get all with caching, both tokens · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_cached"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_cached
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max    │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
│ Latency │ 1 ms │ 2 ms │ 4 ms  │ 4 ms │ 2.34 ms │ 1.11 ms │ 212 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
┌───────────┬─────────┬─────────┬─────────┬────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%  │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 34,879  │ 34,879  │ 35,231  │ 35,871 │ 35,245.87 │ 264.26 │ 34,877  │
├───────────┼─────────┼─────────┼─────────┼────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 84.7 MB │ 84.7 MB │ 85.5 MB │ 87 MB  │ 85.5 MB   │ 634 kB │ 84.6 MB │
└───────────┴─────────┴─────────┴─────────┴────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 2            │
├────────────┼──────────────┤
│ 25         │ 2            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 3            │
├────────────┼──────────────┤
│ 90         │ 3            │
├────────────┼──────────────┤
│ 97.5       │ 4            │
├────────────┼──────────────┤
│ 99         │ 4            │
├────────────┼──────────────┤
│ 99.9       │ 5            │
├────────────┼──────────────┤
│ 99.99      │ 7            │
├────────────┼──────────────┤
│ 99.999     │ 210          │
└────────────┴──────────────┘

529k requests in 15.01s, 1.28 GB read

Requests / second 35,915 547,580 requests in 15 s
Latency p50 2ms average 2.2 ms
Latency p99 4ms max 18 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 36,505 · 2 : 35,325 req/s · spread 3.3 % · the output below is round 1, the closer to the average

Server during this run API Maker 6.5 vCPU, 125 MB RSS · MongoDB 0.0 vCPU · MySQL 0.0 vCPU · sandboxes 0.0 vCPU, 55 MB · Redis 0.3 vCPU · whole server busy 89 %, of which kernel (network, disk) 29 % · memory used 1631 MB of 15991 MB · steal 0 % · swap not touched

autocannon · MySQL · get all with caching, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_cached"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_cached
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 2 ms │ 4 ms  │ 4 ms │ 2.24 ms │ 0.79 ms │ 18 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Req/Sec   │ 35,711  │ 35,711  │ 36,127  │ 37,695  │ 36,504.54 │ 627.23  │ 35,698  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Bytes/Sec │ 86.6 MB │ 86.6 MB │ 87.7 MB │ 91.5 MB │ 88.6 MB   │ 1.53 MB │ 86.6 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 2            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 3            │
├────────────┼──────────────┤
│ 90         │ 3            │
├────────────┼──────────────┤
│ 97.5       │ 4            │
├────────────┼──────────────┤
│ 99         │ 4            │
├────────────┼──────────────┤
│ 99.9       │ 8            │
├────────────┼──────────────┤
│ 99.99      │ 11           │
├────────────┼──────────────┤
│ 99.999     │ 15           │
└────────────┴──────────────┘

548k requests in 15.01s, 1.33 GB read

Get all by stream

GET …/<table>/stream : the rows are sent while they are read from the database cursor, so a large table never sits whole in memory. About this API.

Get all by stream : public

No token : the API is public. Each answer : 2,477 bytes (MongoDB), status 200.

Requests / second 11,898 176,800 requests in 15 s
Latency p50 8ms average 8.0 ms
Latency p99 17ms max 52 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 12,009 · 2 : 11,787 req/s · spread 1.9 % · the output below is round 2, the closer to the average

Server during this run API Maker 3.6 vCPU, 147 MB RSS · MongoDB 3.0 vCPU · sandboxes 0.0 vCPU, 855 MB · whole server busy 95 %, of which kernel (network, disk) 29 % · memory used 2056 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get all by stream, public · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public/stream"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public/stream
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 3 ms │ 8 ms │ 15 ms │ 17 ms │ 7.98 ms │ 3.04 ms │ 52 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 11,575  │ 11,575  │ 11,775  │ 12,071  │ 11,786.94 │ 131.36 │ 11,574  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 33.4 MB │ 33.4 MB │ 33.9 MB │ 34.8 MB │ 34 MB     │ 375 kB │ 33.4 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 3            │
├────────────┼──────────────┤
│ 2.5        │ 3            │
├────────────┼──────────────┤
│ 10         │ 5            │
├────────────┼──────────────┤
│ 25         │ 6            │
├────────────┼──────────────┤
│ 50         │ 8            │
├────────────┼──────────────┤
│ 75         │ 10           │
├────────────┼──────────────┤
│ 90         │ 12           │
├────────────┼──────────────┤
│ 97.5       │ 15           │
├────────────┼──────────────┤
│ 99         │ 17           │
├────────────┼──────────────┤
│ 99.9       │ 28           │
├────────────┼──────────────┤
│ 99.99      │ 35           │
├────────────┼──────────────┤
│ 99.999     │ 43           │
└────────────┴──────────────┘

177k requests in 15.01s, 510 MB read

Requests / second 13,073 197,970 requests in 15 s
Latency p50 7ms average 7.1 ms
Latency p99 9ms max 16 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 13,198 · 2 : 12,947 req/s · spread 1.9 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.0 vCPU, 151 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.8 vCPU · sandboxes 0.0 vCPU, 57 MB · whole server busy 74 %, of which kernel (network, disk) 29 % · memory used 1307 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get all by stream, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public/stream"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public/stream
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 6 ms │ 7 ms │ 9 ms  │ 9 ms │ 7.08 ms │ 0.84 ms │ 16 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%    │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 12,887  │ 12,887  │ 13,239 │ 13,575  │ 13,198.14 │ 184.12 │ 12,886  │
├───────────┼─────────┼─────────┼────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 33.1 MB │ 33.1 MB │ 34 MB  │ 34.9 MB │ 33.9 MB   │ 472 kB │ 33.1 MB │
└───────────┴─────────┴─────────┴────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 6            │
├────────────┼──────────────┤
│ 25         │ 7            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 8            │
├────────────┼──────────────┤
│ 97.5       │ 9            │
├────────────┼──────────────┤
│ 99         │ 9            │
├────────────┼──────────────┤
│ 99.9       │ 10           │
├────────────┼──────────────┤
│ 99.99      │ 12           │
├────────────┼──────────────┤
│ 99.999     │ 14           │
└────────────┴──────────────┘

198k requests in 15.01s, 509 MB read

Requests / second 13,095 196,524 requests in 15 s
Latency p50 7ms average 7.1 ms
Latency p99 9ms max 218 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 13,102 · 2 : 13,088 req/s · spread 0.1 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.3 vCPU, 145 MB RSS · MongoDB 0.0 vCPU · MySQL 1.5 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 74 %, of which kernel (network, disk) 29 % · memory used 1656 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get all by stream, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public/stream"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public/stream
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max    │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
│ Latency │ 6 ms │ 7 ms │ 9 ms  │ 9 ms │ 7.13 ms │ 1.02 ms │ 218 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
┌───────────┬────────┬────────┬─────────┬─────────┬───────────┬────────┬────────┐
│ Stat      │ 1%     │ 2.5%   │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min    │
├───────────┼────────┼────────┼─────────┼─────────┼───────────┼────────┼────────┤
│ Req/Sec   │ 12,847 │ 12,847 │ 13,111  │ 13,383  │ 13,102.14 │ 154.29 │ 12,845 │
├───────────┼────────┼────────┼─────────┼─────────┼───────────┼────────┼────────┤
│ Bytes/Sec │ 33 MB  │ 33 MB  │ 33.7 MB │ 34.4 MB │ 33.7 MB   │ 396 kB │ 33 MB  │
└───────────┴────────┴────────┴─────────┴─────────┴───────────┴────────┴────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 6            │
├────────────┼──────────────┤
│ 25         │ 7            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 8            │
├────────────┼──────────────┤
│ 97.5       │ 9            │
├────────────┼──────────────┤
│ 99         │ 9            │
├────────────┼──────────────┤
│ 99.9       │ 11           │
├────────────┼──────────────┤
│ 99.99      │ 12           │
├────────────┼──────────────┤
│ 99.999     │ 14           │
└────────────┴──────────────┘

197k requests in 15.01s, 505 MB read

Get all by stream : both tokens

With x-am-authorization and x-am-user-authorization, both checked on every request. Each answer : 2,577 bytes (MongoDB), status 200.

Requests / second 11,516 173,108 requests in 15 s
Latency p50 8ms average 8.2 ms
Latency p99 18ms max 55 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 11,542 · 2 : 11,490 req/s · spread 0.4 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.9 vCPU, 148 MB RSS · MongoDB 2.7 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 95 %, of which kernel (network, disk) 28 % · memory used 1019 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get all by stream, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers/stream"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers/stream
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 3 ms │ 8 ms │ 15 ms │ 18 ms │ 8.17 ms │ 3.02 ms │ 55 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 11,311  │ 11,311  │ 11,479  │ 11,927  │ 11,542.14 │ 164.64 │ 11,310  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 33.8 MB │ 33.8 MB │ 34.2 MB │ 35.6 MB │ 34.4 MB   │ 485 kB │ 33.7 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 3            │
├────────────┼──────────────┤
│ 2.5        │ 3            │
├────────────┼──────────────┤
│ 10         │ 5            │
├────────────┼──────────────┤
│ 25         │ 6            │
├────────────┼──────────────┤
│ 50         │ 8            │
├────────────┼──────────────┤
│ 75         │ 10           │
├────────────┼──────────────┤
│ 90         │ 12           │
├────────────┼──────────────┤
│ 97.5       │ 15           │
├────────────┼──────────────┤
│ 99         │ 18           │
├────────────┼──────────────┤
│ 99.9       │ 27           │
├────────────┼──────────────┤
│ 99.99      │ 34           │
├────────────┼──────────────┤
│ 99.999     │ 39           │
└────────────┴──────────────┘

173k requests in 15.01s, 516 MB read

Requests / second 12,162 184,136 requests in 15 s
Latency p50 8ms average 7.7 ms
Latency p99 10ms max 16 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 12,276 · 2 : 12,048 req/s · spread 1.9 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.3 vCPU, 150 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.7 vCPU · sandboxes 0.0 vCPU, 57 MB · whole server busy 76 %, of which kernel (network, disk) 27 % · memory used 1310 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get all by stream, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers/stream"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers/stream
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 6 ms │ 8 ms │ 9 ms  │ 10 ms │ 7.65 ms │ 0.94 ms │ 16 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 11,951  │ 11,951  │ 12,279  │ 12,839  │ 12,275.47 │ 204.91 │ 11,948  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 31.9 MB │ 31.9 MB │ 32.8 MB │ 34.3 MB │ 32.8 MB   │ 549 kB │ 31.9 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 7            │
├────────────┼──────────────┤
│ 50         │ 8            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 9            │
├────────────┼──────────────┤
│ 97.5       │ 9            │
├────────────┼──────────────┤
│ 99         │ 10           │
├────────────┼──────────────┤
│ 99.9       │ 11           │
├────────────┼──────────────┤
│ 99.99      │ 13           │
├────────────┼──────────────┤
│ 99.999     │ 16           │
└────────────┴──────────────┘

184k requests in 15.01s, 492 MB read

Requests / second 12,340 184,543 requests in 15 s
Latency p50 8ms average 7.6 ms
Latency p99 10ms max 221 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 12,303 · 2 : 12,376 req/s · spread 0.6 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.6 vCPU, 145 MB RSS · MongoDB 0.0 vCPU · MySQL 1.4 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 76 %, of which kernel (network, disk) 28 % · memory used 1659 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get all by stream, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers/stream"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers/stream
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max    │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼────────┤
│ Latency │ 6 ms │ 8 ms │ 9 ms  │ 10 ms │ 7.63 ms │ 1.07 ms │ 221 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 12,087  │ 12,087  │ 12,263  │ 12,599  │ 12,303.2 │ 132.36 │ 12,081  │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 32.3 MB │ 32.3 MB │ 32.8 MB │ 33.7 MB │ 32.9 MB  │ 353 kB │ 32.3 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 7            │
├────────────┼──────────────┤
│ 50         │ 8            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 9            │
├────────────┼──────────────┤
│ 97.5       │ 9            │
├────────────┼──────────────┤
│ 99         │ 10           │
├────────────┼──────────────┤
│ 99.9       │ 11           │
├────────────┼──────────────┤
│ 99.99      │ 13           │
├────────────┼──────────────┤
│ 99.999     │ 15           │
└────────────┴──────────────┘

185k requests in 15.01s, 493 MB read

Custom API calling get all

A custom API written in TypeScript, return await g.sys.db.getAll({ instance, database, collection }). This code is lean : it only reads what it is handed and asks g.sys for a read, so API Maker runs it in the server itself, with QuickJS, on the thread which answers the request, and the request never leaves the server. Code which needs more (a package, the time of the machine, g.shared, …) runs in the sandbox of the account : see the next API. About this API.

The custom API (public : customers_public ; both tokens : customers)
import * as T from 'types';
async function main(g: T.IAMGlobal) {
    return await g.sys.db.getAll({ instance: 'mongodb', database: 'am_bench', collection: 'customers_public' });
}
module.exports = main;

Custom API calling get all : public

No token : the API is public. Each answer : 2,418 bytes (MongoDB), status 200.

Requests / second 8,893 132,169 requests in 15 s
Latency p50 11ms average 10.8 ms
Latency p99 20ms max 45 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 8,976 · 2 : 8,810 req/s · spread 1.9 % · the output below is round 2, the closer to the average

Server during this run API Maker 4.6 vCPU, 144 MB RSS · MongoDB 2.3 vCPU · sandboxes 0.0 vCPU, 855 MB · whole server busy 96 %, of which kernel (network, disk) 23 % · memory used 2051 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · custom api calling get all, public · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/custom-api/bench/bench_mongodb_public"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_mongodb_public
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 5 ms │ 11 ms │ 18 ms │ 20 ms │ 10.85 ms │ 3.46 ms │ 45 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 8,599   │ 8,599   │ 8,807   │ 9,095   │ 8,810.4 │ 142.19 │ 8,598   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 23.5 MB │ 23.5 MB │ 24.1 MB │ 24.9 MB │ 24.1 MB │ 391 kB │ 23.5 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 4            │
├────────────┼──────────────┤
│ 2.5        │ 5            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 8            │
├────────────┼──────────────┤
│ 50         │ 11           │
├────────────┼──────────────┤
│ 75         │ 13           │
├────────────┼──────────────┤
│ 90         │ 15           │
├────────────┼──────────────┤
│ 97.5       │ 18           │
├────────────┼──────────────┤
│ 99         │ 20           │
├────────────┼──────────────┤
│ 99.9       │ 27           │
├────────────┼──────────────┤
│ 99.99      │ 36           │
├────────────┼──────────────┤
│ 99.999     │ 45           │
└────────────┴──────────────┘

132k requests in 15.01s, 361 MB read

Requests / second 9,176 138,881 requests in 15 s
Latency p50 10ms average 10.3 ms
Latency p99 13ms max 18 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 9,258 · 2 : 9,094 req/s · spread 1.8 % · the output below is round 1, the closer to the average

Server during this run API Maker 4.6 vCPU, 137 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.3 vCPU · sandboxes 0.0 vCPU, 57 MB · whole server busy 85 %, of which kernel (network, disk) 22 % · memory used 1297 MB of 15991 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · custom api calling get all, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/custom-api/bench/bench_postgres_public"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_postgres_public
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 9 ms │ 10 ms │ 13 ms │ 13 ms │ 10.3 ms │ 1.15 ms │ 18 ms │
└─────────┴──────┴───────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 9,119   │ 9,119   │ 9,247   │ 9,639   │ 9,258.4 │ 122.53 │ 9,119   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 22.1 MB │ 22.1 MB │ 22.4 MB │ 23.4 MB │ 22.4 MB │ 295 kB │ 22.1 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 8            │
├────────────┼──────────────┤
│ 2.5        │ 9            │
├────────────┼──────────────┤
│ 10         │ 9            │
├────────────┼──────────────┤
│ 25         │ 10           │
├────────────┼──────────────┤
│ 50         │ 10           │
├────────────┼──────────────┤
│ 75         │ 11           │
├────────────┼──────────────┤
│ 90         │ 12           │
├────────────┼──────────────┤
│ 97.5       │ 13           │
├────────────┼──────────────┤
│ 99         │ 13           │
├────────────┼──────────────┤
│ 99.9       │ 15           │
├────────────┼──────────────┤
│ 99.99      │ 16           │
├────────────┼──────────────┤
│ 99.999     │ 18           │
└────────────┴──────────────┘

139k requests in 15.01s, 337 MB read

Requests / second 9,820 147,636 requests in 15 s
Latency p50 10ms average 9.7 ms
Latency p99 12ms max 19 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 9,844 · 2 : 9,796 req/s · spread 0.5 % · the output below is round 1, the closer to the average

Server during this run API Maker 4.5 vCPU, 136 MB RSS · MongoDB 0.0 vCPU · MySQL 1.2 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 82 %, of which kernel (network, disk) 23 % · memory used 1653 MB of 15991 MB · steal 0 % · swap not touched

autocannon · MySQL · custom api calling get all, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/custom-api/bench/bench_mysql_public"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_mysql_public
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 8 ms │ 10 ms │ 12 ms │ 12 ms │ 9.66 ms │ 1.12 ms │ 19 ms │
└─────────┴──────┴───────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 9,703   │ 9,703   │ 9,815   │ 10,119  │ 9,843.47 │ 118.07 │ 9,700   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 23.5 MB │ 23.5 MB │ 23.8 MB │ 24.5 MB │ 23.9 MB  │ 288 kB │ 23.5 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 8            │
├────────────┼──────────────┤
│ 2.5        │ 8            │
├────────────┼──────────────┤
│ 10         │ 9            │
├────────────┼──────────────┤
│ 25         │ 9            │
├────────────┼──────────────┤
│ 50         │ 10           │
├────────────┼──────────────┤
│ 75         │ 10           │
├────────────┼──────────────┤
│ 90         │ 11           │
├────────────┼──────────────┤
│ 97.5       │ 12           │
├────────────┼──────────────┤
│ 99         │ 12           │
├────────────┼──────────────┤
│ 99.9       │ 14           │
├────────────┼──────────────┤
│ 99.99      │ 16           │
├────────────┼──────────────┤
│ 99.999     │ 18           │
└────────────┴──────────────┘

148k requests in 15.01s, 358 MB read

Custom API calling get all : both tokens

With x-am-authorization and x-am-user-authorization, both checked on every request. Each answer : 2,418 bytes (MongoDB), status 200.

Requests / second 8,426 127,632 requests in 15 s
Latency p50 11ms average 11.3 ms
Latency p99 21ms max 36 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 8,510 · 2 : 8,342 req/s · spread 2 % · the output below is round 1, the closer to the average

Server during this run API Maker 4.9 vCPU, 143 MB RSS · MongoDB 2.1 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 97 %, of which kernel (network, disk) 22 % · memory used 1033 MB of 15991 MB · steal 0 % · swap not touched

autocannon · MongoDB · custom api calling get all, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/custom-api/bench/bench_mongodb_tokens"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_mongodb_tokens
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 5 ms │ 11 ms │ 19 ms │ 21 ms │ 11.25 ms │ 3.48 ms │ 36 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬───────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5% │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼───────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 8,295   │ 8,295   │ 8,519   │ 8,775 │ 8,509.6 │ 118.42 │ 8,292   │
├───────────┼─────────┼─────────┼─────────┼───────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 22.7 MB │ 22.7 MB │ 23.3 MB │ 24 MB │ 23.3 MB │ 320 kB │ 22.7 MB │
└───────────┴─────────┴─────────┴─────────┴───────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 4            │
├────────────┼──────────────┤
│ 2.5        │ 5            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 9            │
├────────────┼──────────────┤
│ 50         │ 11           │
├────────────┼──────────────┤
│ 75         │ 13           │
├────────────┼──────────────┤
│ 90         │ 16           │
├────────────┼──────────────┤
│ 97.5       │ 19           │
├────────────┼──────────────┤
│ 99         │ 21           │
├────────────┼──────────────┤
│ 99.9       │ 25           │
├────────────┼──────────────┤
│ 99.99      │ 31           │
├────────────┼──────────────┤
│ 99.999     │ 35           │
└────────────┴──────────────┘

128k requests in 15.01s, 349 MB read

Requests / second 8,561 127,705 requests in 15 s
Latency p50 11ms average 11.2 ms
Latency p99 14ms max 19 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 8,607 · 2 : 8,514 req/s · spread 1.1 % · the output below is round 2, the closer to the average

Server during this run API Maker 4.8 vCPU, 139 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.2 vCPU · sandboxes 0.0 vCPU, 814 MB · whole server busy 86 %, of which kernel (network, disk) 20 % · memory used 2333 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · custom api calling get all, both tokens · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/custom-api/bench/bench_postgres_tokens"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_postgres_tokens
100 connections
20 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 10 ms │ 11 ms │ 14 ms │ 14 ms │ 11.24 ms │ 1.17 ms │ 19 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 8,367   │ 8,367   │ 8,503   │ 8,751   │ 8,514.4 │ 96.55  │ 8,367   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 20.3 MB │ 20.3 MB │ 20.6 MB │ 21.2 MB │ 20.6 MB │ 231 kB │ 20.3 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 9            │
├────────────┼──────────────┤
│ 2.5        │ 10           │
├────────────┼──────────────┤
│ 10         │ 10           │
├────────────┼──────────────┤
│ 25         │ 11           │
├────────────┼──────────────┤
│ 50         │ 11           │
├────────────┼──────────────┤
│ 75         │ 12           │
├────────────┼──────────────┤
│ 90         │ 13           │
├────────────┼──────────────┤
│ 97.5       │ 14           │
├────────────┼──────────────┤
│ 99         │ 14           │
├────────────┼──────────────┤
│ 99.9       │ 16           │
├────────────┼──────────────┤
│ 99.99      │ 18           │
├────────────┼──────────────┤
│ 99.999     │ 19           │
└────────────┴──────────────┘

128k requests in 15.01s, 310 MB read

Requests / second 9,129 136,922 requests in 15 s
Latency p50 10ms average 10.5 ms
Latency p99 13ms max 21 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 9,128 · 2 : 9,130 req/s · spread 0 % · the output below is round 1, the closer to the average

Server during this run API Maker 4.8 vCPU, 138 MB RSS · MongoDB 0.0 vCPU · MySQL 1.1 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 85 %, of which kernel (network, disk) 22 % · memory used 1655 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · custom api calling get all, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/custom-api/bench/bench_mysql_tokens"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_mysql_tokens
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 9 ms │ 10 ms │ 13 ms │ 13 ms │ 10.46 ms │ 1.17 ms │ 21 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 8,967   │ 8,967   │ 9,151   │ 9,271   │ 9,128.27 │ 98.8   │ 8,961   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 21.7 MB │ 21.7 MB │ 22.2 MB │ 22.5 MB │ 22.1 MB  │ 241 kB │ 21.7 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 8            │
├────────────┼──────────────┤
│ 2.5        │ 9            │
├────────────┼──────────────┤
│ 10         │ 9            │
├────────────┼──────────────┤
│ 25         │ 10           │
├────────────┼──────────────┤
│ 50         │ 10           │
├────────────┼──────────────┤
│ 75         │ 11           │
├────────────┼──────────────┤
│ 90         │ 12           │
├────────────┼──────────────┤
│ 97.5       │ 13           │
├────────────┼──────────────┤
│ 99         │ 13           │
├────────────┼──────────────┤
│ 99.9       │ 15           │
├────────────┼──────────────┤
│ 99.99      │ 17           │
├────────────┼──────────────┤
│ 99.999     │ 21           │
└────────────┴──────────────┘

137k requests in 15.01s, 332 MB read

Custom API in the sandbox

The same custom API, with one line more : it reads Date.now(), the time of the machine, which lean code may not. So this code runs in a sandbox of the account (a container with Node.js 24) : the request goes from API Maker to a runner of the sandbox and back, and the rows are read from inside the sandbox by the core of API Maker loaded there. About this API.

The custom API which runs in the sandbox
import * as T from 'types';
async function main(g: T.IAMGlobal) {
    const started = Date.now();       // the time of the machine : this code runs in the sandbox of the account
    return await g.sys.db.getAll({ instance: 'mongodb', database: 'am_bench', collection: 'customers_public' });
}
module.exports = main;

No token : the API is public. Each answer : 2,418 bytes (MongoDB), status 200.

Requests / second 7,569 113,233 requests in 15 s
Latency p50 13ms average 12.8 ms
Latency p99 24ms max 57 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 7,550 · 2 : 7,588 req/s · spread 0.5 % · the output below is round 1, the closer to the average

Server during this run API Maker 1.9 vCPU, 137 MB RSS · MongoDB 2.0 vCPU · sandboxes 3.9 vCPU, 842 MB · whole server busy 98 %, of which kernel (network, disk) 22 % · memory used 1868 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · custom api in the sandbox, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/custom-api/bench/bench_mongodb_sandbox"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_mongodb_sandbox
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev  │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼────────┼───────┤
│ Latency │ 5 ms │ 13 ms │ 22 ms │ 24 ms │ 12.75 ms │ 4.4 ms │ 57 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 7,259   │ 7,259   │ 7,527   │ 7,815   │ 7,549.47 │ 129.56 │ 7,258   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 19.9 MB │ 19.9 MB │ 20.6 MB │ 21.4 MB │ 20.6 MB  │ 356 kB │ 19.9 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 4            │
├────────────┼──────────────┤
│ 2.5        │ 5            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 10           │
├────────────┼──────────────┤
│ 50         │ 13           │
├────────────┼──────────────┤
│ 75         │ 15           │
├────────────┼──────────────┤
│ 90         │ 18           │
├────────────┼──────────────┤
│ 97.5       │ 22           │
├────────────┼──────────────┤
│ 99         │ 24           │
├────────────┼──────────────┤
│ 99.9       │ 32           │
├────────────┼──────────────┤
│ 99.99      │ 44           │
├────────────┼──────────────┤
│ 99.999     │ 55           │
└────────────┴──────────────┘

113k requests in 15.01s, 310 MB read

Requests / second 7,916 118,732 requests in 15 s
Latency p50 12ms average 12.1 ms
Latency p99 22ms max 33 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 7,916 · 2 : 7,915 req/s · spread 0 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.0 vCPU, 133 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.4 vCPU · sandboxes 3.6 vCPU, 799 MB · whole server busy 97 %, of which kernel (network, disk) 25 % · memory used 2292 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · custom api in the sandbox, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/custom-api/bench/bench_postgres_sandbox"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_postgres_sandbox
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 5 ms │ 12 ms │ 20 ms │ 22 ms │ 12.13 ms │ 3.83 ms │ 33 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 7,735   │ 7,735   │ 7,943   │ 8,079   │ 7,916.4 │ 103.29 │ 7,732   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 18.7 MB │ 18.7 MB │ 19.3 MB │ 19.6 MB │ 19.2 MB │ 254 kB │ 18.7 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 4            │
├────────────┼──────────────┤
│ 2.5        │ 5            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 9            │
├────────────┼──────────────┤
│ 50         │ 12           │
├────────────┼──────────────┤
│ 75         │ 15           │
├────────────┼──────────────┤
│ 90         │ 17           │
├────────────┼──────────────┤
│ 97.5       │ 20           │
├────────────┼──────────────┤
│ 99         │ 22           │
├────────────┼──────────────┤
│ 99.9       │ 26           │
├────────────┼──────────────┤
│ 99.99      │ 30           │
├────────────┼──────────────┤
│ 99.999     │ 32           │
└────────────┴──────────────┘

119k requests in 15.01s, 288 MB read

Requests / second 8,657 129,801 requests in 15 s
Latency p50 11ms average 11.1 ms
Latency p99 20ms max 30 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 8,654 · 2 : 8,661 req/s · spread 0.1 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.1 vCPU, 132 MB RSS · MongoDB 0.0 vCPU · MySQL 1.1 vCPU · sandboxes 3.7 vCPU, 863 MB · whole server busy 97 %, of which kernel (network, disk) 27 % · memory used 2536 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · custom api in the sandbox, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/custom-api/bench/bench_mysql_sandbox"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_mysql_sandbox
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 5 ms │ 11 ms │ 18 ms │ 20 ms │ 11.05 ms │ 3.52 ms │ 30 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬───────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%   │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼───────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 8,535   │ 8,535   │ 8,655 │ 8,767   │ 8,654.14 │ 68.1   │ 8,535   │
├───────────┼─────────┼─────────┼───────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 20.7 MB │ 20.7 MB │ 21 MB │ 21.3 MB │ 21 MB    │ 165 kB │ 20.7 MB │
└───────────┴─────────┴─────────┴───────┴─────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 4            │
├────────────┼──────────────┤
│ 2.5        │ 5            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 9            │
├────────────┼──────────────┤
│ 50         │ 11           │
├────────────┼──────────────┤
│ 75         │ 13           │
├────────────┼──────────────┤
│ 90         │ 16           │
├────────────┼──────────────┤
│ 97.5       │ 18           │
├────────────┼──────────────┤
│ 99         │ 20           │
├────────────┼──────────────┤
│ 99.9       │ 24           │
├────────────┼──────────────┤
│ 99.99      │ 28           │
├────────────┼──────────────┤
│ 99.999     │ 30           │
└────────────┴──────────────┘

130k requests in 15.01s, 315 MB read

Get all with a pre hook

Get all, with both tokens, on a table whose get all API has a pre hook written in TypeScript : before the API, the hook runs (lean code : in the server, with QuickJS), reads the signed-in person from x-am-user-authorization and keeps the rows of their country (g.req.query.find), the row scoping most applications need. Every row of the dataset is in India, as the person is, so the answer is the same ten rows. About this API.

The pre hook of SCHEMA_GET_ALL on customers_pre_hook
import * as T from 'types';

async function main(g: T.IAMGlobal) {
    if (!g.req.isApiRequestFromUser) return;
    const person = g.req.auth.authAMDB;               // the person, from x-am-user-authorization
    if (!person) throw [{ code: T.EStatusCode.UNAUTHORIZED, message: 'Sign in first.' }];
    const find = g.req.query.find ? (typeof g.req.query.find === 'string' ? JSON.parse(g.req.query.find) : g.req.query.find) : {};
    g.req.query.find = { $and: [find, { country: person.country }] };
}
module.exports = main;

With x-am-authorization and x-am-user-authorization, both checked on every request. Each answer : 2,418 bytes (MongoDB), status 200.

Requests / second 9,279 139,353 requests in 15 s
Latency p50 10ms average 10.3 ms
Latency p99 20ms max 41 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 9,268 · 2 : 9,290 req/s · spread 0.2 % · the output below is round 2, the closer to the average

Server during this run API Maker 4.3 vCPU, 143 MB RSS · MongoDB 2.7 vCPU · sandboxes 0.0 vCPU, 838 MB · whole server busy 97 %, of which kernel (network, disk) 25 % · memory used 2014 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get all with a pre hook, both tokens · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_pre_hook"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_pre_hook
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 5 ms │ 10 ms │ 18 ms │ 20 ms │ 10.26 ms │ 3.44 ms │ 41 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 9,031   │ 9,031   │ 9,271   │ 9,463   │ 9,290.4 │ 105.66 │ 9,031   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 24.7 MB │ 24.7 MB │ 25.3 MB │ 25.9 MB │ 25.4 MB │ 287 kB │ 24.7 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 4            │
├────────────┼──────────────┤
│ 2.5        │ 5            │
├────────────┼──────────────┤
│ 10         │ 6            │
├────────────┼──────────────┤
│ 25         │ 8            │
├────────────┼──────────────┤
│ 50         │ 10           │
├────────────┼──────────────┤
│ 75         │ 12           │
├────────────┼──────────────┤
│ 90         │ 15           │
├────────────┼──────────────┤
│ 97.5       │ 18           │
├────────────┼──────────────┤
│ 99         │ 20           │
├────────────┼──────────────┤
│ 99.9       │ 28           │
├────────────┼──────────────┤
│ 99.99      │ 36           │
├────────────┼──────────────┤
│ 99.999     │ 41           │
└────────────┴──────────────┘

139k requests in 15.01s, 381 MB read

Requests / second 9,524 144,274 requests in 15 s
Latency p50 10ms average 9.9 ms
Latency p99 13ms max 17 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 9,618 · 2 : 9,429 req/s · spread 2 % · the output below is round 1, the closer to the average

Server during this run API Maker 4.1 vCPU, 138 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.6 vCPU · sandboxes 0.0 vCPU, 798 MB · whole server busy 82 %, of which kernel (network, disk) 24 % · memory used 2288 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get all with a pre hook, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_pre_hook"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_pre_hook
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg    │ Stdev  │ Max   │
├─────────┼──────┼───────┼───────┼───────┼────────┼────────┼───────┤
│ Latency │ 8 ms │ 10 ms │ 12 ms │ 13 ms │ 9.9 ms │ 1.1 ms │ 17 ms │
└─────────┴──────┴───────┴───────┴───────┴────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 9,407   │ 9,407   │ 9,591   │ 9,935   │ 9,618.4 │ 138.58 │ 9,405   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 22.8 MB │ 22.8 MB │ 23.2 MB │ 24.1 MB │ 23.3 MB │ 334 kB │ 22.8 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 8            │
├────────────┼──────────────┤
│ 2.5        │ 8            │
├────────────┼──────────────┤
│ 10         │ 9            │
├────────────┼──────────────┤
│ 25         │ 9            │
├────────────┼──────────────┤
│ 50         │ 10           │
├────────────┼──────────────┤
│ 75         │ 10           │
├────────────┼──────────────┤
│ 90         │ 11           │
├────────────┼──────────────┤
│ 97.5       │ 12           │
├────────────┼──────────────┤
│ 99         │ 13           │
├────────────┼──────────────┤
│ 99.9       │ 14           │
├────────────┼──────────────┤
│ 99.99      │ 16           │
├────────────┼──────────────┤
│ 99.999     │ 17           │
└────────────┴──────────────┘

144k requests in 15.01s, 350 MB read

Requests / second 10,204 153,692 requests in 15 s
Latency p50 9ms average 9.3 ms
Latency p99 13ms max 20 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 10,247 · 2 : 10,161 req/s · spread 0.8 % · the output below is round 1, the closer to the average

Server during this run API Maker 4.1 vCPU, 138 MB RSS · MongoDB 0.0 vCPU · MySQL 1.3 vCPU · sandboxes 0.0 vCPU, 864 MB · whole server busy 81 %, of which kernel (network, disk) 25 % · memory used 2544 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get all with a pre hook, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_pre_hook"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_pre_hook
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 8 ms │ 9 ms │ 12 ms │ 13 ms │ 9.26 ms │ 1.24 ms │ 20 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 8,983   │ 8,983   │ 10,287  │ 10,647  │ 10,247.21 │ 363.63 │ 8,982   │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 21.8 MB │ 21.8 MB │ 24.9 MB │ 25.8 MB │ 24.8 MB   │ 881 kB │ 21.8 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 7            │
├────────────┼──────────────┤
│ 2.5        │ 8            │
├────────────┼──────────────┤
│ 10         │ 8            │
├────────────┼──────────────┤
│ 25         │ 9            │
├────────────┼──────────────┤
│ 50         │ 9            │
├────────────┼──────────────┤
│ 75         │ 10           │
├────────────┼──────────────┤
│ 90         │ 10           │
├────────────┼──────────────┤
│ 97.5       │ 12           │
├────────────┼──────────────┤
│ 99         │ 13           │
├────────────┼──────────────┤
│ 99.9       │ 16           │
├────────────┼──────────────┤
│ 99.99      │ 18           │
├────────────┼──────────────┤
│ 99.999     │ 20           │
└────────────┴──────────────┘

154k requests in 15.01s, 373 MB read

Get by id

One row by its primary key : GET …/<table>/get-by-id/<id>. About this API.

Get by id : public

No token : the API is public. Each answer : 278 bytes (MongoDB), status 200.

Requests / second 14,224 213,867 requests in 15 s
Latency p50 6ms average 6.5 ms
Latency p99 14ms max 38 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 14,189 · 2 : 14,259 req/s · spread 0.5 % · the output below is round 2, the closer to the average

Server during this run API Maker 3.4 vCPU, 144 MB RSS · MongoDB 3.0 vCPU · sandboxes 0.0 vCPU, 838 MB · whole server busy 93 %, of which kernel (network, disk) 31 % · memory used 2012 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get by id, public · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public/get-by-id/60ae2488c37cd955cc144161"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public/get-by-id/60ae2488c37cd955cc144161
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev  │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼────────┼───────┤
│ Latency │ 3 ms │ 6 ms │ 12 ms │ 14 ms │ 6.52 ms │ 2.5 ms │ 38 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Req/Sec   │ 13,959  │ 13,959  │ 14,279  │ 14,551  │ 14,258.94 │ 136.99  │ 13,955  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Bytes/Sec │ 8.29 MB │ 8.29 MB │ 8.48 MB │ 8.64 MB │ 8.47 MB   │ 81.8 kB │ 8.29 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 2            │
├────────────┼──────────────┤
│ 2.5        │ 3            │
├────────────┼──────────────┤
│ 10         │ 4            │
├────────────┼──────────────┤
│ 25         │ 5            │
├────────────┼──────────────┤
│ 50         │ 6            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 9            │
├────────────┼──────────────┤
│ 97.5       │ 12           │
├────────────┼──────────────┤
│ 99         │ 14           │
├────────────┼──────────────┤
│ 99.9       │ 22           │
├────────────┼──────────────┤
│ 99.99      │ 28           │
├────────────┼──────────────┤
│ 99.999     │ 33           │
└────────────┴──────────────┘

214k requests in 15.01s, 127 MB read

Requests / second 13,571 205,599 requests in 15 s
Latency p50 7ms average 6.8 ms
Latency p99 9ms max 14 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 13,708 · 2 : 13,433 req/s · spread 2 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.6 vCPU, 138 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 2.0 vCPU · sandboxes 0.0 vCPU, 798 MB · whole server busy 72 %, of which kernel (network, disk) 27 % · memory used 2282 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get by id, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public/get-by-id/2"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public/get-by-id/2
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg    │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼────────┼─────────┼───────┤
│ Latency │ 6 ms │ 7 ms │ 8 ms  │ 9 ms │ 6.8 ms │ 0.82 ms │ 14 ms │
└─────────┴──────┴──────┴───────┴──────┴────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 13,463  │ 13,463  │ 13,663  │ 14,127  │ 13,708  │ 172.28 │ 13,461  │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 7.55 MB │ 7.55 MB │ 7.67 MB │ 7.93 MB │ 7.69 MB │ 96 kB  │ 7.55 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 5            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 6            │
├────────────┼──────────────┤
│ 25         │ 6            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 7            │
├────────────┼──────────────┤
│ 90         │ 8            │
├────────────┼──────────────┤
│ 97.5       │ 8            │
├────────────┼──────────────┤
│ 99         │ 9            │
├────────────┼──────────────┤
│ 99.9       │ 10           │
├────────────┼──────────────┤
│ 99.99      │ 12           │
├────────────┼──────────────┤
│ 99.999     │ 14           │
└────────────┴──────────────┘

206k requests in 15.01s, 115 MB read

Requests / second 14,510 218,937 requests in 15 s
Latency p50 6ms average 6.3 ms
Latency p99 8ms max 215 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 14,597 · 2 : 14,423 req/s · spread 1.2 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.9 vCPU, 137 MB RSS · MongoDB 0.0 vCPU · MySQL 1.6 vCPU · sandboxes 0.0 vCPU, 864 MB · whole server busy 71 %, of which kernel (network, disk) 29 % · memory used 2546 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get by id, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public/get-by-id/2"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public/get-by-id/2
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max    │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
│ Latency │ 5 ms │ 6 ms │ 8 ms  │ 8 ms │ 6.35 ms │ 0.94 ms │ 215 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 14,415  │ 14,415  │ 14,535  │ 15,047  │ 14,597.07 │ 189.07 │ 14,411  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 8.09 MB │ 8.09 MB │ 8.16 MB │ 8.45 MB │ 8.19 MB   │ 107 kB │ 8.08 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 5            │
├────────────┼──────────────┤
│ 2.5        │ 5            │
├────────────┼──────────────┤
│ 10         │ 6            │
├────────────┼──────────────┤
│ 25         │ 6            │
├────────────┼──────────────┤
│ 50         │ 6            │
├────────────┼──────────────┤
│ 75         │ 7            │
├────────────┼──────────────┤
│ 90         │ 7            │
├────────────┼──────────────┤
│ 97.5       │ 8            │
├────────────┼──────────────┤
│ 99         │ 8            │
├────────────┼──────────────┤
│ 99.9       │ 9            │
├────────────┼──────────────┤
│ 99.99      │ 12           │
├────────────┼──────────────┤
│ 99.999     │ 14           │
└────────────┴──────────────┘

219k requests in 15.01s, 123 MB read

Get by id : both tokens

With x-am-authorization and x-am-user-authorization, both checked on every request. Each answer : 278 bytes (MongoDB), status 200.

Requests / second 13,443 202,576 requests in 15 s
Latency p50 7ms average 6.9 ms
Latency p99 14ms max 28 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 13,505 · 2 : 13,382 req/s · spread 0.9 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.9 vCPU, 143 MB RSS · MongoDB 2.6 vCPU · sandboxes 0.0 vCPU, 839 MB · whole server busy 93 %, of which kernel (network, disk) 29 % · memory used 1819 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get by id, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers/get-by-id/60ae2488c37cd955cc144161"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers/get-by-id/60ae2488c37cd955cc144161
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 3 ms │ 7 ms │ 12 ms │ 14 ms │ 6.91 ms │ 2.45 ms │ 28 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 13,399  │ 13,399  │ 13,479  │ 13,775  │ 13,504.8 │ 104.18  │ 13,398  │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 7.96 MB │ 7.96 MB │ 8.01 MB │ 8.18 MB │ 8.02 MB  │ 62.8 kB │ 7.96 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 2            │
├────────────┼──────────────┤
│ 2.5        │ 3            │
├────────────┼──────────────┤
│ 10         │ 4            │
├────────────┼──────────────┤
│ 25         │ 5            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 10           │
├────────────┼──────────────┤
│ 97.5       │ 12           │
├────────────┼──────────────┤
│ 99         │ 14           │
├────────────┼──────────────┤
│ 99.9       │ 20           │
├────────────┼──────────────┤
│ 99.99      │ 24           │
├────────────┼──────────────┤
│ 99.999     │ 27           │
└────────────┴──────────────┘

203k requests in 15.01s, 120 MB read

Requests / second 12,656 189,474 requests in 15 s
Latency p50 7ms average 7.4 ms
Latency p99 11ms max 18 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 12,633 · 2 : 12,679 req/s · spread 0.4 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.0 vCPU, 139 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.9 vCPU · sandboxes 0.0 vCPU, 798 MB · whole server busy 75 %, of which kernel (network, disk) 26 % · memory used 2286 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get by id, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers/get-by-id/2"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers/get-by-id/2
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 6 ms │ 7 ms │ 9 ms  │ 11 ms │ 7.42 ms │ 1.01 ms │ 18 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 10,967  │ 10,967  │ 12,703  │ 13,255  │ 12,632.8 │ 479.42 │ 10,963  │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 6.15 MB │ 6.15 MB │ 7.12 MB │ 7.43 MB │ 7.09 MB  │ 269 kB │ 6.15 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 7            │
├────────────┼──────────────┤
│ 25         │ 7            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 8            │
├────────────┼──────────────┤
│ 90         │ 8            │
├────────────┼──────────────┤
│ 97.5       │ 9            │
├────────────┼──────────────┤
│ 99         │ 11           │
├────────────┼──────────────┤
│ 99.9       │ 13           │
├────────────┼──────────────┤
│ 99.99      │ 16           │
├────────────┼──────────────┤
│ 99.999     │ 18           │
└────────────┴──────────────┘

190k requests in 15.01s, 106 MB read

Requests / second 13,517 202,182 requests in 15 s
Latency p50 7ms average 6.9 ms
Latency p99 9ms max 15 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 13,554 · 2 : 13,479 req/s · spread 0.6 % · the output below is round 2, the closer to the average

Server during this run API Maker 3.3 vCPU, 138 MB RSS · MongoDB 0.0 vCPU · MySQL 1.5 vCPU · sandboxes 0.0 vCPU, 863 MB · whole server busy 73 %, of which kernel (network, disk) 28 % · memory used 2563 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get by id, both tokens · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers/get-by-id/2"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers/get-by-id/2
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev  │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼────────┼───────┤
│ Latency │ 6 ms │ 7 ms │ 9 ms  │ 9 ms │ 6.92 ms │ 0.9 ms │ 15 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 13,207  │ 13,207  │ 13,423  │ 13,943  │ 13,479.2 │ 202.39 │ 13,204  │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 7.41 MB │ 7.41 MB │ 7.53 MB │ 7.82 MB │ 7.56 MB  │ 114 kB │ 7.41 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 1            │
├────────────┼──────────────┤
│ 1          │ 5            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 6            │
├────────────┼──────────────┤
│ 25         │ 6            │
├────────────┼──────────────┤
│ 50         │ 7            │
├────────────┼──────────────┤
│ 75         │ 7            │
├────────────┼──────────────┤
│ 90         │ 8            │
├────────────┼──────────────┤
│ 97.5       │ 9            │
├────────────┼──────────────┤
│ 99         │ 9            │
├────────────┼──────────────┤
│ 99.9       │ 11           │
├────────────┼──────────────┤
│ 99.99      │ 12           │
├────────────┼──────────────┤
│ 99.999     │ 14           │
└────────────┴──────────────┘

202k requests in 15.01s, 113 MB read

Get by id with caching

One row by its primary key, on a table with enableCaching: true : answered from Redis after the first request. About this API.

Get by id with caching : public

No token : the API is public. Each answer : 278 bytes (MongoDB), status 200.

Requests / second 47,980 713,371 requests in 15 s
Latency p50 2ms average 1.6 ms
Latency p99 3ms max 9 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 47,562 · 2 : 48,398 req/s · spread 1.7 % · the output below is round 1, the closer to the average

Server during this run API Maker 6.2 vCPU, 140 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 839 MB · Redis 0.3 vCPU · whole server busy 87 %, of which kernel (network, disk) 31 % · memory used 1819 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get by id with caching, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public_cached/get-by-id/60ae2488c37cd955cc144161"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_public_cached/get-by-id/60ae2488c37cd955cc144161
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬────────┬─────────┬──────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg    │ Stdev   │ Max  │
├─────────┼──────┼──────┼───────┼──────┼────────┼─────────┼──────┤
│ Latency │ 1 ms │ 2 ms │ 3 ms  │ 3 ms │ 1.6 ms │ 0.59 ms │ 9 ms │
└─────────┴──────┴──────┴───────┴──────┴────────┴─────────┴──────┘
┌───────────┬─────────┬─────────┬─────────┬────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%  │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 46,623  │ 46,623  │ 47,519  │ 48,735 │ 47,561.6 │ 560.65 │ 46,594  │
├───────────┼─────────┼─────────┼─────────┼────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 27.8 MB │ 27.8 MB │ 28.3 MB │ 29 MB  │ 28.3 MB  │ 335 kB │ 27.8 MB │
└───────────┴─────────┴─────────┴─────────┴────────┴──────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 1            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 2            │
├────────────┼──────────────┤
│ 90         │ 2            │
├────────────┼──────────────┤
│ 97.5       │ 3            │
├────────────┼──────────────┤
│ 99         │ 3            │
├────────────┼──────────────┤
│ 99.9       │ 4            │
├────────────┼──────────────┤
│ 99.99      │ 6            │
├────────────┼──────────────┤
│ 99.999     │ 8            │
└────────────┴──────────────┘

713k requests in 15.01s, 425 MB read

Requests / second 47,888 711,782 requests in 15 s
Latency p50 2ms average 1.6 ms
Latency p99 3ms max 9 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 47,455 · 2 : 48,321 req/s · spread 1.8 % · the output below is round 1, the closer to the average

Server during this run API Maker 6.2 vCPU, 135 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.0 vCPU · sandboxes 0.0 vCPU, 798 MB · Redis 0.3 vCPU · whole server busy 87 %, of which kernel (network, disk) 31 % · memory used 2284 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · get by id with caching, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public_cached/get-by-id/2"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_public_cached/get-by-id/2
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬──────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max  │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼──────┤
│ Latency │ 1 ms │ 2 ms │ 3 ms  │ 3 ms │ 1.61 ms │ 0.58 ms │ 9 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴──────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 46,687  │ 46,687  │ 47,295  │ 48,767  │ 47,454.94 │ 579.3  │ 46,684  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 26.3 MB │ 26.3 MB │ 26.6 MB │ 27.5 MB │ 26.7 MB   │ 325 kB │ 26.3 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 1            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 2            │
├────────────┼──────────────┤
│ 90         │ 2            │
├────────────┼──────────────┤
│ 97.5       │ 3            │
├────────────┼──────────────┤
│ 99         │ 3            │
├────────────┼──────────────┤
│ 99.9       │ 4            │
├────────────┼──────────────┤
│ 99.99      │ 6            │
├────────────┼──────────────┤
│ 99.999     │ 8            │
└────────────┴──────────────┘

712k requests in 15.01s, 401 MB read

Requests / second 48,818 731,797 requests in 15 s
Latency p50 2ms average 1.5 ms
Latency p99 3ms max 12 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 48,784 · 2 : 48,852 req/s · spread 0.1 % · the output below is round 1, the closer to the average

Server during this run API Maker 6.2 vCPU, 134 MB RSS · MongoDB 0.0 vCPU · MySQL 0.0 vCPU · sandboxes 0.0 vCPU, 864 MB · Redis 0.3 vCPU · whole server busy 87 %, of which kernel (network, disk) 31 % · memory used 2551 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get by id with caching, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public_cached/get-by-id/2"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_public_cached/get-by-id/2
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 2 ms │ 3 ms  │ 3 ms │ 1.54 ms │ 0.59 ms │ 12 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 47,455  │ 47,455  │ 48,799  │ 49,919  │ 48,784  │ 561.24 │ 47,454  │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 26.7 MB │ 26.7 MB │ 27.5 MB │ 28.1 MB │ 27.5 MB │ 315 kB │ 26.7 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 1            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 2            │
├────────────┼──────────────┤
│ 90         │ 2            │
├────────────┼──────────────┤
│ 97.5       │ 3            │
├────────────┼──────────────┤
│ 99         │ 3            │
├────────────┼──────────────┤
│ 99.9       │ 4            │
├────────────┼──────────────┤
│ 99.99      │ 8            │
├────────────┼──────────────┤
│ 99.999     │ 11           │
└────────────┴──────────────┘

732k requests in 15.01s, 412 MB read

Get by id with caching : both tokens

With x-am-authorization and x-am-user-authorization, both checked on every request. Each answer : 278 bytes (MongoDB), status 200.

Requests / second 38,521 582,318 requests in 15 s
Latency p50 2ms average 2.1 ms
Latency p99 4ms max 15 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 38,824 · 2 : 38,218 req/s · spread 1.6 % · the output below is round 1, the closer to the average

Server during this run API Maker 6.5 vCPU, 139 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 839 MB · Redis 0.3 vCPU · whole server busy 89 %, of which kernel (network, disk) 25 % · memory used 1799 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · get by id with caching, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_cached/get-by-id/60ae2488c37cd955cc144161"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/customers_cached/get-by-id/60ae2488c37cd955cc144161
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 2 ms │ 3 ms  │ 4 ms │ 2.08 ms │ 0.74 ms │ 15 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%    │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 37,951  │ 37,951  │ 38,655 │ 40,063  │ 38,823.47 │ 528.73 │ 37,940  │
├───────────┼─────────┼─────────┼────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 22.6 MB │ 22.6 MB │ 23 MB  │ 23.9 MB │ 23.1 MB   │ 313 kB │ 22.6 MB │
└───────────┴─────────┴─────────┴────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 2            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 2            │
├────────────┼──────────────┤
│ 90         │ 3            │
├────────────┼──────────────┤
│ 97.5       │ 3            │
├────────────┼──────────────┤
│ 99         │ 4            │
├────────────┼──────────────┤
│ 99.9       │ 7            │
├────────────┼──────────────┤
│ 99.99      │ 11           │
├────────────┼──────────────┤
│ 99.999     │ 13           │
└────────────┴──────────────┘

582k requests in 15.01s, 347 MB read

Requests / second 38,045 574,818 requests in 15 s
Latency p50 2ms average 2.1 ms
Latency p99 4ms max 14 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 38,320 · 2 : 37,770 req/s · spread 1.4 % · the output below is round 1, the closer to the average

Server during this run API Maker 6.4 vCPU, 136 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.0 vCPU · sandboxes 0.0 vCPU, 798 MB · Redis 0.3 vCPU · whole server busy 88 %, of which kernel (network, disk) 26 % · memory used 2279 MB of 15992 MB · steal 1 % · swap not touched

autocannon · PostgreSQL · get by id with caching, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_cached/get-by-id/2"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.customers_cached/get-by-id/2
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 2 ms │ 3 ms  │ 4 ms │ 2.11 ms │ 0.74 ms │ 14 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 37,023  │ 37,023  │ 38,047  │ 40,063  │ 38,320  │ 813    │ 37,020  │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 20.9 MB │ 20.9 MB │ 21.4 MB │ 22.6 MB │ 21.6 MB │ 457 kB │ 20.8 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 2            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 2            │
├────────────┼──────────────┤
│ 90         │ 3            │
├────────────┼──────────────┤
│ 97.5       │ 3            │
├────────────┼──────────────┤
│ 99         │ 4            │
├────────────┼──────────────┤
│ 99.9       │ 7            │
├────────────┼──────────────┤
│ 99.99      │ 11           │
├────────────┼──────────────┤
│ 99.999     │ 14           │
└────────────┴──────────────┘

575k requests in 15.01s, 324 MB read

Requests / second 38,544 579,232 requests in 15 s
Latency p50 2ms average 2.1 ms
Latency p99 4ms max 11 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 38,617 · 2 : 38,472 req/s · spread 0.4 % · the output below is round 1, the closer to the average

Server during this run API Maker 6.5 vCPU, 134 MB RSS · MongoDB 0.0 vCPU · MySQL 0.0 vCPU · sandboxes 0.0 vCPU, 864 MB · Redis 0.2 vCPU · whole server busy 89 %, of which kernel (network, disk) 27 % · memory used 2545 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · get by id with caching, both tokens · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_cached/get-by-id/2"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/customers_cached/get-by-id/2
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 2 ms │ 3 ms  │ 4 ms │ 2.09 ms │ 0.66 ms │ 11 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 37,695  │ 37,695  │ 38,655  │ 39,711  │ 38,616.54 │ 543.62 │ 37,665  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 21.2 MB │ 21.2 MB │ 21.8 MB │ 22.3 MB │ 21.7 MB   │ 305 kB │ 21.2 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 2            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 2            │
├────────────┼──────────────┤
│ 90         │ 3            │
├────────────┼──────────────┤
│ 97.5       │ 3            │
├────────────┼──────────────┤
│ 99         │ 4            │
├────────────┼──────────────┤
│ 99.9       │ 5            │
├────────────┼──────────────┤
│ 99.99      │ 7            │
├────────────┼──────────────┤
│ 99.999     │ 9            │
└────────────┴──────────────┘

579k requests in 15.01s, 326 MB read

Insert one row

POST …/<table>/save-single-or-multiple with one row of 9 columns in the body : the schema checks and converts it, the database writes it, and the saved row is answered. About this API.

No token : the API is public. Each answer : 277 bytes (MongoDB), status 201.

Requests / second 5,490 82,779 requests in 15 s
Latency p50 17ms average 17.6 ms
Latency p99 32ms max 63 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 5,519 · 2 : 5,460 req/s · spread 1.1 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.3 vCPU, 145 MB RSS · MongoDB 3.7 vCPU · sandboxes 0.0 vCPU, 839 MB · whole server busy 88 %, of which kernel (network, disk) 25 % · memory used 1919 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MongoDB · insert one row, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -m POST -b '{"customer_id":1,"first_name":"BENCH","last_name":"INSERT","phone":1123456789,"last_update":"2006-02-15T04:34:00.330Z","pincode":111111,"shipping_id":2,"dob":"2022-10-30T03:25:03.000Z","country":"India"}' -H "content-type: application/json" "http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/inserts_public/save-single-or-multiple"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mongodb/am_bench/inserts_public/save-single-or-multiple
100 connections
20 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 9 ms │ 17 ms │ 28 ms │ 32 ms │ 17.61 ms │ 4.83 ms │ 63 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%    │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 5,419   │ 5,419   │ 5,523  │ 5,619   │ 5,519.34 │ 61.92   │ 5,419   │
├───────────┼─────────┼─────────┼────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 3.24 MB │ 3.24 MB │ 3.3 MB │ 3.36 MB │ 3.3 MB   │ 37.3 kB │ 3.24 MB │
└───────────┴─────────┴─────────┴────────┴─────────┴──────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 2            │
├────────────┼──────────────┤
│ 0.1        │ 5            │
├────────────┼──────────────┤
│ 1          │ 8            │
├────────────┼──────────────┤
│ 2.5        │ 9            │
├────────────┼──────────────┤
│ 10         │ 12           │
├────────────┼──────────────┤
│ 25         │ 14           │
├────────────┼──────────────┤
│ 50         │ 17           │
├────────────┼──────────────┤
│ 75         │ 20           │
├────────────┼──────────────┤
│ 90         │ 24           │
├────────────┼──────────────┤
│ 97.5       │ 28           │
├────────────┼──────────────┤
│ 99         │ 32           │
├────────────┼──────────────┤
│ 99.9       │ 43           │
├────────────┼──────────────┤
│ 99.99      │ 52           │
├────────────┼──────────────┤
│ 99.999     │ 63           │
└────────────┴──────────────┘

83k requests in 15.01s, 49.5 MB read

Requests / second 5,874 88,216 requests in 15 s
Latency p50 16ms average 16.5 ms
Latency p99 19ms max 35 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 5,882 · 2 : 5,867 req/s · spread 0.3 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.0 vCPU, 140 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 2.2 vCPU · sandboxes 0.0 vCPU, 798 MB · whole server busy 68 %, of which kernel (network, disk) 24 % · memory used 2294 MB of 15992 MB · steal 0 % · swap not touched

autocannon · PostgreSQL · insert one row, public · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -m POST -b '{"first_name":"BENCH","last_name":"INSERT","phone":1123456789,"last_update":"2006-02-15T04:34:00.330Z","pincode":111111,"shipping_id":2,"dob":"2022-10-30T03:25:03.000Z","country":"India"}' -H "content-type: application/json" "http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.inserts_public/save-single-or-multiple"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/postgres/am_bench/public.inserts_public/save-single-or-multiple
100 connections
20 workers

┌─────────┬───────┬───────┬───────┬───────┬─────────┬────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg     │ Stdev  │ Max   │
├─────────┼───────┼───────┼───────┼───────┼─────────┼────────┼───────┤
│ Latency │ 15 ms │ 16 ms │ 19 ms │ 19 ms │ 16.5 ms │ 1.4 ms │ 35 ms │
└─────────┴───────┴───────┴───────┴───────┴─────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 5,699   │ 5,699   │ 5,891   │ 6,015   │ 5,881.47 │ 72      │ 5,699   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 3.24 MB │ 3.24 MB │ 3.35 MB │ 3.42 MB │ 3.35 MB  │ 40.9 kB │ 3.24 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 3            │
├────────────┼──────────────┤
│ 1          │ 14           │
├────────────┼──────────────┤
│ 2.5        │ 15           │
├────────────┼──────────────┤
│ 10         │ 15           │
├────────────┼──────────────┤
│ 25         │ 16           │
├────────────┼──────────────┤
│ 50         │ 16           │
├────────────┼──────────────┤
│ 75         │ 17           │
├────────────┼──────────────┤
│ 90         │ 18           │
├────────────┼──────────────┤
│ 97.5       │ 19           │
├────────────┼──────────────┤
│ 99         │ 19           │
├────────────┼──────────────┤
│ 99.9       │ 30           │
├────────────┼──────────────┤
│ 99.99      │ 34           │
├────────────┼──────────────┤
│ 99.999     │ 35           │
└────────────┴──────────────┘

88k requests in 15.01s, 50.2 MB read

Requests / second 3,542 52,989 requests in 15 s
Latency p50 28ms average 27.8 ms
Latency p99 38ms max 51 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 3,551 · 2 : 3,533 req/s · spread 0.5 % · the output below is round 2, the closer to the average

Server during this run API Maker 1.3 vCPU, 139 MB RSS · MongoDB 0.0 vCPU · MySQL 3.2 vCPU · sandboxes 0.0 vCPU, 864 MB · whole server busy 73 %, of which kernel (network, disk) 20 % · memory used 2551 MB of 15992 MB · steal 0 % · swap not touched

autocannon · MySQL · insert one row, public · round 2 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l -m POST -b '{"first_name":"BENCH","last_name":"INSERT","phone":1123456789,"last_update":"2006-02-15T04:34:00.330Z","pincode":111111,"shipping_id":2,"dob":"2022-10-30T03:25:03.000Z","country":"India"}' -H "content-type: application/json" "http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/inserts_public/save-single-or-multiple"
Running 15s test @ http://192.168.133.140:38246/api/schema/bench/mysql/am_bench/inserts_public/save-single-or-multiple
100 connections
20 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev  │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼────────┼───────┤
│ Latency │ 23 ms │ 28 ms │ 34 ms │ 38 ms │ 27.79 ms │ 3.1 ms │ 51 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Req/Sec   │ 3,363   │ 3,363   │ 3,529   │ 4,089   │ 3,533   │ 164.83  │ 3,363   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Bytes/Sec │ 1.91 MB │ 1.91 MB │ 2.01 MB │ 2.33 MB │ 2.01 MB │ 93.1 kB │ 1.91 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 4            │
├────────────┼──────────────┤
│ 1          │ 22           │
├────────────┼──────────────┤
│ 2.5        │ 23           │
├────────────┼──────────────┤
│ 10         │ 25           │
├────────────┼──────────────┤
│ 25         │ 26           │
├────────────┼──────────────┤
│ 50         │ 28           │
├────────────┼──────────────┤
│ 75         │ 29           │
├────────────┼──────────────┤
│ 90         │ 31           │
├────────────┼──────────────┤
│ 97.5       │ 34           │
├────────────┼──────────────┤
│ 99         │ 38           │
├────────────┼──────────────┤
│ 99.9       │ 47           │
├────────────┼──────────────┤
│ 99.99      │ 51           │
├────────────┼──────────────┤
│ 99.999     │ 51           │
└────────────┴──────────────┘

53k requests in 15.01s, 30.2 MB read

Custom API without a database

A public custom API whose code returns a small object and reads no database : what running code of the account costs, without a database. Lean code runs in the server itself, with QuickJS ; the same code with Date.now() in it runs in a sandbox of the account : the trip from API Maker to the runner in its container and back.

The custom API
import * as T from 'types';
async function main(g: T.IAMGlobal) {
    return { message: 'Hello from API Maker', time: 1 };
}
module.exports = main;

Requests / second 39,192 581,838 requests in 15 s
Latency p50 2ms average 2.1 ms
Latency p99 4ms max 12 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 38,789 · 2 : 39,594 req/s · spread 2.1 % · the output below is round 1, the closer to the average

Server during this run API Maker 7.8 vCPU, 136 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 847 MB · whole server busy 98 %, of which kernel (network, disk) 24 % · memory used 2035 MB of 15992 MB · steal 0 % · swap not touched

autocannon · custom API without a database, in the server (lean code) · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/custom-api/bench/bench_no_db"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_no_db
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 0 ms │ 2 ms │ 4 ms  │ 4 ms │ 2.08 ms │ 0.97 ms │ 12 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 38,271  │ 38,271  │ 38,783  │ 39,455  │ 38,789.34 │ 294.61 │ 38,258  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 15.3 MB │ 15.3 MB │ 15.5 MB │ 15.7 MB │ 15.5 MB   │ 118 kB │ 15.3 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 0            │
├────────────┼──────────────┤
│ 2.5        │ 0            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 1            │
├────────────┼──────────────┤
│ 50         │ 2            │
├────────────┼──────────────┤
│ 75         │ 3            │
├────────────┼──────────────┤
│ 90         │ 3            │
├────────────┼──────────────┤
│ 97.5       │ 4            │
├────────────┼──────────────┤
│ 99         │ 4            │
├────────────┼──────────────┤
│ 99.9       │ 5            │
├────────────┼──────────────┤
│ 99.99      │ 7            │
├────────────┼──────────────┤
│ 99.999     │ 10           │
└────────────┴──────────────┘

582k requests in 15.01s, 232 MB read
The custom API
import * as T from 'types';
async function main(g: T.IAMGlobal) {
    return { message: 'Hello from the sandbox', time: Date.now() };
}
module.exports = main;

Requests / second 27,920 419,242 requests in 15 s
Latency p50 3ms average 3.1 ms
Latency p99 8ms max 211 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 27,949 · 2 : 27,891 req/s · spread 0.2 % · the output below is round 1, the closer to the average

Server during this run API Maker 5.1 vCPU, 139 MB RSS · MongoDB 0.0 vCPU · sandboxes 2.4 vCPU, 851 MB · whole server busy 94 %, of which kernel (network, disk) 27 % · memory used 2053 MB of 15992 MB · steal 0 % · swap not touched

autocannon · custom API without a database, in the sandbox · round 1 of 2, the closer to the average

$ autocannon -c 100 -d 15 -w 20 -l "http://192.168.133.140:38246/api/custom-api/bench/bench_sandbox_no_db"
Running 15s test @ http://192.168.133.140:38246/api/custom-api/bench/bench_sandbox_no_db
100 connections
20 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max    │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
│ Latency │ 1 ms │ 3 ms │ 7 ms  │ 8 ms │ 3.08 ms │ 1.67 ms │ 211 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
┌───────────┬─────────┬─────────┬─────────┬────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%  │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 27,151  │ 27,151  │ 27,775  │ 29,087 │ 27,949.34 │ 517.37 │ 27,136  │
├───────────┼─────────┼─────────┼─────────┼────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 11.2 MB │ 11.2 MB │ 11.5 MB │ 12 MB  │ 11.5 MB   │ 213 kB │ 11.2 MB │
└───────────┴─────────┴─────────┴─────────┴────────┴───────────┴────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 300

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 0            │
├────────────┼──────────────┤
│ 0.1        │ 0            │
├────────────┼──────────────┤
│ 1          │ 1            │
├────────────┼──────────────┤
│ 2.5        │ 1            │
├────────────┼──────────────┤
│ 10         │ 1            │
├────────────┼──────────────┤
│ 25         │ 2            │
├────────────┼──────────────┤
│ 50         │ 3            │
├────────────┼──────────────┤
│ 75         │ 4            │
├────────────┼──────────────┤
│ 90         │ 5            │
├────────────┼──────────────┤
│ 97.5       │ 7            │
├────────────┼──────────────┤
│ 99         │ 8            │
├────────────┼──────────────┤
│ 99.9       │ 11           │
├────────────┼──────────────┤
│ 99.99      │ 13           │
├────────────┼──────────────┤
│ 99.999     │ 15           │
└────────────┴──────────────┘

419k requests in 15.01s, 173 MB read

More connections

Get all, public and Get by id with caching, public on MongoDB, one run of 15 seconds for each number of connections. More clients at once wait longer for their answer, and the server keeps answering them all.

Get all, public, by connections

Get all, public, MongoDB : requests per second by connections
10 connectionsp50 1 ms · p99 2 ms8,465
50 connectionsp50 3 ms · p99 9 ms11,967
100 connectionsp50 7 ms · p99 17 ms12,429
250 connectionsp50 19 ms · p99 31 ms12,311
500 connectionsp50 41 ms · p99 52 ms11,995
1,000 connectionsp50 84 ms · p99 95 ms11,850
Connections Requests / second p50 p99 Max Errors Server busy API Maker RSS
10 8,465 1 ms 2 ms 7 ms 0 66 % 136 MB
50 11,967 3 ms 9 ms 27 ms 0 91 % 140 MB
100 12,429 7 ms 17 ms 52 ms 0 95 % 145 MB
250 12,311 19 ms 31 ms 63 ms 0 95 % 155 MB
500 11,995 41 ms 52 ms 78 ms 0 95 % 171 MB
1,000 11,850 84 ms 95 ms 121 ms 0 95 % 204 MB

Get by id with caching, public, by connections

Get by id with caching, public, MongoDB : requests per second by connections
10 connectionsp50 0 ms · p99 0 ms17,269
50 connectionsp50 1 ms · p99 2 ms42,288
100 connectionsp50 2 ms · p99 3 ms47,361
250 connectionsp50 5 ms · p99 8 ms48,716
500 connectionsp50 10 ms · p99 14 ms49,704
1,000 connectionsp50 20 ms · p99 27 ms49,008
Connections Requests / second p50 p99 Max Errors Server busy API Maker RSS
10 17,269 0 ms 0 ms 4 ms 0 48 % 140 MB
50 42,288 1 ms 2 ms 12 ms 0 85 % 140 MB
100 47,361 2 ms 3 ms 11 ms 0 87 % 144 MB
250 48,716 5 ms 8 ms 17 ms 0 89 % 155 MB
500 49,704 10 ms 14 ms 34 ms 0 90 % 166 MB
1,000 49,008 20 ms 27 ms 241 ms 0 89 % 194 MB

Questions

How many requests per second can API Maker serve on 8 dedicated vCPUs ?

On this 16 GB server, with the database on the same machine : 12,640 requests per second for a whole table of ten rows on MongoDB (PostgreSQL 12,641 · MySQL 13,748), 14,224 for one row by its id, and 47,980 when the answer is cached in Redis. A custom API in TypeScript which reads the table answers 8,893 requests per second when API Maker runs it itself (lean code), 7,569 when it runs in the sandbox of the account.

How much memory does API Maker use ?

The API Maker process held 111 MB at rest and 176 MB at most under load on this server, in RAM. The rest of the memory went to the databases (MongoDB, Redis, PostgreSQL or MySQL), the sandboxes which run the code of the account, and Linux itself.

Do the two tokens slow the APIs down ?

API Maker checks both tokens (x-am-authorization and x-am-user-authorization) and the groups of the API user on every request. Get all with both tokens answered 12,106 requests per second on MongoDB (public : 12,640), 11,913 requests per second on PostgreSQL (public : 12,641), 12,712 requests per second on MySQL (public : 13,748). The checks show most where the database does no work : a cached get all answered 36,123 requests per second with both tokens against 43,980 public on MongoDB.

What does a pre hook cost ?

A pre hook runs code of the account before the API ; a lean hook like this one runs in the server itself, with QuickJS. Get all with a row scoping pre hook answered 9,279 requests per second on MongoDB, against 12,106 for the same API without the hook. On 8 vCPUs, the API, the hook and the database share the same 8 vCPUs.

Can I run these benchmarks myself ?

Yes : How API Maker is benchmarked gives the dataset, the settings of every API and the exact autocannon commands.