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

4 vCPU, 8 GB RAM : 7,614 to 10,000 requests per second for a whole table.

API Maker 4.0.0 on a Linode Dedicated 8 GB (g6-dedicated-4) : 4 dedicated vCPUs and 8 GB of RAM at $72 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 7,614req/s PostgreSQL 8,912 · MySQL 10,000
Get by id, cached 32,588req/s answered from Redis · PostgreSQL 33,015 · MySQL 32,897
Custom API · MongoDB 5,228req/s TypeScript, lean : run in the server · in the sandbox 4,491
API Maker memory 104MB at rest · 140 MB at most under load

The server

Server Linode (Akamai Cloud), Dedicated 8 GB (g6-dedicated-4), dedicated cpu, $72 / month
CPU AMD EPYC 7642 48-Core Processor, 4 dedicated vCPUs (KVM)
KVM guest, 1 thread per core · L1d 256 KiB (4 instances) · L2 2 MiB (4 instances) · L3 64 MiB (4 instances) · BogoMIPS 4599.99
Memory 8 GB (7,941 MB usable), swap 8.3 GB (496 MB of Linode + 7.8 GB made by the installer)
Disk, region 160 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 4 runners when it is busy (one per vCPU)
Load generator Dedicated 32 GB (g6-dedicated-16) : AMD EPYC 7642 48-Core Processor, 16 dedicated vCPUs, Ubuntu 24.04.4 LTS, Node.js 24.21.0, autocannon 8.0.0 with 10 worker threads
Network Private network of the same data centre, round trip 0.32 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 · 4 vCPU, 8 GB RAM, dedicated CPUMongoDBPostgreSQLMySQL
Get allpublic7,6148,91210,000
Get allboth tokens7,2208,2459,236
Get all with cachingpublic29,76230,20530,217
Get all with cachingboth tokens23,61924,17924,025
Get all by streampublic7,3429,0989,458
Get all by streamboth tokens6,9338,4908,733
Custom API calling get all QuickJSpublic5,2285,8866,513
Custom API calling get all QuickJSboth tokens4,9335,4426,032
Custom API in the sandbox Sandboxpublic4,4914,6735,174
Get all with a pre hook QuickJSboth tokens5,4606,2806,820
Get by idpublic8,7779,65510,654
Get by idboth tokens8,1828,7909,758
Get by id with cachingpublic32,58833,01532,897
Get by id with cachingboth tokens25,51625,87525,837
Insert one rowpublic3,5744,2363,462
API Access MongoDB PostgreSQL MySQL
Get all Public 7,614 p99 28 ms 8,912 p99 13 ms 10,000 p99 11 ms
Get all Both tokens 7,220 p99 27 ms 8,245 p99 14 ms 9,236 p99 12 ms
Get all with caching Public 29,762 p99 5 ms 30,205 p99 5 ms 30,217 p99 5 ms
Get all with caching Both tokens 23,619 p99 6 ms 24,179 p99 6 ms 24,025 p99 6 ms
Get all by stream Public 7,342 p99 27 ms 9,098 p99 13 ms 9,458 p99 12 ms
Get all by stream Both tokens 6,933 p99 26 ms 8,490 p99 13 ms 8,733 p99 13 ms
Custom API calling get all QuickJS Public 5,228 p99 32 ms 5,886 p99 19 ms 6,513 p99 17 ms
Custom API calling get all QuickJS Both tokens 4,933 p99 35 ms 5,442 p99 21 ms 6,032 p99 19 ms
Custom API in the sandbox Sandbox Public 4,491 p99 41 ms 4,673 p99 38 ms 5,174 p99 35 ms
Get all with a pre hook QuickJS Both tokens 5,460 p99 31 ms 6,280 p99 18 ms 6,820 p99 17 ms
Get by id Public 8,777 p99 22 ms 9,655 p99 12 ms 10,654 p99 11 ms
Get by id Both tokens 8,182 p99 22 ms 8,790 p99 13 ms 9,758 p99 12 ms
Get by id with caching Public 32,588 p99 4 ms 33,015 p99 4 ms 32,897 p99 4 ms
Get by id with caching Both tokens 25,516 p99 6 ms 25,875 p99 5 ms 25,837 p99 5 ms
Insert one row Public 3,574 p99 52 ms 4,236 p99 28 ms 3,462 p99 33 ms
Custom API without a database Public 21,532 p99 8 ms
Custom API without a database, in the sandbox Public 18,562 p99 10 ms

0 errors Every one of the 21,624,231 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 7,941 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 104 → 140 105 → 132 106 → 133
… and in swap 0 → 0 0 → 0 0 → 0
MongoDB of API Maker, in RAM 126 → 305 291 → 292 291 → 292
… 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 → 213 421 → 505
… and in swap MongoDB above 0 → 0 0 → 0
Sandboxes (2 containers), in RAM 55 → 515 55 → 481 53 → 505
… and in swap 0 → 0 0 → 0 0 → 0
Whole server, RAM used 872 → 1561 1079 → 1723 1457 → 2024
Swap used 0 → 0 0 → 0 0 → 0

CPU

On 4 vCPUs, API Maker, the database and the sandboxes share the same 4 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 : 4.0 is the whole server ; a process counts its own kernel time) :

MongoDB PostgreSQL MySQL
API Maker 1.7 vCPU 1.7 vCPU 1.7 vCPU
The database 1.7 vCPU 1.3 vCPU 1.2 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 4 vCPUs) 99 % 90 % 90 %
… of which kernel time (network, disk), counted in the lines above too 35 % 35 % 39 %

Steal time (CPU the hypervisor gave to other servers) was 0 % on average, 0 % at most. The load generator, sampled the same way, was never more than 16 % busy over its 16 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 7,614 116,261 requests in 15 s
Latency p50 12ms average 12.4 ms
Latency p99 28ms max 69 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 7,751 · 2 : 7,476 req/s · spread 3.6 % · the output below is round 1, the closer to the average

Server during this run API Maker 1.7 vCPU, 123 MB RSS · MongoDB 1.7 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 99 %, of which kernel (network, disk) 35 % · memory used 916 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers_public"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers_public
100 connections
10 workers

┌─────────┬──────┬───────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 5 ms │ 12 ms │ 23 ms │ 28 ms │ 12.4 ms │ 4.72 ms │ 69 ms │
└─────────┴──────┴───────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬───────┬───────┬─────────┬─────────┬──────────┬────────┬───────┐
│ Stat      │ 1%    │ 2.5%  │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min   │
├───────────┼───────┼───────┼─────────┼─────────┼──────────┼────────┼───────┤
│ Req/Sec   │ 7,687 │ 7,687 │ 7,743   │ 7,915   │ 7,751.07 │ 62.89  │ 7,684 │
├───────────┼───────┼───────┼─────────┼─────────┼──────────┼────────┼───────┤
│ Bytes/Sec │ 21 MB │ 21 MB │ 21.2 MB │ 21.7 MB │ 21.2 MB  │ 174 kB │ 21 MB │
└───────────┴───────┴───────┴─────────┴─────────┴──────────┴────────┴───────┘

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

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

116k requests in 15.01s, 318 MB read

Requests / second 8,912 134,114 requests in 15 s
Latency p50 11ms average 10.7 ms
Latency p99 13ms max 18 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.7 vCPU, 116 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.3 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 90 %, of which kernel (network, disk) 35 % · memory used 1103 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 10 ms │ 11 ms │ 12 ms │ 13 ms │ 10.68 ms │ 0.91 ms │ 18 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 8,823   │ 8,823   │ 8,935   │ 9,111   │ 8,941.07 │ 78.71  │ 8,822   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 21.4 MB │ 21.4 MB │ 21.7 MB │ 22.1 MB │ 21.7 MB  │ 190 kB │ 21.4 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

134k requests in 15.01s, 325 MB read

Requests / second 10,000 152,379 requests in 15 s
Latency p50 9ms average 9.3 ms
Latency p99 11ms max 18 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 10,160 · 2 : 9,840 req/s · spread 3.2 % · the output below is round 1, the closer to the average

