2.73.13 · 43/44 aspects · host03 AMD EPYC-Milan, 12 vCPU, 23 GiB

testdb vs SQLite, Redis, MySQL, and PostgreSQL

Same 50,000 INSERT then 50,000 GET keyed workload, localhost, 2026-08-31T07:10:31Z. Veloce chatty waits for each ack (8 TCP clients) — that row stays 1 RTT. Async mixed is a separate surface: 16 clients send 85% GET / 15% INSERT without wait-for-line, then drain — still not chatty. Veloce pipelined INSERT is MINSERT×500 sent then drained — vs Redis --pipe of many HSETs and vs MySQL/Postgres multi-VALUES×500. Pipelined GET is MGET×500 vs Redis HMGET vs SQL SELECT … WHERE k IN (500 keys). Extra rows: local testdb UDS (still one round-trip per op, not SPIRE agent dial) and in-process TestDb (fair vs SQLite GET; not a replacement for TCP). SQLite is in-process WAL (one SELECT per get). We do not compare batched MGET to per-row SELECT. Rows labeled two-node Enterprise are the 2026-08-31 WAN replica chatty GET and pipe MGET×50 sample (2k ops, GET-only — INSERT shows as a dash on purpose) plus a replica INSERT+GET forward+mirror row (SET ROLE reader). Labels stay chatty vs pipe vs mux vs WAN. SQL pipe MINSERT is the CRLF text path; packed ISAM MINSERT is a different surface, not a regression of the same codec. Not a replacement for the localhost 50k ISAM/SQL vs MySQL/Redis suite above.

EngineSurfaceINSERT ops/sGET ops/sGET p50
VeloceDB SQLTCP 2143 chatty (8 clients)14,93515,761444 µs
VeloceDB ISAMTCP 1583 chatty (8 clients)15,69915,905447 µs
VeloceDB SQLTCP 2143 MINSERT×500 / MGET×500 pipelined401,4375,009,7320 µs
VeloceDB ISAMTCP 1583 MINSERT×500 / MGET×500 pipelined12,405,4416,660,0300 µs
SQLitein-process WAL file351,552166,1655 µs
Redis 7.4.9HASH --pipe / HMGET×500 TCP 26379578,06770,73513 µs
VeloceDB ISAMUDS chatty (8 clients, AF_UNIX)17,37716,982412 µs
VeloceDBin-process recno table + page WAL (no TCP)970,3702,427,4130 µs
MySQL 8.4.10127.0.0.1:3306 InnoDB INSERT×500 / SELECT IN×500109,644113,6339 µs
PostgreSQL 18.6127.0.0.1:5432 INSERT×500 / SELECT IN×500156,309174,6896 µs
VeloceDB SQLTCP 2143 async mixed 85/15 GET/INSERT x16 (not chatty)433,6172,480,4760 µs
VeloceDB ISAMTCP 1583 async mixed 85/15 GET/INSERT x16 (not chatty)141,636810,2191 µs
VeloceDB SQL (two-node Enterprise)WAN replica GET host03→host02:2143 chatty 1 RTT (GET-only, 2k ops)—4,745201 µs
VeloceDB SQL (two-node Enterprise)WAN replica pipe MGET×50 host03→host02:2143 (GET-only, not chatty, 2k ops)—154,7716 µs
VeloceDB SQL (two-node Enterprise)WAN replica INSERT+GET host03→host02:2143 SET ROLE reader (forward+mirror, 200 ops)1,1853,915250 µs

Read the fair column

Pipelined Veloce ISAM MGET lands at 6,660,030/s next to Redis HMGET at 70,735/s. Pipelined ISAM MINSERT is 12,405,441/s vs Redis --pipe at 578,067/s. Chatty Veloce is the round-trip tax, not a different store.

SQLite is not a network server

351,552 INSERT/s is in-process WAL with no TCP. The extra Veloce embed row is the same TestDb recno table in-process — fair vs SQLite GET, not a replacement for the TCP numbers.

What we did not fake

Oracle XE / 23ai Free is not installed (license click-through, no Ubuntu package). Native C++/mmap WAL is labeled EXTERNAL in SHOW WAL. Redis PING in the harness is a redis-cli spawn, not the Redis RTT. MySQL and PostgreSQL rows are batched SQL (500), labeled as such — not per-row SELECT vs MGET.

Overlay lockstep analog

Pack 17 leftover: 173 onion nodes, 74 overlay jobs, 37 toolbar JSON rows. Not a Lighthouse letter. Not a same-box testdb rerun. Live benches stay 2.73.13 above.