# API Maker benchmark : 8 vCPU, 16 GB RAM (Linode dedicated CPU)

> API Maker on 8 dedicated vCPUs, 16 GB (Linode) : 12,640 req/s get all, 47,980 cached, on MongoDB, PostgreSQL and MySQL, with memory and autocannon output.

Source: https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html

<nav class="am-bench-switch" aria-label="Benchmark servers">
Shared CPU

- [1 vCPU1 GB · $5](https://docs.apimaker.dev/v4/docs/benchmarks/linode-shared-1-vcpu-1gb.html)
- [2 vCPU4 GB · $24](https://docs.apimaker.dev/v4/docs/benchmarks/linode-shared-2-vcpu-4gb.html)
- [4 vCPU8 GB · $48](https://docs.apimaker.dev/v4/docs/benchmarks/linode-shared-4-vcpu-8gb.html)
- [8 vCPU32 GB · $192](https://docs.apimaker.dev/v4/docs/benchmarks/linode-shared-8-vcpu-32gb.html)

Dedicated CPU

- [2 vCPU4 GB · $36](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-2-vcpu-4gb.html)
- [4 vCPU8 GB · $72](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-4-vcpu-8gb.html)
- [8 vCPU16 GB · $144](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html)

Compare

[All resultsevery server side by side](https://docs.apimaker.dev/v4/docs/benchmarks/summary.html)

</nav>

Benchmark · Linode (Akamai Cloud) · Dedicated CPU · 12 October 2026

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

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

Get all · MongoDB

12,640req/s

PostgreSQL 12,641 · MySQL 13,748

Get by id, cached

47,980req/s

answered from Redis · PostgreSQL 47,888 · MySQL 48,818

Custom API · MongoDB

8,893req/s

TypeScript, lean : run in the server · in the sandbox 7,569

API Maker memory

111MB

at rest · 176 MB at most under load

## The server

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

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

## The data

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

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

## Results at a glance

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

**Requests per second · 8 vCPU, 16 GB RAM, dedicated CPU** · MongoDB · PostgreSQL · MySQL

Get allpublic · 12,640 · 12,641 · 13,748

Get allboth tokens · 12,106 · 11,913 · 12,712

Get all with cachingpublic · 43,980 · 43,173 · 44,027

Get all with cachingboth tokens · 36,123 · 35,403 · 35,915

Get all by streampublic · 11,898 · 13,073 · 13,095

Get all by streamboth tokens · 11,516 · 12,162 · 12,340

Custom API calling get all QuickJS · public · 8,893 · 9,176 · 9,820

Custom API calling get all QuickJS · both tokens · 8,426 · 8,561 · 9,129

Custom API in the sandbox Sandbox · public · 7,569 · 7,916 · 8,657

Get all with a pre hook QuickJS · both tokens · 9,279 · 9,524 · 10,204

Get by idpublic · 14,224 · 13,571 · 14,510

Get by idboth tokens · 13,443 · 12,656 · 13,517

Get by id with cachingpublic · 47,980 · 47,888 · 48,818

Get by id with cachingboth tokens · 38,521 · 38,045 · 38,544

Insert one rowpublic · 5,490 · 5,874 · 3,542

| API | Access | MongoDB | PostgreSQL | MySQL |
|---|---|--:|--:|--:|
| [Get all](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-all) | Public | **12,640** p99 17 ms | **12,641** p99 10 ms | **13,748** p99 9 ms |
| [Get all](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-all) | Both tokens | **12,106** p99 17 ms | **11,913** p99 10 ms | **12,712** p99 10 ms |
| [Get all with caching](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-all-with-caching) | Public | **43,980** p99 3 ms | **43,173** p99 3 ms | **44,027** p99 3 ms |
| [Get all with caching](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-all-with-caching) | Both tokens | **36,123** p99 4 ms | **35,403** p99 4 ms | **35,915** p99 4 ms |
| [Get all by stream](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-all-by-stream) | Public | **11,898** p99 17 ms | **13,073** p99 9 ms | **13,095** p99 9 ms |
| [Get all by stream](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-all-by-stream) | Both tokens | **11,516** p99 18 ms | **12,162** p99 10 ms | **12,340** p99 10 ms |
| [Custom API calling get all](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#custom-api-calling-get-all) QuickJS | Public | **8,893** p99 20 ms | **9,176** p99 13 ms | **9,820** p99 12 ms |
| [Custom API calling get all](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#custom-api-calling-get-all) QuickJS | Both tokens | **8,426** p99 21 ms | **8,561** p99 14 ms | **9,129** p99 13 ms |
| [Custom API in the sandbox](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#custom-api-in-the-sandbox) Sandbox | Public | **7,569** p99 24 ms | **7,916** p99 22 ms | **8,657** p99 20 ms |
| [Get all with a pre hook](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-all-with-a-pre-hook) QuickJS | Both tokens | **9,279** p99 20 ms | **9,524** p99 13 ms | **10,204** p99 13 ms |
| [Get by id](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-by-id) | Public | **14,224** p99 14 ms | **13,571** p99 9 ms | **14,510** p99 8 ms |
| [Get by id](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-by-id) | Both tokens | **13,443** p99 14 ms | **12,656** p99 11 ms | **13,517** p99 9 ms |
| [Get by id with caching](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-by-id-with-caching) | Public | **47,980** p99 3 ms | **47,888** p99 3 ms | **48,818** p99 3 ms |
| [Get by id with caching](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#get-by-id-with-caching) | Both tokens | **38,521** p99 4 ms | **38,045** p99 4 ms | **38,544** p99 4 ms |
| [Insert one row](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#insert-one-row) | Public | **5,490** p99 32 ms | **5,874** p99 19 ms | **3,542** p99 38 ms |
| [Custom API without a database](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#custom-api-without-a-database) | Public | **39,192** p99 4 ms | | |
| [Custom API without a database, in the sandbox](https://docs.apimaker.dev/v4/docs/benchmarks/linode-dedicated-8-vcpu-16gb.html#custom-api-without-a-database) | Public | **27,920** p99 8 ms | | |

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

## Memory

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

API Maker · MongoDB of API Maker · Redis · PostgreSQL / MySQL · Sandboxes · Linux, Docker, the rest · Available

MongoDB

at rest

under load

PostgreSQL

at rest

under load

MySQL

at rest

under load

| Part | MongoDB<br>at rest → under load | PostgreSQL<br>at rest → under load | MySQL<br>at rest → under load |
|---|--:|--:|--:|
| **API Maker** (process), in RAM | 111 → **176** | 110 → **159** | 107 → **152** |
| … and in swap | 0 → **0** | 0 → **0** | 0 → **0** |
| MongoDB of API Maker, in RAM | 127 → **384** | 369 → **372** | 369 → **372** |
| … and in swap | 0 → **0** | 0 → **0** | 0 → **0** |
| Redis, in RAM | 3 → **4** | 3 → **4** | 3 → **4** |
| Database under test, in RAM | MongoDB above | 38 → **320** | 421 → **519** |
| … and in swap | MongoDB above | 0 → **0** | 0 → **0** |
| Sandboxes (2 containers), in RAM | 55 → **856** | 55 → **818** | 55 → **880** |
| … and in swap | 0 → **0** | 0 → **0** | 0 → **0** |
| **Whole server**, RAM used | 946 → **2093** | 1232 → **2349** | 1627 → **2602** |
| Swap used | 0 → **0** | 0 → **0** | 0 → **0** |

## CPU

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

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

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

## Get all

The schema API of a table answers all its rows : `GET /api/schema/<user>/<instance>/<database>/<table>`. Every request reads the ten rows from the database, converts them with the schema of the table and sends them as JSON. [About this API](https://docs.apimaker.dev/v4/docs/apis-all/schema-apis/auto-generated-schema-based-get-all-api.html).

### Get all : public

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

**MongoDB**

Requests / second

12,640

192,274 requests in 15 s

Latency p50

7ms

average 7.3 ms

Latency p99

17ms

max 44 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    192k requests in 15.01s, 526 MB read
    ```

**PostgreSQL**

Requests / second

12,641

188,004 requests in 15 s

Latency p50

7ms

average 7.5 ms

Latency p99

10ms

max 19 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    188k requests in 15.01s, 456 MB read
    ```

**MySQL**

Requests / second

13,748

206,778 requests in 15 s

Latency p50

7ms

average 6.8 ms

Latency p99

9ms

max 14 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    207k requests in 15.01s, 501 MB read
    ```

### Get all : both tokens

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

**MongoDB**

Requests / second

12,106

185,158 requests in 15 s

Latency p50

7ms

average 7.6 ms

Latency p99

17ms

max 42 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    185k requests in 15.01s, 506 MB read
    ```

**PostgreSQL**

Requests / second

11,913

181,979 requests in 15 s

Latency p50

8ms

average 7.7 ms

Latency p99

10ms

max 18 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    182k requests in 15.01s, 441 MB read
    ```

**MySQL**

Requests / second

12,712

192,036 requests in 15 s

Latency p50

7ms

average 7.3 ms

Latency p99

10ms

max 16 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    192k requests in 15.01s, 465 MB read
    ```

## Get all with caching

The same request on a table whose API settings say `enableCaching: true`. The first answer is kept in Redis, under a key made of who asks and what is asked ; the next requests are answered from Redis until the answer expires or something writes the table. [About this API](https://docs.apimaker.dev/v4/docs/features/automatic-caching.html).

### Get all with caching : public

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

**MongoDB**

Requests / second

43,980

658,305 requests in 15 s

Latency p50

2ms

average 1.8 ms

Latency p99

3ms

max 207 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    658k requests in 15.01s, 1.8 GB read
    ```

**PostgreSQL**

Requests / second

43,173

649,417 requests in 15 s

Latency p50

2ms

average 1.8 ms

Latency p99

3ms

max 10 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    650k requests in 15.01s, 1.58 GB read
    ```

**MySQL**

Requests / second

44,027

663,287 requests in 15 s

Latency p50

2ms

average 1.8 ms

Latency p99

3ms

max 9 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    663k requests in 15.01s, 1.61 GB read
    ```

### Get all with caching : both tokens

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

**MongoDB**

Requests / second

36,123

535,203 requests in 15 s

Latency p50

2ms

average 2.3 ms

Latency p99

4ms

max 10 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    535k requests in 15.01s, 1.46 GB read
    ```

**PostgreSQL**

Requests / second

35,403

528,689 requests in 15 s

Latency p50

2ms

average 2.3 ms

Latency p99

4ms

max 212 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    529k requests in 15.01s, 1.28 GB read
    ```

**MySQL**

Requests / second

35,915

547,580 requests in 15 s

Latency p50

2ms

average 2.2 ms

Latency p99

4ms

max 18 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    548k requests in 15.01s, 1.33 GB read
    ```

## Get all by stream

`GET …/<table>/stream` : the rows are sent while they are read from the database cursor, so a large table never sits whole in memory. [About this API](https://docs.apimaker.dev/v4/docs/apis-all/schema-apis/auto-generated-schema-based-get-all-by-stream-api.html).

### Get all by stream : public

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

**MongoDB**

Requests / second

11,898

176,800 requests in 15 s

Latency p50

8ms

average 8.0 ms

Latency p99

17ms

max 52 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    177k requests in 15.01s, 510 MB read
    ```

**PostgreSQL**

Requests / second

13,073

197,970 requests in 15 s

Latency p50

7ms

average 7.1 ms

Latency p99

9ms

max 16 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    198k requests in 15.01s, 509 MB read
    ```

**MySQL**

Requests / second

13,095

196,524 requests in 15 s

Latency p50

7ms

average 7.1 ms

Latency p99

9ms

max 218 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    197k requests in 15.01s, 505 MB read
    ```

### Get all by stream : both tokens

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

**MongoDB**

Requests / second

11,516

173,108 requests in 15 s

Latency p50

8ms

average 8.2 ms

Latency p99

18ms

max 55 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    173k requests in 15.01s, 516 MB read
    ```

**PostgreSQL**

Requests / second

12,162

184,136 requests in 15 s

Latency p50

8ms

average 7.7 ms

Latency p99

10ms

max 16 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    184k requests in 15.01s, 492 MB read
    ```

**MySQL**

Requests / second

12,340

184,543 requests in 15 s

Latency p50

8ms

average 7.6 ms

Latency p99

10ms

max 221 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    185k requests in 15.01s, 493 MB read
    ```

## Custom API calling get all

A custom API written in TypeScript, `return await g.sys.db.getAll({ instance, database, collection })`. This code is *lean* : it only reads what it is handed and asks `g.sys` for a read, so API Maker runs it in the server itself, with QuickJS, on the thread which answers the request, and the request never leaves the server. Code which needs more (a package, the time of the machine, `g.shared`, …) runs in the sandbox of the account : see the next API. [About this API](https://docs.apimaker.dev/v4/docs/apis-all/custom-apis/user-created-custom-api.html).

**The custom API (public : customers_public ; both tokens : customers)**

```typescript
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.

**MongoDB**

Requests / second

8,893

132,169 requests in 15 s

Latency p50

11ms

average 10.8 ms

Latency p99

20ms

max 45 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    132k requests in 15.01s, 361 MB read
    ```

**PostgreSQL**

Requests / second

9,176

138,881 requests in 15 s

Latency p50

10ms

average 10.3 ms

Latency p99

13ms

max 18 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    139k requests in 15.01s, 337 MB read
    ```

**MySQL**

Requests / second

9,820

147,636 requests in 15 s

Latency p50

10ms

average 9.7 ms

Latency p99

12ms

max 19 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    148k requests in 15.01s, 358 MB read
    ```

### Custom API calling get all : both tokens

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

**MongoDB**

Requests / second

8,426

127,632 requests in 15 s

Latency p50

11ms

average 11.3 ms

Latency p99

21ms

max 36 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    128k requests in 15.01s, 349 MB read
    ```

**PostgreSQL**

Requests / second

8,561

127,705 requests in 15 s

Latency p50

11ms

average 11.2 ms

Latency p99

14ms

max 19 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    128k requests in 15.01s, 310 MB read
    ```

**MySQL**

Requests / second

9,129

136,922 requests in 15 s

Latency p50

10ms

average 10.5 ms

Latency p99

13ms

max 21 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    137k requests in 15.01s, 332 MB read
    ```

## Custom API in the sandbox

The same custom API, with one line more : it reads `Date.now()`, the time of the machine, which lean code may not. So this code runs in a sandbox of the account (a container with Node.js 24) : the request goes from API Maker to a runner of the sandbox and back, and the rows are read from inside the sandbox by the core of API Maker loaded there. [About this API](https://docs.apimaker.dev/v4/docs/apis-all/custom-apis/user-created-custom-api.html).

**The custom API which runs in the sandbox**

```typescript
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.

**MongoDB**

Requests / second

7,569

113,233 requests in 15 s

Latency p50

13ms

average 12.8 ms

Latency p99

24ms

max 57 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    113k requests in 15.01s, 310 MB read
    ```

**PostgreSQL**

Requests / second

7,916

118,732 requests in 15 s

Latency p50

12ms

average 12.1 ms

Latency p99

22ms

max 33 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    119k requests in 15.01s, 288 MB read
    ```

**MySQL**

Requests / second

8,657

129,801 requests in 15 s

Latency p50

11ms

average 11.1 ms

Latency p99

20ms

max 30 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    130k requests in 15.01s, 315 MB read
    ```

## Get all with a pre hook

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

**The pre hook of SCHEMA_GET_ALL on customers_pre_hook**

```typescript
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.

**MongoDB**

Requests / second

9,279

139,353 requests in 15 s

Latency p50

10ms

average 10.3 ms

Latency p99

20ms

max 41 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    139k requests in 15.01s, 381 MB read
    ```

**PostgreSQL**

Requests / second

9,524

144,274 requests in 15 s

Latency p50

10ms

average 9.9 ms

Latency p99

13ms

max 17 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    144k requests in 15.01s, 350 MB read
    ```

**MySQL**

Requests / second

10,204

153,692 requests in 15 s

Latency p50

9ms

average 9.3 ms

Latency p99

13ms

max 20 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    154k requests in 15.01s, 373 MB read
    ```

## Get by id

One row by its primary key : `GET …/<table>/get-by-id/<id>`. [About this API](https://docs.apimaker.dev/v4/docs/apis-all/schema-apis/auto-generated-schema-based-get-by-id-api.html).

### Get by id : public

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

**MongoDB**

Requests / second

14,224

213,867 requests in 15 s

Latency p50

6ms

average 6.5 ms

Latency p99

14ms

max 38 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    214k requests in 15.01s, 127 MB read
    ```

**PostgreSQL**

Requests / second

13,571

205,599 requests in 15 s

Latency p50

7ms

average 6.8 ms

Latency p99

9ms

max 14 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    206k requests in 15.01s, 115 MB read
    ```

**MySQL**

Requests / second

14,510

218,937 requests in 15 s

Latency p50

6ms

average 6.3 ms

Latency p99

8ms

max 215 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    219k requests in 15.01s, 123 MB read
    ```

### Get by id : both tokens

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

**MongoDB**

Requests / second

13,443

202,576 requests in 15 s

Latency p50

7ms

average 6.9 ms

Latency p99

14ms

max 28 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    203k requests in 15.01s, 120 MB read
    ```

**PostgreSQL**

Requests / second

12,656

189,474 requests in 15 s

Latency p50

7ms

average 7.4 ms

Latency p99

11ms

max 18 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    190k requests in 15.01s, 106 MB read
    ```

**MySQL**

Requests / second

13,517

202,182 requests in 15 s

Latency p50

7ms

average 6.9 ms

Latency p99

9ms

max 15 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    202k requests in 15.01s, 113 MB read
    ```

## Get by id with caching

One row by its primary key, on a table with `enableCaching: true` : answered from Redis after the first request. [About this API](https://docs.apimaker.dev/v4/docs/features/automatic-caching.html).

### Get by id with caching : public

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

**MongoDB**

Requests / second

47,980

713,371 requests in 15 s

Latency p50

2ms

average 1.6 ms

Latency p99

3ms

max 9 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    713k requests in 15.01s, 425 MB read
    ```

**PostgreSQL**

Requests / second

47,888

711,782 requests in 15 s

Latency p50

2ms

average 1.6 ms

Latency p99

3ms

max 9 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    712k requests in 15.01s, 401 MB read
    ```

**MySQL**

Requests / second

48,818

731,797 requests in 15 s

Latency p50

2ms

average 1.5 ms

Latency p99

3ms

max 12 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    732k requests in 15.01s, 412 MB read
    ```

### Get by id with caching : both tokens

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

**MongoDB**

Requests / second

38,521

582,318 requests in 15 s

Latency p50

2ms

average 2.1 ms

Latency p99

4ms

max 15 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    582k requests in 15.01s, 347 MB read
    ```

**PostgreSQL**

Requests / second

38,045

574,818 requests in 15 s

Latency p50

2ms

average 2.1 ms

Latency p99

4ms

max 14 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    575k requests in 15.01s, 324 MB read
    ```

**MySQL**

Requests / second

38,544

579,232 requests in 15 s

Latency p50

2ms

average 2.1 ms

Latency p99

4ms

max 11 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    579k requests in 15.01s, 326 MB read
    ```

## Insert one row

`POST …/<table>/save-single-or-multiple` with one row of 9 columns in the body : the schema checks and converts it, the database writes it, and the saved row is answered. [About this API](https://docs.apimaker.dev/v4/docs/apis-all/schema-apis/auto-generated-schema-based-save-single-or-multiple-api.html).

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

**MongoDB**

Requests / second

5,490

82,779 requests in 15 s

Latency p50

17ms

average 17.6 ms

Latency p99

32ms

max 63 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    83k requests in 15.01s, 49.5 MB read
    ```

**PostgreSQL**

Requests / second

5,874

88,216 requests in 15 s

Latency p50

16ms

average 16.5 ms

Latency p99

19ms

max 35 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    88k requests in 15.01s, 50.2 MB read
    ```

**MySQL**

Requests / second

3,542

52,989 requests in 15 s

Latency p50

28ms

average 27.8 ms

Latency p99

38ms

max 51 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    53k requests in 15.01s, 30.2 MB read
    ```

## Custom API without a database

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

**In the server (lean code)**

**The custom API**

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

Requests / second

39,192

581,838 requests in 15 s

Latency p50

2ms

average 2.1 ms

Latency p99

4ms

max 12 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    582k requests in 15.01s, 232 MB read
    ```

**In the sandbox**

**The custom API**

```typescript
import * as T from 'types';
async function main(g: T.IAMGlobal) {
    return { message: 'Hello from the sandbox', time: Date.now() };
}
module.exports = main;
```

Requests / second

27,920

419,242 requests in 15 s

Latency p50

3ms

average 3.1 ms

Latency p99

8ms

max 211 ms

Errors

0

non-2xx, errors, timeouts

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

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

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

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

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

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

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

    419k requests in 15.01s, 173 MB read
    ```

## More connections

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

### Get all, public, by connections

**Get all, public, MongoDB : requests per second by connections**

10 connectionsp50 1 ms · p99 2 ms · 8,465

50 connectionsp50 3 ms · p99 9 ms · 11,967

100 connectionsp50 7 ms · p99 17 ms · 12,429

250 connectionsp50 19 ms · p99 31 ms · 12,311

500 connectionsp50 41 ms · p99 52 ms · 11,995

1,000 connectionsp50 84 ms · p99 95 ms · 11,850

| Connections | Requests / second | p50 | p99 | Max | Errors | Server busy | API Maker RSS |
|--:|--:|--:|--:|--:|--:|--:|--:|
| 10 | **8,465** | 1 ms | 2 ms | 7 ms | 0 | 66 % | 136 MB |
| 50 | **11,967** | 3 ms | 9 ms | 27 ms | 0 | 91 % | 140 MB |
| 100 | **12,429** | 7 ms | 17 ms | 52 ms | 0 | 95 % | 145 MB |
| 250 | **12,311** | 19 ms | 31 ms | 63 ms | 0 | 95 % | 155 MB |
| 500 | **11,995** | 41 ms | 52 ms | 78 ms | 0 | 95 % | 171 MB |
| 1,000 | **11,850** | 84 ms | 95 ms | 121 ms | 0 | 95 % | 204 MB |

### Get by id with caching, public, by connections

**Get by id with caching, public, MongoDB : requests per second by connections**

10 connectionsp50 0 ms · p99 0 ms · 17,269

50 connectionsp50 1 ms · p99 2 ms · 42,288

100 connectionsp50 2 ms · p99 3 ms · 47,361

250 connectionsp50 5 ms · p99 8 ms · 48,716

500 connectionsp50 10 ms · p99 14 ms · 49,704

1,000 connectionsp50 20 ms · p99 27 ms · 49,008

| Connections | Requests / second | p50 | p99 | Max | Errors | Server busy | API Maker RSS |
|--:|--:|--:|--:|--:|--:|--:|--:|
| 10 | **17,269** | 0 ms | 0 ms | 4 ms | 0 | 48 % | 140 MB |
| 50 | **42,288** | 1 ms | 2 ms | 12 ms | 0 | 85 % | 140 MB |
| 100 | **47,361** | 2 ms | 3 ms | 11 ms | 0 | 87 % | 144 MB |
| 250 | **48,716** | 5 ms | 8 ms | 17 ms | 0 | 89 % | 155 MB |
| 500 | **49,704** | 10 ms | 14 ms | 34 ms | 0 | 90 % | 166 MB |
| 1,000 | **49,008** | 20 ms | 27 ms | 241 ms | 0 | 89 % | 194 MB |

## Questions

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

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

### How much memory does API Maker use ?

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

### Do the two tokens slow the APIs down ?

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

### What does a pre hook cost ?

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

### Can I run these benchmarks myself ?

Yes : [How API Maker is benchmarked](https://docs.apimaker.dev/v4/docs/benchmarks/methodology.html) gives the dataset, the settings of every API and the exact autocannon commands.