Server during this run API Maker 1.7 vCPU, 117 MB RSS · MongoDB 0.0 vCPU · MySQL 1.2 vCPU · sandboxes 0.0 vCPU, 53 MB · whole server busy 90 %, of which kernel (network, disk) 39 % · memory used 1480 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 8 ms │ 9 ms │ 11 ms │ 11 ms │ 9.34 ms │ 0.78 ms │ 18 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 10,055  │ 10,055  │ 10,167  │ 10,495  │ 10,159.74 │ 105.77 │ 10,050  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 24.4 MB │ 24.4 MB │ 24.6 MB │ 25.4 MB │ 24.6 MB   │ 254 kB │ 24.4 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

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

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

152k requests in 15.01s, 369 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 7,220 107,315 requests in 15 s
Latency p50 13ms average 13.5 ms
Latency p99 27ms max 57 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 7,285 · 2 : 7,155 req/s · spread 1.8 % · the output below is round 2, the closer to the average

Server during this run API Maker 1.9 vCPU, 132 MB RSS · MongoDB 1.5 vCPU · sandboxes 0.0 vCPU, 510 MB · whole server busy 99 %, of which kernel (network, disk) 33 % · memory used 1513 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 6 ms │ 13 ms │ 23 ms │ 27 ms │ 13.48 ms │ 4.54 ms │ 57 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 7,035   │ 7,035   │ 7,147   │ 7,391   │ 7,155.07 │ 78.75  │ 7,033   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 19.3 MB │ 19.3 MB │ 19.5 MB │ 20.2 MB │ 19.6 MB  │ 216 kB │ 19.2 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 0            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 5            │
├────────────┼──────────────┤
│ 2.5        │ 6            │
├────────────┼──────────────┤
│ 10         │ 8            │
├────────────┼──────────────┤
│ 25         │ 10           │
├────────────┼──────────────┤
│ 50         │ 13           │
├────────────┼──────────────┤
│ 75         │ 16           │
├────────────┼──────────────┤
│ 90         │ 19           │
├────────────┼──────────────┤
│ 97.5       │ 23           │
├────────────┼──────────────┤
│ 99         │ 27           │
├────────────┼──────────────┤
│ 99.9       │ 40           │
├────────────┼──────────────┤
│ 99.99      │ 51           │
├────────────┼──────────────┤
│ 99.999     │ 56           │
└────────────┴──────────────┘

107k requests in 15.01s, 294 MB read

Requests / second 8,245 124,348 requests in 15 s
Latency p50 12ms average 11.6 ms
Latency p99 14ms max 21 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.9 vCPU, 117 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.2 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 91 %, of which kernel (network, disk) 34 % · memory used 1105 MB of 7941 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 10 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers
100 connections
10 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 10 ms │ 12 ms │ 13 ms │ 14 ms │ 11.56 ms │ 0.99 ms │ 21 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬───────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%   │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼───────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 8,207   │ 8,207   │ 8,255 │ 8,567   │ 8,290.94 │ 101.99 │ 8,207   │
├───────────┼─────────┼─────────┼───────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 19.9 MB │ 19.9 MB │ 20 MB │ 20.8 MB │ 20.1 MB  │ 248 kB │ 19.9 MB │
└───────────┴─────────┴─────────┴───────┴─────────┴──────────┴────────┴─────────┘

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

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

124k requests in 15.01s, 301 MB read

Requests / second 9,236 137,909 requests in 15 s
Latency p50 10ms average 10.4 ms
Latency p99 12ms max 20 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 2.0 vCPU, 127 MB RSS · MongoDB 0.0 vCPU · MySQL 1.1 vCPU · sandboxes 0.0 vCPU, 505 MB · whole server busy 92 %, of which kernel (network, disk) 37 % · memory used 2018 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 9 ms │ 10 ms │ 12 ms │ 12 ms │ 10.38 ms │ 0.85 ms │ 20 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 9,127   │ 9,127   │ 9,175   │ 9,423   │ 9,195.47 │ 74.34  │ 9,121   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 22.1 MB │ 22.1 MB │ 22.2 MB │ 22.8 MB │ 22.3 MB  │ 180 kB │ 22.1 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

138k requests in 15.01s, 334 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 29,762 450,257 requests in 15 s
Latency p50 3ms average 2.8 ms
Latency p99 5ms max 16 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 30,018 · 2 : 29,507 req/s · spread 1.7 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.3 vCPU, 123 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 55 MB · Redis 0.2 vCPU · whole server busy 95 %, of which kernel (network, disk) 42 % · memory used 901 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 3 ms │ 4 ms  │ 5 ms │ 2.83 ms │ 0.81 ms │ 16 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 29,663  │ 29,663  │ 29,983  │ 30,479  │ 30,017.6 │ 240.24 │ 29,659  │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 81.2 MB │ 81.2 MB │ 82.1 MB │ 83.4 MB │ 82.2 MB  │ 652 kB │ 81.2 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

450k requests in 15.01s, 1.23 GB read

Requests / second 30,205 455,735 requests in 15 s
Latency p50 3ms average 2.8 ms
Latency p99 5ms max 13 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 30,384 · 2 : 30,026 req/s · spread 1.2 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.3 vCPU, 118 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.0 vCPU · sandboxes 0.0 vCPU, 55 MB · Redis 0.2 vCPU · whole server busy 95 %, of which kernel (network, disk) 42 % · memory used 1104 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 3 ms │ 4 ms  │ 5 ms │ 2.79 ms │ 0.78 ms │ 13 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 29,983  │ 29,983  │ 30,415  │ 31,199  │ 30,383.47 │ 290.71 │ 29,982  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 72.7 MB │ 72.7 MB │ 73.8 MB │ 75.7 MB │ 73.7 MB   │ 707 kB │ 72.7 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

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

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

456k requests in 15.01s, 1.11 GB read

Requests / second 30,217 458,018 requests in 15 s
Latency p50 3ms average 2.8 ms
Latency p99 5ms max 212 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 30,535 · 2 : 29,898 req/s · spread 2.1 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.3 vCPU, 118 MB RSS · MongoDB 0.0 vCPU · MySQL 0.0 vCPU · sandboxes 0.0 vCPU, 53 MB · Redis 0.2 vCPU · whole server busy 95 %, of which kernel (network, disk) 42 % · memory used 1481 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public_cached"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public_cached
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max    │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
│ Latency │ 1 ms │ 3 ms │ 4 ms  │ 5 ms │ 2.78 ms │ 0.83 ms │ 212 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min    │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼────────┤
│ Req/Sec   │ 30,111  │ 30,111  │ 30,575  │ 30,959  │ 30,534.94 │ 206.52 │ 30,106 │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼────────┤
│ Bytes/Sec │ 73.1 MB │ 73.1 MB │ 74.2 MB │ 75.1 MB │ 74.1 MB   │ 500 kB │ 73 MB  │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴────────┘

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

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

458k requests in 15.01s, 1.11 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 23,619 355,519 requests in 15 s
Latency p50 4ms average 3.7 ms
Latency p99 6ms max 15 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 23,702 · 2 : 23,537 req/s · spread 0.7 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.4 vCPU, 120 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 55 MB · Redis 0.2 vCPU · whole server busy 97 %, of which kernel (network, disk) 35 % · memory used 896 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 2 ms │ 4 ms │ 6 ms  │ 6 ms │ 3.72 ms │ 0.98 ms │ 15 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 23,327  │ 23,327  │ 23,807  │ 24,159  │ 23,701.87 │ 218.52 │ 23,327  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 63.9 MB │ 63.9 MB │ 65.2 MB │ 66.1 MB │ 64.9 MB   │ 599 kB │ 63.8 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

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

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

356k requests in 15.01s, 973 MB read

Requests / second 24,179 365,574 requests in 15 s
Latency p50 4ms average 3.6 ms
Latency p99 6ms max 15 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 24,373 · 2 : 23,985 req/s · spread 1.6 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.4 vCPU, 118 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.0 vCPU · sandboxes 0.0 vCPU, 55 MB · Redis 0.2 vCPU · whole server busy 97 %, of which kernel (network, disk) 35 % · memory used 1099 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬──────┬───────┬──────┬────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg    │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼────────┼─────────┼───────┤
│ Latency │ 2 ms │ 4 ms │ 5 ms  │ 6 ms │ 3.6 ms │ 0.96 ms │ 15 ms │
└─────────┴──────┴──────┴───────┴──────┴────────┴─────────┴───────┘
┌───────────┬────────┬────────┬─────────┬─────────┬──────────┬────────┬────────┐
│ Stat      │ 1%     │ 2.5%   │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min    │
├───────────┼────────┼────────┼─────────┼─────────┼──────────┼────────┼────────┤
│ Req/Sec   │ 23,919 │ 23,919 │ 24,287  │ 25,775  │ 24,372.8 │ 409.73 │ 23,908 │
├───────────┼────────┼────────┼─────────┼─────────┼──────────┼────────┼────────┤
│ Bytes/Sec │ 58 MB  │ 58 MB  │ 58.9 MB │ 62.5 MB │ 59.1 MB  │ 991 kB │ 58 MB  │
└───────────┴────────┴────────┴─────────┴─────────┴──────────┴────────┴────────┘

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

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

