Benchmarks

Measured against the tools fleets use today

Four standard benchmarks on one 4-vCPU machine, one system at a time, every competitor at its vendor defaults. The scripts and raw results are public, so you can rerun every number on this page.

MCAP to queryable

158×

faster than Foxglove’s open-source MCAP toolchain

211 MB/s vs 1.3 MB/s · 86× rosbags · 89% of the speed of a raw read that decodes nothing

TSBS ingest

1.7×

QuestDB’s ingest rate, every row queryable on arrival

622K vs 373K rows/s · 17.3M rows, official TSBS loaders

TSBS queries

1.8×

faster than QuestDB across the 10 TSBS DevOps queries

16.1 ms vs 29.7 ms geometric-mean p50 · fastest on 7 of 10

Write to queryable

2.6×

lower p99 than QuestDB while loading 100K rows/s

14.7 ms vs 38.4 ms from write to visible in SQL

01 · MCAP to queryable

Robot recordings, queryable 158× faster

24 rosbag2-style ROS 2 recordings from a 24-robot fleet simulator, 465 MB and 3.28M messages: joint states, IMU, odometry, laser scans, battery, camera frames, logs and diagnostics in zstd-compressed MCAP. Queryable means every message is decoded into typed columns. The Python tools build one DataFrame per topic; Brewric builds its indexed tables and a camera-frame index. The official mcap Rust crate iterating messages without decoding them is the ceiling: Brewric reaches 89% of it while decoding everything.

MCAP to queryableMB/s on one core · higher is better
  • Brewric211
  • Raw read, no decoding237
  • rosbags, Python2.4
  • Foxglove mcap, Python1.3

The Python libraries are single-threaded, so they are compared with Brewric on one thread. With 4 threads Brewric reaches 481 MB/s.

ToolThreadsMB/sMessages/s
mcap Rust crate, raw read without decoding4905.36,389,177
Brewric indexer, in-process4480.93,394,001
mcap Rust crate, raw read without decoding1236.51,669,223
Brewric indexer, in-process1210.71,487,041
Brewric over HTTP (PUT /v1/recordings)–67.7478,045
Python mcap 1.6.0, raw read without decoding111.278,771
rosbags 0.11.9, Python12.417,282
Foxglove mcap 1.6.0 + mcap-ros2-support 0.6.0, Python11.39,426

02 · TSBS ingest

622K rows a second, queryable on arrival

TSBS DevOps cpu-only: 1,000 hosts over 2 days at 10-second intervals, 17.3M rows. Each database’s official TSBS loader runs with 4 workers and batches of 10,000. Brewric is loaded twice: with the InfluxDB loader over HTTP, as InfluxDB 3 is, and with the QuestDB loader over ILP/TCP, as QuestDB is. Until queryable also counts the time until count(*) returns every row.

TSBS ingestrows/s · higher is better
  • Brewric, ILP over TCP622K
  • Brewric, HTTP565K
  • QuestDB373K
  • ClickHouse146K
  • TimescaleDB136K
  • InfluxDB 3 Core40K

InfluxDB 3 acknowledges a write after its WAL flush (1 s by default), so with 4 workers its ingest is bound by client concurrency.

SystemRows/s (TSBS loader)Rows/s until queryable
Brewric 0.1.0, ILP over TCP622,217622,209
Brewric 0.1.0565,398565,390
QuestDB 10.1.0373,140365,850
ClickHouse 26.10.3.7146,434146,434
TimescaleDB 2.31.0136,012136,012
InfluxDB 3 Core 3.12.240,00340,003

03 · TSBS queries

Fastest on 7 of the 10 TSBS query types

The 10 TSBS DevOps queries run with the same seeded parameters for every system: 2 warm-up sets, then 10 sets × 2 repetitions, timed client-side over one persistent connection with no result caches. Every system’s results are cross-checked against the others. TimescaleDB is faster on two single-host queries and on groupby-orderby-limit.

TSBS DevOps queriesgeometric-mean p50, ms · lower is better
  • Brewric16.1
  • QuestDB29.7
  • TimescaleDB34.7
  • ClickHouse59.0
  • InfluxDB 3 Core562

The InfluxDB bar is cut at 70 ms.

p50, msBrewricQuestDBTimescaleDBClickHouseInfluxDB 3
single-groupby-1-1-13.445.012.7015.030.7
single-groupby-1-1-124.5410.413.915.7470
single-groupby-5-1-15.376.321.8515.231.2
cpu-max-all-16.236.966.9320.7316
double-groupby-176.52036801051,926
double-groupby-all1613701,2555642,236
high-cpu-13.8224.49.5516.1663
high-cpu-all3536829686602,674
groupby-orderby-limit47.859.97.5686.415,517
lastpoint2.913.1487.8129189
geometric mean16.129.734.759.0562

04 · Write to queryable

14.7 ms from write to SQL, at the 99th percentile

While a background TSBS load writes 100,000 rows a second, a marker row is written every 100 ms, 300 per write path, and timed from sending the write until a SQL query returns it. The chart shows each database’s fastest write path; the table has all of them.

Write to queryable under loadp99, ms · lower is better
  • Brewric14.7
  • QuestDB38.4
  • ClickHouse45.0
  • TimescaleDB191
  • InfluxDB 3 Core1,230

The InfluxDB bar is cut at 200 ms.

System and write pathp50 msp99 msWrite ack p50 ms
Brewric 0.1.0: /write line protocol3.5114.70.95
QuestDB 10.1.0: ILP over HTTP (/write)8.8038.41.47
ClickHouse 26.10.3.7: INSERT (async_insert=0)15.345.07.96
ClickHouse 26.10.3.7: INSERT (async_insert=1, wait_for_async_insert=1)75.212567.3
TimescaleDB 2.31.0: INSERT (autocommit)8.781917.65
InfluxDB 3 Core 3.12.2: /api/v3/write_lp?no_sync=true7301,2300.80
InfluxDB 3 Core 3.12.2: /api/v3/write_lp (default: ack after WAL flush)7561,250838

Reproduce

Run every number yourself

You need Linux x86-64 with Docker and Python 3, 4 vCPU and 16 GB of RAM. The MCAP run takes about 10 minutes. The TSBS suite starts QuestDB, ClickHouse, InfluxDB 3 and TimescaleDB one at a time and takes about 2 hours. Each run prints your numbers next to the ones on this page.

Brewric runs from a prebuilt image, ghcr.io/arnavborkar/brewricd:0.1.0, and the other systems from their official images, pinned by digest. QUICK=1 checks the setup in a few minutes.

Scripts and raw results on GitHub
terminal
$ git clone https://github.com/Brewric/benchmarks$ cd benchmarks$ ./reproduce.sh mcap     # ~10 min: MCAP to queryable$ ./reproduce.sh tsbs     # ~2 h: ingest, queries, freshness$ ./reproduce.sh report   # your numbers next to these

Methodology

Same machine, same limits, same client

Measured October 2026 on a 4 vCPU Intel Xeon (2.8 GHz) VM with 15.7 GiB of RAM, Linux 6.18. Versions: Brewric 0.1.0, QuestDB 10.1.0, ClickHouse 26.10.3.7, InfluxDB 3 Core 3.12.2, TimescaleDB 2.31.0 (PostgreSQL 17.11), mcap 1.6.0 with mcap-ros2-support 0.6.0, rosbags 0.11.9, TSBS at commit 8323e59c7402.

Running Physical AI in production?

Talk to an engineer