KalamDB Benchmark Report

Performance analysis — v0.3.0-alpha2
http://localhost:8080 2026-02-24T18:42:01.364879+00:00 100 iters 5 warmup 10 concurrency
37
Total Benchmarks
35
Passed
2
Failed
719.24s
Total Duration

Latency by Operation (µs)

Throughput (ops/sec)

Avg Latency by Category (µs)

Detailed Results
Status Benchmark Category Description Iters Mean P50 P95 P99 Min Max Ops/sec Total Verdict vs Prev
PASScreate_tableDDLCREATE TABLE with 3 columns10051.0ms50.1ms77.6ms80.4ms24.1ms80.9ms205.10s🟢 Excellent↓36% slower
PASSdrop_tableDDLDROP TABLE on a previously created table10049.9ms49.8ms55.4ms56.2ms43.2ms57.0ms204.99s🟢 Excellent↓18% slower
PASSsingle_insertInsertINSERT a single row into a table100280µs268µs387µs426µs231µs475µs3.6K28.0ms🟢 Excellent↓16% slower
PASSbulk_insertInsertINSERT 50 rows in a single statement100649µs613µs832µs954µs560µs956µs1.5K64.9ms🟢 Excellent↓9% slower
PASSselect_allSelectSELECT * from a 200-row table1001.1ms1.1ms1.4ms1.6ms1.0ms1.8ms872114.7ms🟢 Excellent↓8% slower
PASSselect_by_filterSelectSELECT with WHERE clause on a 200-row table100466µs434µs639µs686µs403µs718µs2.1K46.6ms🟢 Excellent↓7% slower
PASSselect_countSelectSELECT COUNT(*) on a 200-row table100867µs823µs1.1ms1.2ms791µs1.2ms1.2K86.7ms🟢 Excellent↓6% slower
PASSselect_order_by_limitSelectSELECT with ORDER BY + LIMIT 10 on a 200-row table1001.1ms1.1ms1.4ms1.6ms1.0ms1.7ms882113.4ms🟢 Excellent↓8% slower
PASSsingle_updateUpdateUPDATE a single row by filter condition100545µs492µs814µs932µs453µs947µs1.8K54.5ms🟢 Excellent↓13% slower
PASSsingle_deleteDeleteDELETE a single row by filter condition100441µs411µs565µs753µs380µs842µs2.3K44.1ms🟢 Excellent~ 452µs prior
PASSconcurrent_insertConcurrentN concurrent INSERT operations in parallel (N = concurrency setting)100615µs596µs660µs881µs524µs1.9ms1.6K61.5ms🟢 Excellent~ 615µs prior
PASSconcurrent_selectConcurrentN concurrent SELECT operations in parallel (N = concurrency setting)100923µs916µs1.0ms1.1ms793µs1.4ms1.1K92.3ms🟢 Excellent↑5% faster
PASSpoint_lookupSelectSELECT by primary key from a 10K-row table (single row lookup)100436µs414µs553µs576µs371µs596µs2.3K43.6ms🟢 Excellent↑9% faster
PASSaggregate_querySelectGROUP BY + SUM/AVG/COUNT on a 10K-row table (analytical query performance)10037.8ms37.3ms40.0ms54.2ms34.8ms70.0ms263.78s🔴 Slow~ 36665µs prior
PASSmulti_table_joinSelectSELECT with subquery across two tables (200 customers, 1000 orders)1004.0ms3.9ms4.6ms4.8ms3.7ms4.9ms251399.0ms🟢 Excellent↓6% slower
PASSlarge_payload_insertInsertINSERT rows with ~4KB TEXT payloads (serialization + storage throughput)100893µs868µs1.1ms1.2ms810µs1.2ms1.1K89.3ms🟢 Excellent↓6% slower
PASSwide_column_insertInsertINSERT into a 20-column table (wide schema overhead)100639µs609µs803µs848µs566µs978µs1.6K63.9ms🟢 Excellent↓8% slower
PASSbulk_deleteDeleteDELETE 100 rows at once with a range filter (bulk deletion)100176.3ms173.8ms193.3ms194.2ms151.7ms194.9ms617.63s🟡 Acceptable↓4% slower
PASSsequential_crudDMLINSERT → UPDATE → SELECT → DELETE full DML lifecycle per iteration1001.9ms1.8ms2.4ms2.8ms1.6ms3.0ms518193.1ms🟢 Excellent~ 1907µs prior
PASSalter_tableDDLALTER TABLE ADD COLUMN + DROP COLUMN (schema evolution latency)1002.0ms1.8ms2.3ms2.8ms1.5ms14.5ms510196.1ms🟢 Excellent↑3% faster
PASSconcurrent_updateConcurrentN concurrent UPDATE operations on the same table (write contention test)1002.1ms2.0ms2.8ms3.3ms1.1ms5.7ms487205.4ms🟢 Excellent~ 2003µs prior
PASSconcurrent_mixed_dmlConcurrentConcurrent INSERT + UPDATE + DELETE on the same table (multi-op contention)1003.8ms3.8ms4.7ms4.8ms2.7ms4.9ms262381.3ms🟢 Excellent↓9% slower
PASSnamespace_isolationConcurrentConcurrent queries across 5 different namespaces (isolation test)1002.1ms2.1ms2.3ms2.7ms1.7ms3.0ms482207.4ms🟢 Excellent↓6% slower
PASSsubscribe_initial_loadSubscribeSubscribe to a 1000-row user table and receive the full initial data batch10010.8ms10.5ms14.8ms15.6ms9.4ms15.7ms931.08s🟢 Excellent↓10% slower
PASSsubscribe_change_latencySubscribeLatency from INSERT to subscriber receiving the change notification1005.02s5.02s5.03s5.04s5.01s5.05s0501.81s🔴 Slow~ 5014269µs prior
PASSreconnect_subscribeSubscribeDisconnect and re-subscribe to a user table (reconnection overhead)10016.4ms15.9ms20.5ms22.4ms13.6ms22.6ms611.64s🟢 Excellent↓23% slower
FAILflushed_parquet_query
Warmup failed: Expected >= 200000 rows, got 0
StorageSELECT from a shared table with 20 flushed Parquet files (200K rows)00µs0µs0µs0µs0µs0µs00µs⛔ Failed
PASSconcurrent_subscribersLoadN WebSocket live-query subscribers receiving changes from concurrent writes1001.52s1.52s1.53s1.54s1.50s1.54s1152.16s🟢 Excellent~ 1510244µs prior
PASSconcurrent_publishersLoadN concurrent INSERTs into a topic-sourced table (measures publish overhead)100759µs756µs863µs929µs588µs961µs1.3K75.9ms🟢 Excellent↑4% faster
PASSconcurrent_consumersLoadN concurrent topic CONSUME calls pulling messages in parallel100628µs626µs689µs723µs552µs760µs1.6K62.8ms🟢 Excellent↓7% slower
PASSsql_1k_concurrentLoad1000 concurrent SQL SELECT queries at once (RPS degradation test)100261.7ms249.1ms325.4ms372.6ms226.5ms474.8ms426.17s🟢 Excellent↓24% slower
PASScreate_userLoadCREATE USER (auth subsystem stress test)1001.7ms1.7ms2.0ms2.2ms1.5ms2.3ms585170.9ms🟢 Excellent↓6% slower
PASSdrop_userLoadDROP USER (auth subsystem teardown stress test)100523µs500µs753µs908µs311µs1.3ms1.9K52.3ms🟢 Excellent↓14% slower
PASSconnection_stormLoadN simultaneous login + SQL + cycles (connection setup overhead)1004.8ms4.6ms5.4ms11.3ms3.6ms19.8ms209478.8ms🟢 Excellent↓7% slower
PASSmixed_read_writeLoad50/50 concurrent reads + writes on same table (contention test)1003.0ms3.0ms4.0ms4.5ms1.7ms5.7ms330302.8ms🟢 Excellent↓5% slower
PASSwide_fanout_queryLoadN concurrent large-result-set SELECTs (serialization + memory pressure)10012.6ms12.2ms14.5ms15.8ms10.3ms28.1ms791.26s🟢 Excellent↓34% slower
FAILsubscriber_scale
Iteration 0 failed: Single WS target (ws://localhost:8080/v1/ws) is likely capped by local ephemeral ports near ~32K. Use --urls with multiple endpoints (example: --urls http://127.0.0.1:8080,http://127.0.0.2:8080,http://127.0.0.3:8080,http://127.0.0.4:8080), or set KALAMDB_ALLOW_SINGLE_WS_TARGET=1 to force this run.
ScaleProgressive subscriber scale test (up to --max-subscribers, default 100K)00µs0µs0µs0µs0µs0µs00µs⛔ Failed