366k requests in 15.01s, 887 MB read

Requests / second 24,025 365,041 requests in 15 s
Latency p50 4ms average 3.6 ms
Latency p99 6ms max 14 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 24,333 · 2 : 23,717 req/s · spread 2.6 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.4 vCPU, 119 MB RSS · MongoDB 0.0 vCPU · MySQL 0.0 vCPU · sandboxes 0.0 vCPU, 53 MB · Redis 0.2 vCPU · whole server busy 97 %, of which kernel (network, disk) 35 % · memory used 1483 MB of 7941 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 10 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_cached"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_cached
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 2 ms │ 4 ms │ 5 ms  │ 6 ms │ 3.61 ms │ 0.95 ms │ 14 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 23,967  │ 23,967  │ 24,255  │ 25,359  │ 24,333.34 │ 391.43 │ 23,966  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 58.2 MB │ 58.2 MB │ 58.9 MB │ 61.5 MB │ 59 MB     │ 951 kB │ 58.1 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

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

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

365k requests in 15.01s, 886 MB 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 7,342 111,227 requests in 15 s
Latency p50 13ms average 13.0 ms
Latency p99 27ms max 79 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.8 vCPU, 129 MB RSS · MongoDB 1.6 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 99 %, of which kernel (network, disk) 32 % · memory used 923 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬───────┬───────┬───────┬──────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev  │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼────────┼───────┤
│ Latency │ 5 ms │ 13 ms │ 23 ms │ 27 ms │ 12.99 ms │ 4.6 ms │ 79 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 7,319   │ 7,319   │ 7,407   │ 7,547   │ 7,415.34 │ 61.24  │ 7,319   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 21.1 MB │ 21.1 MB │ 21.3 MB │ 21.8 MB │ 21.4 MB  │ 176 kB │ 21.1 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

111k requests in 15.01s, 321 MB read

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

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

Server during this run API Maker 1.7 vCPU, 131 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.3 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 90 %, of which kernel (network, disk) 36 % · memory used 1126 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers_public/stream"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers_public/stream
100 connections
10 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 9 ms │ 10 ms │ 12 ms │ 13 ms │ 10.47 ms │ 0.87 ms │ 22 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 8,991   │ 8,991   │ 9,119   │ 9,279   │ 9,116   │ 75.22  │ 8,985   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 23.1 MB │ 23.1 MB │ 23.5 MB │ 23.9 MB │ 23.5 MB │ 192 kB │ 23.1 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

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

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

137k requests in 15.01s, 352 MB read

Requests / second 9,458 144,777 requests in 15 s
Latency p50 10ms average 9.9 ms
Latency p99 12ms max 20 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.9 vCPU, 124 MB RSS · MongoDB 0.0 vCPU · MySQL 1.1 vCPU · sandboxes 0.0 vCPU, 53 MB · whole server busy 92 %, of which kernel (network, disk) 38 % · memory used 1489 MB of 7942 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 10 -l "http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public/stream"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public/stream
100 connections
10 workers

┌─────────┬──────┬───────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 9 ms │ 10 ms │ 11 ms │ 12 ms │ 9.86 ms │ 0.81 ms │ 20 ms │
└─────────┴──────┴───────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 9,543   │ 9,543   │ 9,647   │ 9,839   │ 9,652.54 │ 76.6   │ 9,538   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 24.5 MB │ 24.5 MB │ 24.8 MB │ 25.3 MB │ 24.8 MB  │ 199 kB │ 24.5 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

145k requests in 15.01s, 372 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 6,933 104,966 requests in 15 s
Latency p50 13ms average 13.8 ms
Latency p99 26ms max 55 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 6,998 · 2 : 6,867 req/s · spread 1.9 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.0 vCPU, 129 MB RSS · MongoDB 1.5 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 99 %, of which kernel (network, disk) 30 % · memory used 936 MB of 7941 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 10 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers/stream"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers/stream
100 connections
10 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 6 ms │ 13 ms │ 23 ms │ 26 ms │ 13.79 ms │ 4.41 ms │ 55 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 6,927   │ 6,927   │ 6,983   │ 7,159   │ 6,998.27 │ 60.89  │ 6,926   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 20.7 MB │ 20.7 MB │ 20.8 MB │ 21.4 MB │ 20.9 MB  │ 182 kB │ 20.7 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

105k requests in 15.01s, 313 MB read

Requests / second 8,490 127,901 requests in 15 s
Latency p50 11ms average 11.2 ms
Latency p99 13ms max 21 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.9 vCPU, 125 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.2 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 93 %, of which kernel (network, disk) 34 % · memory used 1126 MB of 7941 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 10 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers/stream"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers/stream
100 connections
10 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 10 ms │ 11 ms │ 13 ms │ 13 ms │ 11.23 ms │ 0.88 ms │ 21 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 8,439   │ 8,439   │ 8,519   │ 8,727   │ 8,527.21 │ 66.28  │ 8,437   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 22.6 MB │ 22.6 MB │ 22.8 MB │ 23.3 MB │ 22.8 MB  │ 177 kB │ 22.6 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

128k requests in 15.01s, 342 MB read

Requests / second 8,733 129,622 requests in 15 s
Latency p50 11ms average 11.1 ms
Latency p99 13ms max 23 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 2.1 vCPU, 130 MB RSS · MongoDB 0.0 vCPU · MySQL 1.0 vCPU · sandboxes 0.0 vCPU, 505 MB · whole server busy 93 %, of which kernel (network, disk) 35 % · memory used 2014 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬───────┬───────┬───────┬───────┬──────────┬────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev  │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼────────┼───────┤
│ Latency │ 10 ms │ 11 ms │ 13 ms │ 13 ms │ 11.07 ms │ 0.9 ms │ 23 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 8,583   │ 8,583   │ 8,631   │ 8,759   │ 8,641.87 │ 52.87  │ 8,579   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 22.9 MB │ 22.9 MB │ 23.1 MB │ 23.4 MB │ 23.1 MB  │ 143 kB │ 22.9 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

130k requests in 15.01s, 346 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 5,228 78,614 requests in 15 s
Latency p50 18ms average 18.6 ms
Latency p99 32ms max 60 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 5,242 · 2 : 5,214 req/s · spread 0.5 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.4 vCPU, 131 MB RSS · MongoDB 1.2 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 100 %, of which kernel (network, disk) 25 % · memory used 950 MB of 7942 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 9 ms │ 18 ms │ 30 ms │ 32 ms │ 18.58 ms │ 5.46 ms │ 60 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 5,179   │ 5,179   │ 5,239   │ 5,379   │ 5,241.47 │ 51.25  │ 5,178   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 14.2 MB │ 14.2 MB │ 14.3 MB │ 14.7 MB │ 14.3 MB  │ 141 kB │ 14.2 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

79k requests in 15.01s, 215 MB read

Requests / second 5,886 88,531 requests in 15 s
Latency p50 16ms average 16.4 ms
Latency p99 19ms max 27 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 5,902 · 2 : 5,869 req/s · spread 0.6 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.5 vCPU, 122 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.9 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 96 %, of which kernel (network, disk) 25 % · memory used 1129 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/custom-api/bench/bench_postgres_public"
Running 15s test @ http://192.168.133.123:38246/api/custom-api/bench/bench_postgres_public
100 connections
10 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 15 ms │ 16 ms │ 19 ms │ 19 ms │ 16.44 ms │ 1.31 ms │ 27 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬───────┬───────┬─────────┬─────────┬──────────┬────────┬───────┐
│ Stat      │ 1%    │ 2.5%  │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min   │
├───────────┼───────┼───────┼─────────┼─────────┼──────────┼────────┼───────┤
│ Req/Sec   │ 5,791 │ 5,791 │ 5,895   │ 6,087   │ 5,902.27 │ 63.61  │ 5,789 │
├───────────┼───────┼───────┼─────────┼─────────┼──────────┼────────┼───────┤
│ Bytes/Sec │ 14 MB │ 14 MB │ 14.3 MB │ 14.8 MB │ 14.3 MB  │ 156 kB │ 14 MB │
└───────────┴───────┴───────┴─────────┴─────────┴──────────┴────────┴───────┘

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

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

89k requests in 15.02s, 215 MB read

Requests / second 6,513 98,309 requests in 15 s
Latency p50 15ms average 14.8 ms
Latency p99 17ms max 23 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 6,554 · 2 : 6,472 req/s · spread 1.3 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.6 vCPU, 125 MB RSS · MongoDB 0.0 vCPU · MySQL 0.7 vCPU · sandboxes 0.0 vCPU, 53 MB · whole server busy 96 %, of which kernel (network, disk) 27 % · memory used 1493 MB of 7942 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 10 -l "http://192.168.133.123:38246/api/custom-api/bench/bench_mysql_public"
Running 15s test @ http://192.168.133.123:38246/api/custom-api/bench/bench_mysql_public
100 connections
10 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 13 ms │ 15 ms │ 17 ms │ 17 ms │ 14.76 ms │ 1.12 ms │ 23 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 6,503   │ 6,503   │ 6,543   │ 6,671   │ 6,554.27 │ 44.27  │ 6,500   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 15.8 MB │ 15.8 MB │ 15.9 MB │ 16.2 MB │ 15.9 MB  │ 107 kB │ 15.8 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

98k requests in 15.01s, 238 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 4,933 73,535 requests in 15 s
Latency p50 20ms average 19.9 ms
Latency p99 35ms max 52 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 4,963 · 2 : 4,903 req/s · spread 1.2 % · the output below is round 2, the closer to the average

Server during this run API Maker 2.5 vCPU, 133 MB RSS · MongoDB 1.1 vCPU · sandboxes 0.0 vCPU, 511 MB · whole server busy 99 %, of which kernel (network, disk) 23 % · memory used 1543 MB of 7942 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬───────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 9 ms │ 20 ms │ 32 ms │ 35 ms │ 19.9 ms │ 5.72 ms │ 52 ms │
└─────────┴──────┴───────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Req/Sec   │ 4,871   │ 4,871   │ 4,891   │ 4,979   │ 4,902.8 │ 33.06   │ 4,869   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Bytes/Sec │ 13.3 MB │ 13.3 MB │ 13.4 MB │ 13.6 MB │ 13.4 MB │ 91.4 kB │ 13.3 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘

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

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 3            │
├────────────┼──────────────┤
│ 1          │ 7            │
├────────────┼──────────────┤
│ 2.5        │ 9            │
├────────────┼──────────────┤
│ 10         │ 13           │
├────────────┼──────────────┤
│ 25         │ 16           │
├────────────┼──────────────┤
│ 50         │ 20           │
├────────────┼──────────────┤
│ 75         │ 23           │
├────────────┼──────────────┤
│ 90         │ 27           │
├────────────┼──────────────┤
│ 97.5       │ 32           │
├────────────┼──────────────┤
│ 99         │ 35           │
├────────────┼──────────────┤
│ 99.9       │ 41           │
├────────────┼──────────────┤
│ 99.99      │ 47           │
├────────────┼──────────────┤
│ 99.999     │ 52           │
└────────────┴──────────────┘

74k requests in 15.01s, 201 MB read

Requests / second 5,442 82,083 requests in 15 s
Latency p50 18ms average 17.8 ms
Latency p99 21ms max 27 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 2.6 vCPU, 123 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.8 vCPU · sandboxes 0.0 vCPU, 55 MB · whole server busy 97 %, of which kernel (network, disk) 25 % · memory used 1122 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 16 ms │ 18 ms │ 20 ms │ 21 ms │ 17.77 ms │ 1.32 ms │ 27 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 5,431   │ 5,431   │ 5,463   │ 5,575   │ 5,472.67 │ 40      │ 5,430   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 13.2 MB │ 13.2 MB │ 13.2 MB │ 13.5 MB │ 13.3 MB  │ 96.6 kB │ 13.2 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

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

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

82k requests in 15.02s, 199 MB read

Requests / second 6,032 90,466 requests in 15 s
Latency p50 16ms average 16.1 ms
Latency p99 19ms max 26 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 6,031 · 2 : 6,034 req/s · spread 0 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.7 vCPU, 128 MB RSS · MongoDB 0.0 vCPU · MySQL 0.7 vCPU · sandboxes 0.0 vCPU, 53 MB · whole server busy 97 %, of which kernel (network, disk) 26 % · memory used 1489 MB of 7941 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 10 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.123:38246/api/custom-api/bench/bench_mysql_tokens"
Running 15s test @ http://192.168.133.123:38246/api/custom-api/bench/bench_mysql_tokens
100 connections
10 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 14 ms │ 16 ms │ 18 ms │ 19 ms │ 16.08 ms │ 1.22 ms │ 26 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬───────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5% │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼───────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 5,971   │ 5,971   │ 6,019   │ 6,199 │ 6,031.34 │ 48.75  │ 5,971   │
├───────────┼─────────┼─────────┼─────────┼───────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 14.5 MB │ 14.5 MB │ 14.6 MB │ 15 MB │ 14.6 MB  │ 117 kB │ 14.5 MB │
└───────────┴─────────┴─────────┴─────────┴───────┴──────────┴────────┴─────────┘

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

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

91k requests in 15.01s, 219 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 4,491 67,027 requests in 15 s
Latency p50 21ms average 21.9 ms
Latency p99 41ms max 79 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 4,469 · 2 : 4,512 req/s · spread 1 % · the output below is round 1, the closer to the average

Server during this run API Maker 1.0 vCPU, 127 MB RSS · MongoDB 1.0 vCPU · sandboxes 1.9 vCPU, 501 MB · whole server busy 100 %, of which kernel (network, disk) 21 % · memory used 1388 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/custom-api/bench/bench_mongodb_sandbox"
Running 15s test @ http://192.168.133.123:38246/api/custom-api/bench/bench_mongodb_sandbox
100 connections
10 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 9 ms │ 21 ms │ 37 ms │ 41 ms │ 21.87 ms │ 7.45 ms │ 79 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Req/Sec   │ 4,335   │ 4,335   │ 4,487   │ 4,539   │ 4,469.2 │ 49.45  │ 4,332   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤
│ Bytes/Sec │ 11.9 MB │ 11.9 MB │ 12.3 MB │ 12.4 MB │ 12.2 MB │ 136 kB │ 11.8 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘

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

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 2            │
├────────────┼──────────────┤
│ 0.1        │ 4            │
├────────────┼──────────────┤
│ 1          │ 7            │
├────────────┼──────────────┤
│ 2.5        │ 9            │
├────────────┼──────────────┤
│ 10         │ 13           │
├────────────┼──────────────┤
│ 25         │ 16           │
├────────────┼──────────────┤
│ 50         │ 21           │
├────────────┼──────────────┤
│ 75         │ 27           │
├────────────┼──────────────┤
│ 90         │ 32           │
├────────────┼──────────────┤
│ 97.5       │ 37           │
├────────────┼──────────────┤
│ 99         │ 41           │
├────────────┼──────────────┤
│ 99.9       │ 51           │
├────────────┼──────────────┤
│ 99.99      │ 70           │
├────────────┼──────────────┤
│ 99.999     │ 79           │
└────────────┴──────────────┘

67k requests in 15.01s, 183 MB read

Requests / second 4,673 70,427 requests in 15 s
Latency p50 21ms average 20.8 ms
Latency p99 38ms max 62 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 4,651 · 2 : 4,696 req/s · spread 1 % · the output below is round 2, the closer to the average

Server during this run API Maker 1.0 vCPU, 121 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.8 vCPU · sandboxes 1.8 vCPU, 481 MB · whole server busy 99 %, of which kernel (network, disk) 26 % · memory used 1693 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 9 ms │ 21 ms │ 35 ms │ 38 ms │ 20.79 ms │ 6.81 ms │ 62 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 4,627   │ 4,627   │ 4,683   │ 4,815   │ 4,695.61 │ 46.03  │ 4,627   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 11.2 MB │ 11.2 MB │ 11.4 MB │ 11.7 MB │ 11.4 MB  │ 111 kB │ 11.2 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 2            │
├────────────┼──────────────┤
│ 0.1        │ 4            │
├────────────┼──────────────┤
│ 1          │ 7            │
├────────────┼──────────────┤
│ 2.5        │ 9            │
├────────────┼──────────────┤
│ 10         │ 12           │
├────────────┼──────────────┤
│ 25         │ 16           │
├────────────┼──────────────┤
│ 50         │ 21           │
├────────────┼──────────────┤
│ 75         │ 25           │
├────────────┼──────────────┤
│ 90         │ 30           │
├────────────┼──────────────┤
│ 97.5       │ 35           │
├────────────┼──────────────┤
│ 99         │ 38           │
├────────────┼──────────────┤
│ 99.9       │ 45           │
├────────────┼──────────────┤
│ 99.99      │ 52           │
├────────────┼──────────────┤
│ 99.999     │ 62           │
└────────────┴──────────────┘

71k requests in 15.01s, 171 MB read

Requests / second 5,174 77,268 requests in 15 s
Latency p50 19ms average 18.9 ms
Latency p99 35ms max 53 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 5,152 · 2 : 5,196 req/s · spread 0.9 % · the output below is round 1, the closer to the average

Server during this run API Maker 1.1 vCPU, 122 MB RSS · MongoDB 0.0 vCPU · MySQL 0.6 vCPU · sandboxes 1.8 vCPU, 486 MB · whole server busy 99 %, of which kernel (network, disk) 28 % · memory used 1977 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/custom-api/bench/bench_mysql_sandbox"
Running 15s test @ http://192.168.133.123:38246/api/custom-api/bench/bench_mysql_sandbox
100 connections
10 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 8 ms │ 19 ms │ 32 ms │ 35 ms │ 18.91 ms │ 6.33 ms │ 53 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 4,919   │ 4,919   │ 5,175   │ 5,259   │ 5,151.87 │ 88.29  │ 4,918   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 11.9 MB │ 11.9 MB │ 12.5 MB │ 12.7 MB │ 12.5 MB  │ 213 kB │ 11.9 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 2            │
├────────────┼──────────────┤
│ 0.1        │ 3            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 8            │
├────────────┼──────────────┤
│ 10         │ 11           │
├────────────┼──────────────┤
│ 25         │ 14           │
├────────────┼──────────────┤
│ 50         │ 19           │
├────────────┼──────────────┤
│ 75         │ 23           │
├────────────┼──────────────┤
│ 90         │ 27           │
├────────────┼──────────────┤
│ 97.5       │ 32           │
├────────────┼──────────────┤
│ 99         │ 35           │
├────────────┼──────────────┤
│ 99.9       │ 42           │
├────────────┼──────────────┤
│ 99.99      │ 49           │
├────────────┼──────────────┤
│ 99.999     │ 53           │
└────────────┴──────────────┘

77k requests in 15.01s, 187 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 5,460 81,990 requests in 15 s
Latency p50 18ms average 17.8 ms
Latency p99 31ms max 66 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 5,466 · 2 : 5,453 req/s · spread 0.2 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.2 vCPU, 130 MB RSS · MongoDB 1.3 vCPU · sandboxes 0.0 vCPU, 506 MB · whole server busy 100 %, of which kernel (network, disk) 26 % · memory used 1407 MB of 7942 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 8 ms │ 18 ms │ 29 ms │ 31 ms │ 17.79 ms │ 5.32 ms │ 66 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 5,407   │ 5,407   │ 5,455   │ 5,619   │ 5,466.27 │ 54.35  │ 5,405   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 14.8 MB │ 14.8 MB │ 14.9 MB │ 15.4 MB │ 14.9 MB  │ 148 kB │ 14.8 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 2            │
├────────────┼──────────────┤
│ 1          │ 6            │
├────────────┼──────────────┤
│ 2.5        │ 8            │
├────────────┼──────────────┤
│ 10         │ 11           │
├────────────┼──────────────┤
│ 25         │ 14           │
├────────────┼──────────────┤
│ 50         │ 18           │
├────────────┼──────────────┤
│ 75         │ 21           │
├────────────┼──────────────┤
│ 90         │ 25           │
├────────────┼──────────────┤
│ 97.5       │ 29           │
├────────────┼──────────────┤
│ 99         │ 31           │
├────────────┼──────────────┤
│ 99.9       │ 40           │
├────────────┼──────────────┤
│ 99.99      │ 53           │
├────────────┼──────────────┤
│ 99.999     │ 66           │
└────────────┴──────────────┘

82k requests in 15.01s, 224 MB read

Requests / second 6,280 94,601 requests in 15 s
Latency p50 15ms average 15.4 ms
Latency p99 18ms max 26 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 6,307 · 2 : 6,253 req/s · spread 0.9 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.3 vCPU, 120 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.0 vCPU · sandboxes 0.0 vCPU, 470 MB · whole server busy 96 %, of which kernel (network, disk) 27 % · memory used 1657 MB of 7941 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 10 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers_pre_hook"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers_pre_hook
100 connections
10 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 14 ms │ 15 ms │ 17 ms │ 18 ms │ 15.36 ms │ 1.23 ms │ 26 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec   │ 6,247   │ 6,247   │ 6,295   │ 6,419   │ 6,307.34 │ 47.19  │ 6,247   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 15.1 MB │ 15.1 MB │ 15.3 MB │ 15.6 MB │ 15.3 MB  │ 115 kB │ 15.1 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴────────┴─────────┘

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

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

95k requests in 15.01s, 229 MB read

Requests / second 6,820 102,790 requests in 15 s
Latency p50 14ms average 14.1 ms
Latency p99 17ms max 23 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 6,786 · 2 : 6,853 req/s · spread 1 % · the output below is round 2, the closer to the average

Server during this run API Maker 2.4 vCPU, 127 MB RSS · MongoDB 0.0 vCPU · MySQL 0.9 vCPU · sandboxes 0.0 vCPU, 493 MB · whole server busy 95 %, of which kernel (network, disk) 29 % · memory used 2016 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 13 ms │ 14 ms │ 16 ms │ 17 ms │ 14.09 ms │ 1.03 ms │ 23 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Req/Sec   │ 6,791   │ 6,791   │ 6,859   │ 6,927   │ 6,853.2 │ 40.59   │ 6,788   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Bytes/Sec │ 16.5 MB │ 16.5 MB │ 16.6 MB │ 16.8 MB │ 16.6 MB │ 99.5 kB │ 16.5 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘

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

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

103k requests in 15.02s, 249 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 8,777 131,470 requests in 15 s
Latency p50 11ms average 10.9 ms
Latency p99 22ms max 56 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.8 vCPU, 131 MB RSS · MongoDB 1.6 vCPU · sandboxes 0.0 vCPU, 505 MB · whole server busy 99 %, of which kernel (network, disk) 34 % · memory used 1390 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 5 ms │ 11 ms │ 19 ms │ 22 ms │ 10.91 ms │ 3.86 ms │ 56 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬────────┬─────────┬─────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%    │ 97.5%   │ Avg     │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼─────────┤
│ Req/Sec   │ 8,655   │ 8,655   │ 8,751  │ 8,967   │ 8,764   │ 86.51   │ 8,655   │
├───────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┼─────────┤
│ Bytes/Sec │ 5.14 MB │ 5.14 MB │ 5.2 MB │ 5.33 MB │ 5.21 MB │ 51.1 kB │ 5.14 MB │
└───────────┴─────────┴─────────┴────────┴─────────┴─────────┴─────────┴─────────┘

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

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

132k requests in 15.01s, 78.1 MB read

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

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

Server during this run API Maker 1.6 vCPU, 121 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.4 vCPU · sandboxes 0.0 vCPU, 470 MB · whole server busy 92 %, of which kernel (network, disk) 35 % · memory used 1643 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers_public/get-by-id/2"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers_public/get-by-id/2
100 connections
10 workers

┌─────────┬──────┬───────┬───────┬───────┬────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg    │ Stdev  │ Max   │
├─────────┼──────┼───────┼───────┼───────┼────────┼────────┼───────┤
│ Latency │ 9 ms │ 10 ms │ 11 ms │ 12 ms │ 9.7 ms │ 0.8 ms │ 17 ms │
└─────────┴──────┴───────┴───────┴───────┴────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 9,695   │ 9,695   │ 9,815   │ 10,047  │ 9,806.67 │ 88.06   │ 9,690   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 5.44 MB │ 5.44 MB │ 5.51 MB │ 5.64 MB │ 5.5 MB   │ 49.2 kB │ 5.44 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

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

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

147k requests in 15.01s, 82.5 MB read

Requests / second 10,654 159,179 requests in 15 s
Latency p50 9ms average 8.9 ms
Latency p99 11ms max 18 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.7 vCPU, 126 MB RSS · MongoDB 0.0 vCPU · MySQL 1.1 vCPU · sandboxes 0.0 vCPU, 492 MB · whole server busy 87 %, of which kernel (network, disk) 36 % · memory used 1985 MB of 7942 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 10 -l "http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public/get-by-id/2"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public/get-by-id/2
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 8 ms │ 9 ms │ 10 ms │ 11 ms │ 8.93 ms │ 0.84 ms │ 18 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬────────┬─────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%  │ Avg     │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┤
│ Req/Sec   │ 10,495  │ 10,495  │ 10,575  │ 11,055 │ 10,612  │ 134.47  │ 10,495  │
├───────────┼─────────┼─────────┼─────────┼────────┼─────────┼─────────┼─────────┤
│ Bytes/Sec │ 5.89 MB │ 5.89 MB │ 5.93 MB │ 6.2 MB │ 5.95 MB │ 75.6 kB │ 5.89 MB │
└───────────┴─────────┴─────────┴─────────┴────────┴─────────┴─────────┴─────────┘

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

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

159k requests in 15.01s, 89.3 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 8,182 122,215 requests in 15 s
Latency p50 12ms average 11.8 ms
Latency p99 22ms max 46 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 2.0 vCPU, 131 MB RSS · MongoDB 1.4 vCPU · sandboxes 0.0 vCPU, 505 MB · whole server busy 99 %, of which kernel (network, disk) 33 % · memory used 1393 MB of 7941 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 10 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers/get-by-id/60ae2488c37cd955cc144161"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers/get-by-id/60ae2488c37cd955cc144161
100 connections
10 workers

┌─────────┬──────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼──────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 5 ms │ 12 ms │ 20 ms │ 22 ms │ 11.77 ms │ 3.83 ms │ 46 ms │
└─────────┴──────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev   │ Min    │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┤
│ Req/Sec   │ 8,091   │ 8,091   │ 8,151   │ 8,231   │ 8,148.4 │ 37.12   │ 8,089  │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┤
│ Bytes/Sec │ 4.81 MB │ 4.81 MB │ 4.84 MB │ 4.89 MB │ 4.84 MB │ 21.5 kB │ 4.8 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┘

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

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

122k requests in 15.01s, 72.6 MB read

Requests / second 8,790 131,939 requests in 15 s
Latency p50 11ms average 10.9 ms
Latency p99 13ms max 21 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.7 vCPU, 123 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.3 vCPU · sandboxes 0.0 vCPU, 468 MB · whole server busy 90 %, of which kernel (network, disk) 32 % · memory used 1689 MB of 7942 MB · steal 0 % · swap not touched

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

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

┌─────────┬───────┬───────┬───────┬───────┬──────────┬────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev  │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼────────┼───────┤
│ Latency │ 10 ms │ 11 ms │ 12 ms │ 13 ms │ 10.87 ms │ 0.9 ms │ 21 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴────────┴───────┘
┌───────────┬────────┬────────┬─────────┬─────────┬──────────┬───────┬─────────┐
│ Stat      │ 1%     │ 2.5%   │ 50%     │ 97.5%   │ Avg      │ Stdev │ Min     │
├───────────┼────────┼────────┼─────────┼─────────┼──────────┼───────┼─────────┤
│ Req/Sec   │ 8,727  │ 8,727  │ 8,783   │ 8,935   │ 8,794.94 │ 61.62 │ 8,725   │
├───────────┼────────┼────────┼─────────┼─────────┼──────────┼───────┼─────────┤
│ Bytes/Sec │ 4.9 MB │ 4.9 MB │ 4.93 MB │ 5.01 MB │ 4.93 MB  │ 35 kB │ 4.89 MB │
└───────────┴────────┴────────┴─────────┴─────────┴──────────┴───────┴─────────┘

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

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

132k requests in 15.01s, 74 MB read

Requests / second 9,758 146,675 requests in 15 s
Latency p50 10ms average 9.7 ms
Latency p99 12ms max 20 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.9 vCPU, 127 MB RSS · MongoDB 0.0 vCPU · MySQL 1.0 vCPU · sandboxes 0.0 vCPU, 492 MB · whole server busy 91 %, of which kernel (network, disk) 35 % · memory used 1986 MB of 7942 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬───────┬───────┬───────┬─────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%   │ 97.5% │ 99%   │ Avg     │ Stdev  │ Max   │
├─────────┼──────┼───────┼───────┼───────┼─────────┼────────┼───────┤
│ Latency │ 9 ms │ 10 ms │ 11 ms │ 12 ms │ 9.73 ms │ 0.8 ms │ 20 ms │
└─────────┴──────┴───────┴───────┴───────┴─────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 9,687   │ 9,687   │ 9,775   │ 9,895   │ 9,779.47 │ 58.02   │ 9,681   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 5.43 MB │ 5.43 MB │ 5.48 MB │ 5.55 MB │ 5.49 MB  │ 32.4 kB │ 5.43 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

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

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

147k requests in 15.01s, 82.3 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 32,588 486,856 requests in 15 s
Latency p50 3ms average 2.6 ms
Latency p99 4ms max 12 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 32,458 · 2 : 32,718 req/s · spread 0.8 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.3 vCPU, 128 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 505 MB · Redis 0.2 vCPU · whole server busy 94 %, of which kernel (network, disk) 37 % · memory used 1405 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers_public_cached/get-by-id/60ae2488c37cd955cc144161"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers_public_cached/get-by-id/60ae2488c37cd955cc144161
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 3 ms │ 4 ms  │ 4 ms │ 2.58 ms │ 0.75 ms │ 12 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 31,983  │ 31,983  │ 32,527  │ 32,735  │ 32,458.14 │ 216.24 │ 31,982  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 19.1 MB │ 19.1 MB │ 19.4 MB │ 19.5 MB │ 19.3 MB   │ 129 kB │ 19.1 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

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

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

487k requests in 15.01s, 290 MB read

Requests / second 33,015 493,728 requests in 15 s
Latency p50 3ms average 2.5 ms
Latency p99 4ms max 13 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 32,914 · 2 : 33,115 req/s · spread 0.6 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.2 vCPU, 121 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.0 vCPU · sandboxes 0.0 vCPU, 470 MB · Redis 0.2 vCPU · whole server busy 94 %, of which kernel (network, disk) 37 % · memory used 1649 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers_public_cached/get-by-id/2"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.customers_public_cached/get-by-id/2
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 3 ms │ 4 ms  │ 4 ms │ 2.54 ms │ 0.74 ms │ 13 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Req/Sec   │ 32,671  │ 32,671  │ 32,927  │ 33,151  │ 32,914.14 │ 141.09  │ 32,667  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Bytes/Sec │ 18.4 MB │ 18.4 MB │ 18.5 MB │ 18.7 MB │ 18.5 MB   │ 79.3 kB │ 18.4 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴─────────┴─────────┘

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

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

494k requests in 15.01s, 278 MB read

Requests / second 32,897 499,478 requests in 15 s
Latency p50 2ms average 2.5 ms
Latency p99 4ms max 13 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 33,297 · 2 : 32,497 req/s · spread 2.4 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.2 vCPU, 125 MB RSS · MongoDB 0.0 vCPU · MySQL 0.0 vCPU · sandboxes 0.0 vCPU, 492 MB · Redis 0.2 vCPU · whole server busy 94 %, of which kernel (network, disk) 38 % · memory used 1976 MB of 7941 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 10 -l "http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public_cached/get-by-id/2"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_public_cached/get-by-id/2
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬──────┬────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg    │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼────────┼─────────┼───────┤
│ Latency │ 1 ms │ 2 ms │ 4 ms  │ 4 ms │ 2.5 ms │ 0.74 ms │ 13 ms │
└─────────┴──────┴──────┴───────┴──────┴────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 32,767  │ 32,767  │ 33,183  │ 35,135  │ 33,296.54 │ 563.4  │ 32,762  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 18.4 MB │ 18.4 MB │ 18.7 MB │ 19.8 MB │ 18.7 MB   │ 319 kB │ 18.4 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

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

┌────────────┬──────────────┐
│ 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       │ 6            │
├────────────┼──────────────┤
│ 99.99      │ 9            │
├────────────┼──────────────┤
│ 99.999     │ 11           │
└────────────┴──────────────┘

500k requests in 15.01s, 281 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 25,516 381,272 requests in 15 s
Latency p50 3ms average 3.4 ms
Latency p99 6ms max 14 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 25,419 · 2 : 25,612 req/s · spread 0.8 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.4 vCPU, 127 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 505 MB · Redis 0.2 vCPU · whole server busy 96 %, of which kernel (network, disk) 31 % · memory used 1370 MB of 7941 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 10 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers_cached/get-by-id/60ae2488c37cd955cc144161"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/customers_cached/get-by-id/60ae2488c37cd955cc144161
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 2 ms │ 3 ms │ 5 ms  │ 6 ms │ 3.44 ms │ 0.91 ms │ 14 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 25,279  │ 25,279  │ 25,375  │ 25,807  │ 25,419.2 │ 139.02  │ 25,278  │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 15.1 MB │ 15.1 MB │ 15.1 MB │ 15.4 MB │ 15.1 MB  │ 81.5 kB │ 15.1 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

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

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

381k requests in 15.01s, 227 MB read

Requests / second 25,875 388,252 requests in 15 s
Latency p50 3ms average 3.4 ms
Latency p99 5ms max 14 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 3.4 vCPU, 121 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 0.0 vCPU · sandboxes 0.0 vCPU, 468 MB · Redis 0.2 vCPU · whole server busy 97 %, of which kernel (network, disk) 31 % · memory used 1701 MB of 7941 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬──────┬───────┬──────┬─────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev  │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼────────┼───────┤
│ Latency │ 2 ms │ 3 ms │ 5 ms  │ 5 ms │ 3.37 ms │ 0.9 ms │ 14 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 25,439  │ 25,439  │ 25,871  │ 26,191  │ 25,882.14 │ 200.43 │ 25,429  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 14.3 MB │ 14.3 MB │ 14.6 MB │ 14.7 MB │ 14.6 MB   │ 114 kB │ 14.3 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

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

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

388k requests in 15.01s, 219 MB read

Requests / second 25,837 388,702 requests in 15 s
Latency p50 3ms average 3.4 ms
Latency p99 5ms max 15 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 25,914 · 2 : 25,761 req/s · spread 0.6 % · the output below is round 1, the closer to the average

Server during this run API Maker 3.4 vCPU, 125 MB RSS · MongoDB 0.0 vCPU · MySQL 0.0 vCPU · sandboxes 0.0 vCPU, 492 MB · Redis 0.2 vCPU · whole server busy 97 %, of which kernel (network, disk) 30 % · memory used 1982 MB of 7941 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 10 -l -H "x-am-authorization: <token>" -H "x-am-user-authorization: <token>" "http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_cached/get-by-id/2"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/customers_cached/get-by-id/2
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 2 ms │ 3 ms │ 5 ms  │ 5 ms │ 3.36 ms │ 0.91 ms │ 15 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev  │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Req/Sec   │ 25,487  │ 25,487  │ 25,855  │ 27,039  │ 25,914.14 │ 345.44 │ 25,485  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼────────┼─────────┤
│ Bytes/Sec │ 14.4 MB │ 14.4 MB │ 14.6 MB │ 15.2 MB │ 14.6 MB   │ 194 kB │ 14.3 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴────────┴─────────┘

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

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

389k requests in 15.01s, 219 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 3,574 53,698 requests in 15 s
Latency p50 27ms average 27.4 ms
Latency p99 52ms max 124 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 3,580 · 2 : 3,568 req/s · spread 0.3 % · the output below is round 1, the closer to the average

Server during this run API Maker 1.3 vCPU, 132 MB RSS · MongoDB 2.0 vCPU · sandboxes 0.0 vCPU, 505 MB · whole server busy 97 %, of which kernel (network, disk) 29 % · memory used 1457 MB of 7941 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 10 -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.123:38246/api/schema/bench/mongodb/am_bench/inserts_public/save-single-or-multiple"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mongodb/am_bench/inserts_public/save-single-or-multiple
100 connections
10 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬────────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max    │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼────────┤
│ Latency │ 14 ms │ 27 ms │ 45 ms │ 52 ms │ 27.42 ms │ 8.27 ms │ 124 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 3,527   │ 3,527   │ 3,583   │ 3,627   │ 3,580.34 │ 24.71   │ 3,527   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 2.11 MB │ 2.11 MB │ 2.14 MB │ 2.17 MB │ 2.14 MB  │ 14.8 kB │ 2.11 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

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

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 2            │
├────────────┼──────────────┤
│ 0.01       │ 3            │
├────────────┼──────────────┤
│ 0.1        │ 5            │
├────────────┼──────────────┤
│ 1          │ 12           │
├────────────┼──────────────┤
│ 2.5        │ 14           │
├────────────┼──────────────┤
│ 10         │ 18           │
├────────────┼──────────────┤
│ 25         │ 22           │
├────────────┼──────────────┤
│ 50         │ 27           │
├────────────┼──────────────┤
│ 75         │ 32           │
├────────────┼──────────────┤
│ 90         │ 37           │
├────────────┼──────────────┤
│ 97.5       │ 45           │
├────────────┼──────────────┤
│ 99         │ 52           │
├────────────┼──────────────┤
│ 99.9       │ 82           │
├────────────┼──────────────┤
│ 99.99      │ 103          │
├────────────┼──────────────┤
│ 99.999     │ 124          │
└────────────┴──────────────┘

54k requests in 15.01s, 32.1 MB read

Requests / second 4,236 64,298 requests in 15 s
Latency p50 23ms average 22.8 ms
Latency p99 28ms max 44 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 4,287 · 2 : 4,185 req/s · spread 2.4 % · the output below is round 1, the closer to the average

Server during this run API Maker 1.2 vCPU, 124 MB RSS · MongoDB 0.0 vCPU · PostgreSQL 1.5 vCPU · sandboxes 0.0 vCPU, 470 MB · whole server busy 85 %, of which kernel (network, disk) 31 % · memory used 1674 MB of 7941 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 10 -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.123:38246/api/schema/bench/postgres/am_bench/public.inserts_public/save-single-or-multiple"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/postgres/am_bench/public.inserts_public/save-single-or-multiple
100 connections
10 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 21 ms │ 23 ms │ 27 ms │ 28 ms │ 22.82 ms │ 2.12 ms │ 44 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 4,057   │ 4,057   │ 4,275   │ 4,595   │ 4,287.34 │ 164.35  │ 4,057   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 2.31 MB │ 2.31 MB │ 2.43 MB │ 2.61 MB │ 2.44 MB  │ 93.4 kB │ 2.31 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

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

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 1            │
├────────────┼──────────────┤
│ 0.01       │ 1            │
├────────────┼──────────────┤
│ 0.1        │ 4            │
├────────────┼──────────────┤
│ 1          │ 20           │
├────────────┼──────────────┤
│ 2.5        │ 21           │
├────────────┼──────────────┤
│ 10         │ 21           │
├────────────┼──────────────┤
│ 25         │ 22           │
├────────────┼──────────────┤
│ 50         │ 23           │
├────────────┼──────────────┤
│ 75         │ 24           │
├────────────┼──────────────┤
│ 90         │ 25           │
├────────────┼──────────────┤
│ 97.5       │ 27           │
├────────────┼──────────────┤
│ 99         │ 28           │
├────────────┼──────────────┤
│ 99.9       │ 40           │
├────────────┼──────────────┤
│ 99.99      │ 43           │
├────────────┼──────────────┤
│ 99.999     │ 44           │
└────────────┴──────────────┘

64k requests in 15.01s, 36.6 MB read

Requests / second 3,462 51,392 requests in 15 s
Latency p50 29ms average 28.7 ms
Latency p99 33ms max 49 ms
Errors 0 non-2xx, errors, timeouts

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

Server during this run API Maker 1.0 vCPU, 129 MB RSS · MongoDB 0.0 vCPU · MySQL 1.1 vCPU · sandboxes 0.0 vCPU, 492 MB · whole server busy 78 %, of which kernel (network, disk) 33 % · memory used 1996 MB of 7941 MB · steal 0 % · swap not touched

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

$ autocannon -c 100 -d 15 -w 10 -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.123:38246/api/schema/bench/mysql/am_bench/inserts_public/save-single-or-multiple"
Running 15s test @ http://192.168.133.123:38246/api/schema/bench/mysql/am_bench/inserts_public/save-single-or-multiple
100 connections
10 workers

┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐
│ Stat    │ 2.5%  │ 50%   │ 97.5% │ 99%   │ Avg      │ Stdev   │ Max   │
├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤
│ Latency │ 26 ms │ 29 ms │ 32 ms │ 33 ms │ 28.67 ms │ 1.99 ms │ 49 ms │
└─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 3,319   │ 3,319   │ 3,431   │ 3,485   │ 3,426.74 │ 36.23   │ 3,318   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 1.89 MB │ 1.89 MB │ 1.95 MB │ 1.98 MB │ 1.95 MB  │ 20.7 kB │ 1.89 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

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

┌────────────┬──────────────┐
│ Percentile │ Latency (ms) │
├────────────┼──────────────┤
│ 0.001      │ 2            │
├────────────┼──────────────┤
│ 0.01       │ 2            │
├────────────┼──────────────┤
│ 0.1        │ 5            │
├────────────┼──────────────┤
│ 1          │ 26           │
├────────────┼──────────────┤
│ 2.5        │ 26           │
├────────────┼──────────────┤
│ 10         │ 27           │
├────────────┼──────────────┤
│ 25         │ 28           │
├────────────┼──────────────┤
│ 50         │ 29           │
├────────────┼──────────────┤
│ 75         │ 29           │
├────────────┼──────────────┤
│ 90         │ 30           │
├────────────┼──────────────┤
│ 97.5       │ 32           │
├────────────┼──────────────┤
│ 99         │ 33           │
├────────────┼──────────────┤
│ 99.9       │ 45           │
├────────────┼──────────────┤
│ 99.99      │ 47           │
├────────────┼──────────────┤
│ 99.999     │ 49           │
└────────────┴──────────────┘

51k requests in 15.01s, 29.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 21,532 323,087 requests in 15 s
Latency p50 4ms average 4.2 ms
Latency p99 8ms max 19 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 21,526 · 2 : 21,539 req/s · spread 0.1 % · the output below is round 2, the closer to the average

Server during this run API Maker 4.0 vCPU, 124 MB RSS · MongoDB 0.0 vCPU · sandboxes 0.0 vCPU, 507 MB · whole server busy 100 %, of which kernel (network, disk) 24 % · memory used 1508 MB of 7942 MB · steal 0 % · swap not touched

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

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

┌─────────┬──────┬──────┬───────┬──────┬─────────┬────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev  │ Max   │
├─────────┼──────┼──────┼───────┼──────┼─────────┼────────┼───────┤
│ Latency │ 1 ms │ 4 ms │ 7 ms  │ 8 ms │ 4.15 ms │ 1.7 ms │ 19 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Req/Sec   │ 21,359  │ 21,359  │ 21,519  │ 22,239  │ 21,538.67 │ 210.38  │ 21,352  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Bytes/Sec │ 8.52 MB │ 8.52 MB │ 8.59 MB │ 8.87 MB │ 8.59 MB   │ 83.3 kB │ 8.52 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴─────────┴─────────┘

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

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

323k requests in 15.01s, 129 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 18,562 278,386 requests in 15 s
Latency p50 5ms average 4.9 ms
Latency p99 10ms max 18 ms
Errors 0 non-2xx, errors, timeouts

2 rounds of 15 s 1 : 18,558 · 2 : 18,566 req/s · spread 0 % · the output below is round 1, the closer to the average

Server during this run API Maker 2.7 vCPU, 128 MB RSS · MongoDB 0.0 vCPU · sandboxes 1.2 vCPU, 509 MB · whole server busy 98 %, of which kernel (network, disk) 27 % · memory used 1515 MB of 7942 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 10 -l "http://192.168.133.123:38246/api/custom-api/bench/bench_sandbox_no_db"
Running 15s test @ http://192.168.133.123:38246/api/custom-api/bench/bench_sandbox_no_db
100 connections
10 workers

┌─────────┬──────┬──────┬───────┬───────┬─────────┬─────────┬───────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%   │ Avg     │ Stdev   │ Max   │
├─────────┼──────┼──────┼───────┼───────┼─────────┼─────────┼───────┤
│ Latency │ 2 ms │ 5 ms │ 9 ms  │ 10 ms │ 4.89 ms │ 1.91 ms │ 18 ms │
└─────────┴──────┴──────┴───────┴───────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬───────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg       │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Req/Sec   │ 18,383  │ 18,383  │ 18,559  │ 18,767  │ 18,558.41 │ 110.36  │ 18,378  │
├───────────┼─────────┼─────────┼─────────┼─────────┼───────────┼─────────┼─────────┤
│ Bytes/Sec │ 7.59 MB │ 7.59 MB │ 7.66 MB │ 7.75 MB │ 7.66 MB   │ 45.7 kB │ 7.59 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴───────────┴─────────┴─────────┘

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

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

278k requests in 15.01s, 115 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 ms6,558
50 connectionsp50 6 ms · p99 14 ms7,616
100 connectionsp50 12 ms · p99 28 ms7,565
250 connectionsp50 33 ms · p99 56 ms7,278
500 connectionsp50 70 ms · p99 86 ms7,099
1,000 connectionsp50 141 ms · p99 157 ms7,063
Connections Requests / second p50 p99 Max Errors Server busy API Maker RSS
10 6,558 1 ms 2 ms 11 ms 0 87 % 123 MB
50 7,616 6 ms 14 ms 32 ms 0 98 % 127 MB
100 7,565 12 ms 28 ms 77 ms 0 99 % 132 MB
250 7,278 33 ms 56 ms 113 ms 0 99 % 144 MB
500 7,099 70 ms 86 ms 123 ms 0 99 % 158 MB
1,000 7,063 141 ms 157 ms 211 ms 0 99 % 194 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 1 ms15,484
50 connectionsp50 1 ms · p99 2 ms29,267
100 connectionsp50 3 ms · p99 4 ms32,315
250 connectionsp50 7 ms · p99 12 ms32,425
500 connectionsp50 15 ms · p99 22 ms31,813
1,000 connectionsp50 32 ms · p99 43 ms30,921
Connections Requests / second p50 p99 Max Errors Server busy API Maker RSS
10 15,484 0 ms 1 ms 11 ms 0 68 % 129 MB
50 29,267 1 ms 2 ms 8 ms 0 89 % 129 MB
100 32,315 3 ms 4 ms 13 ms 0 94 % 133 MB
250 32,425 7 ms 12 ms 24 ms 0 97 % 141 MB
500 31,813 15 ms 22 ms 49 ms 0 98 % 154 MB
1,000 30,921 32 ms 43 ms 75 ms 0 98 % 182 MB

Questions

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

On this 8 GB server, with the database on the same machine : 7,614 requests per second for a whole table of ten rows on MongoDB (PostgreSQL 8,912 · MySQL 10,000), 8,777 for one row by its id, and 32,588 when the answer is cached in Redis. A custom API in TypeScript which reads the table answers 5,228 requests per second when API Maker runs it itself (lean code), 4,491 when it runs in the sandbox of the account.

How much memory does API Maker use ?

The API Maker process held 104 MB at rest and 140 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 7,220 requests per second on MongoDB (public : 7,614), 8,245 requests per second on PostgreSQL (public : 8,912), 9,236 requests per second on MySQL (public : 10,000). The checks show most where the database does no work : a cached get all answered 23,619 requests per second with both tokens against 29,762 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 5,460 requests per second on MongoDB, against 7,220 for the same API without the hook. On 4 vCPUs, the API, the hook and the database share the same 4 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.