Benchmark and comparison: QuestDB vs. InfluxDB v1/v2

Benchmarks and an overview of InfluxDB versus QuestDB to compare features, functionality, performance, and ease of use.

Andrey Pechkurov
Andrey PechkurovQuestDB Team

InfluxDB is one of the most widely used time-series databases. InfluxData released it in 2013 for metrics and monitoring, with Telegraf as the collector and a measurement-and-tag model that made dashboards over server and application metrics easy. v1 and v2 run on the TSM engine; InfluxDB 3 is a ground-up rewrite with a different storage and query engine and has its own comparison. QuestDB is the leading open-source time-series database for streaming ingestion and low-latency queries. It came out of trading floors and sits on the critical path in trading, defense, energy and robotics systems, where throughput is high and data cannot be lost.

The difference comes down to what happens if data is lost. InfluxDB is built for monitoring, where data gets downsampled over time and a few lost points don't matter. QuestDB is for the data that cannot be lost: the full-fidelity operational record, with the newest state available in milliseconds, years of history behind it, and one SQL engine across all of it.

Choose InfluxDB for infrastructure monitoring, Telegraf pipelines and dashboards over a known set of series. Choose QuestDB when the data is mission critical.

This article runs InfluxDB v1.12.4, InfluxDB v2.9.1 and QuestDB 9.3.3 through the same TSBS workload on the same machine, publishes every result, and shows where the architectural difference starts to matter.

Key results: QuestDB ingests 7 to 8.6 million rows per second at every cardinality we tested, while InfluxDB falls from 1.1 million to under 240K as hosts increase. InfluxDB v1 is faster on the narrowest single-host queries; QuestDB is faster on every query that aggregates across hosts, by a wide margin.

Info

These benchmarks predate QWP, the binary protocol we shipped in QuestDB 10.0 in August 2026. Ingestion here runs over InfluxDB Line Protocol, a text format the server parses row by row. QWP sends binary columns instead, up to 3.6x faster over a network, and it streams reads back as Arrow. Read the QuestDB figures below as a floor.

Monitoring-first versus record-first

InfluxDB earned its position by making monitoring easy. The measurement-and-tag model, retention policies and the Telegraf ecosystem fit well when the series are known in advance, most questions stay close to one metric, and old data can be rolled up or expired.

QuestDB is for the other case: systems on the critical path, where every event matters, the number of entities keeps growing, and the same data is used for what is happening right now, for calculations across devices or symbols, and for years of history. Dimensions stay typed columns instead of becoming part of a series key, standard SQL joins and aggregates across them, and one engine covers all of it.

Introduction to InfluxDB and QuestDB

QuestDB is an open-source time-series database licensed under Apache License 2.0. Written in low-latency (Zero-GC) Java and C++, with Rust for the distributed layer of QuestDB Enterprise, it is designed for low-latency, high-throughput ingestion and fast analytical queries using standard SQL. QuestDB uses a columnar storage model where all time series live in a single table structure, avoiding per-series overhead.

InfluxDB is a time-series database developed by InfluxData. The open-source versions (v1 under MIT, v2 OSS under proprietary license) are written in Go. InfluxDB uses a measurement-based data model where each unique combination of tags creates a separate series with its own storage structure.

AspectQuestDBInfluxDB
LicenseApache 2.0v1: MIT, v2 OSS: Proprietary
ImplementationJava, C++, RustGo
Query languageStandard SQLInfluxQL, Flux
Data modelRelational (tables + rows)Measurement-based (series)
Ingestion protocolsQWP (binary), ILP, PostgreSQL wire, HTTPILP, HTTP API
High cardinalityNo performance impactPerformance degrades

Performance benchmarks

We use the open-source, industry-standard Time Series Benchmark Suite (TSBS) for all benchmarks, which supports InfluxDB (v1 and v2) and QuestDB out of the box. TSBS was created by Timescale and has seen no real development upstream since 2023, so we maintain our own fork.

Hardware: AWS EC2 r8a.8xlarge (32 vCPU, 256 GB RAM, AMD EPYC), GP3 EBS storage (20,000 IOPS, 1 GB/s throughput)

Software: Ubuntu 22.04, InfluxDB v1.12.4, InfluxDB v2.9.1, QuestDB 9.3.3, all with default configurations.

Measured: InfluxDB v1.12.4 and v2.9.1, benchmarked August 2026. QuestDB 9.3.3, on the same r8a.8xlarge instance. New benchmarks on QuestDB 10.0 are coming.

Core allocation: the TSBS client and the database run on the same instance with no CPU pinning.

Query statistic: each figure is the median latency within a run, averaged over 3 runs, with a warm query cache.

Ingestion benchmark

We test a cpu-only scenario with two days of CPU data for various numbers of simulated hosts (1K, 4K, 100K, and 1M). This tests how each database handles increasing data volumes and cardinality.

We start at 1,000 hosts. Smaller datasets finish in under a second on the faster engines, where setup cost dominates and the result stops measuring throughput.

In time-series databases, high cardinality refers to having many unique values in indexed columns, for example millions of unique symbols, account IDs, or trading venues. More hosts in this benchmark means higher cardinality.

Example commands:

$ ./tsbs_generate_data --use-case="cpu-only" --seed=123 --scale=4000 \
--timestamp-start="2016-01-01T00:00:00Z" \
--timestamp-end="2016-01-03T00:00:00Z" \
--log-interval="10s" --format="influx" > /tmp/influx_data
$ ./tsbs_load_influx --db-name=benchmark --file=/tmp/influx_data \
--urls=http://localhost:8086 --workers=32

The same data, seed and worker count against QuestDB:

$ ./tsbs_generate_data --use-case="cpu-only" --seed=123 --scale=4000 \
--timestamp-start="2016-01-01T00:00:00Z" \
--timestamp-end="2016-01-03T00:00:00Z" \
--log-interval="10s" --format="questdb" > /tmp/questdb_data
$ ./tsbs_load_questdb --file=/tmp/questdb_data --workers=32

The results for ingestion with 32 workers:

↑ Higher is better

8.6M

QuestDB peak rows/sec, at 100K hosts

1.1M

InfluxDB v1 peak rows/sec, at 1K hosts

618K

InfluxDB v2 peak rows/sec, at 1K hosts

ScaleInfluxDB v1.12.4InfluxDB v2.9.1QuestDBQuestDB vs v1QuestDB vs v2
1,000 hosts1.14M rows/sec618K rows/sec7.77M rows/sec6.8x faster12.6x faster
4,000 hosts856K rows/sec503K rows/sec7.96M rows/sec9.3x faster15.8x faster
100,000 hosts541K rows/sec378K rows/sec8.59M rows/sec15.9x faster22.7x faster
1,000,000 hosts237K rows/sec210K rows/sec7.14M rows/sec30.2x faster34.0x faster

Key observations:

  • QuestDB holds between 7.1M and 8.6M rows/sec from 1,000 hosts to 1M
  • InfluxDB v1 falls from 1.1M to 237K rows/sec over the same range, and v2 from 618K to 210K

Why does cardinality affect InfluxDB?

The performance gap widens with scale because of how each database handles cardinality. InfluxDB creates a separate TSM (Time-Structured Merge) tree for each unique series. At 100,000 hosts with 10 metrics each, that's 1,000,000 separate storage structures to maintain, index, and compact, which explains the throughput degradation.

QuestDB stores all data in a single columnar table regardless of cardinality. Adding more hosts simply adds more rows to the same structure, and throughput stays between 7.14M and 8.59M rows/sec from 1,000 hosts to 1M while InfluxDB v1 falls by almost 5x over the same range.

Query performance

Queries next. The TSBS suite has six families:

  • single-groupby: Aggregate CPU metrics for random hosts over specified time ranges
  • double-groupby: Aggregate across ALL hosts, grouped by host and time intervals
  • cpu-max-all: Maximum of all ten CPU metrics across 1, 8 or 32 hosts
  • high-cpu-1 and high-cpu-all: Hosts with CPU utilization above a threshold, for one host and for the full table
  • lastpoint: The most recent reading for every host
  • groupby-orderby-limit: Top-N aggregation over a time range

All queries target two days of 4000 emulated host data.

To run the benchmark:

$ ./tsbs_generate_queries --use-case="devops" --seed=123 --scale=4000 \
--timestamp-start="2016-01-01T00:00:00Z" \
--timestamp-end="2016-01-03T00:00:00Z" \
--queries=1000 --query-type="single-groupby-1-1-1" \
--format="influx" > /tmp/influx_query
$ ./tsbs_run_queries_influx --file=/tmp/influx_query \
--db-name=benchmark --workers=1

And against QuestDB:

$ ./tsbs_generate_queries --use-case="devops" --seed=123 --scale=4000 \
--timestamp-start="2016-01-01T00:00:00Z" \
--timestamp-end="2016-01-03T00:00:00Z" \
--queries=1000 --query-type="single-groupby-1-1-1" \
--format="questdb" > /tmp/questdb_query
$ ./tsbs_run_queries_questdb --file=/tmp/questdb_query --workers=1

Single-groupby queries

Query names encode metrics, hosts and hours: 5-8-1 is five metrics, eight hosts, one hour. Every query on this page is described in the appendix.

↓ Lower is better

Query format: metrics-hosts-hours · median of 3 runs, warm cache

1.9 ms

QuestDB, single-groupby-5-1-12

7.3 ms

InfluxDB v1, single-groupby-5-1-12

11.1 ms

InfluxDB v2, single-groupby-5-1-12

QueryInfluxDB v1.12.4InfluxDB v2.9.1QuestDBBest
single-groupby-1-1-10.31 ms0.59 ms0.41 msInfluxDB v1
single-groupby-1-1-122.00 ms3.03 ms1.43 msQuestDB
single-groupby-1-8-10.88 ms1.44 ms0.91 msInfluxDB v1
single-groupby-5-1-10.93 ms1.48 ms0.60 msQuestDB
single-groupby-5-1-127.31 ms11.05 ms1.94 msQuestDB
single-groupby-5-8-12.81 ms3.73 ms1.17 msQuestDB

Double-groupby queries

↓ Lower is better

Aggregates across ALL hosts, grouped by host and 1-hour intervals · median of 3 runs, warm cache

56 ms

QuestDB, double-groupby-all

8.6 s

InfluxDB v1, double-groupby-all

8.9 s

InfluxDB v2, double-groupby-all

These queries aggregate across ALL hosts, grouped by host and 1-hour intervals.

QueryInfluxDB v1.12.4InfluxDB v2.9.1QuestDBQuestDB vs v1QuestDB vs v2
double-groupby-1985 ms1,037 ms32.20 ms30.6x faster32.2x faster
double-groupby-54,431 ms4,561 ms41.20 ms108x faster111x faster
double-groupby-all8,649 ms8,928 ms56.10 ms154x faster159x faster

CPU-max-all and high-cpu queries

Filtered scans that take the maximum of all ten CPU metrics across 1, 8 and 32 hosts, plus the single-host variant of the high-cpu threshold scan.

↓ Lower is better

Filtered scans over 1, 8 and 32 hosts

5.4 ms

QuestDB, cpu-max-all-32-24

14.7 ms

InfluxDB v1, cpu-max-all-32-24

18.6 ms

InfluxDB v2, cpu-max-all-32-24

QueryInfluxDB v1.12.4InfluxDB v2.9.1QuestDBBest
cpu-max-all-11.47 ms1.67 ms1.48 mslevel with v1
cpu-max-all-82.17 ms2.67 ms5.40 msInfluxDB v1 2.5x
cpu-max-all-32-2414.70 ms18.60 ms5.37 msQuestDB 2.7x / 3.5x
high-cpu-12.15 ms2.39 ms3.31 msInfluxDB v1 1.5x

InfluxDB wins the narrow scans and QuestDB wins the wide ones. Reading a handful of series is cheap when each one is stored separately; the position reverses once a query has to touch 32 hosts at 24 hours.

Lastpoint and top-N queries

↓ Lower is better

Latest reading per host, and top-N aggregation

1.7 ms

QuestDB, lastpoint

302 ms

InfluxDB v1, lastpoint

808 ms

InfluxDB v2, lastpoint

QueryInfluxDB v1.12.4InfluxDB v2.9.1QuestDBBest
lastpoint302.10 ms808.20 ms1.70 msQuestDB 178x / 475x
groupby-orderby-limit749.19 ms1,234.43 ms16.76 msQuestDB 45x / 74x

lastpoint fetches the most recent reading for every host, which is one of the most common time-series operations there is. QuestDB answers it in 1.7 ms with LATEST ON; InfluxDB takes 302 ms on v1 and 808 ms on v2, because it has to open every series to find the end of each one.

Heavy queries

high-cpu-all query latency · ↓ Lower is better

Full table scan finding hosts with CPU utilization above threshold · median of 3 runs, warm cache

1.03 s

QuestDB, high-cpu-all

15.4 s

InfluxDB v1, high-cpu-all

16.1 s

InfluxDB v2, high-cpu-all

Full table scan finding hosts with CPU utilization above threshold.

QueryInfluxDB v1.12.4InfluxDB v2.9.1QuestDBQuestDB vs v1QuestDB vs v2
high-cpu-all15,430.5 ms16,050.2 ms*1,027.50 ms15.0x faster15.6x faster

* At roughly 16 seconds per query, InfluxDB v2.9.1 ran 50 queries for this type where InfluxDB v1.12.4 and QuestDB each ran 1,000. The full count would not have finished, so the v2 figure here rests on fewer samples than the rest of the table.

NB: QuestDB 10.0 was measured in the same run. Over QWP, its new binary protocol, it answers high-cpu-all in 672.60 ms. The tables on this page stay on 9.3.3, the version the whole suite was run against; full 10.0 results will come with our next benchmark suite rather than a TSBS re-run.

Explaining query performance

QuestDB outperforms both InfluxDB versions on analytical queries. Every aggregation across hosts completes in under 60 ms on QuestDB and takes one to nine seconds on InfluxDB v1 and v2. InfluxDB v1 has the edge on four narrow queries, two short single-metric aggregations plus cpu-max-all-8 and high-cpu-1, by up to 2.5x. InfluxDB has addressed the heavy-aggregation gap in InfluxDB 3 Core, which is several times faster than v1 and v2 on double-groupby and the full-table scan, though slower on the narrow queries.

Double group by queries

Aggregate across both time and host.

These scan every host for the whole window and aggregate by host and hour. QuestDB reads only the columns it needs from the partition files and aggregates them across all cores with SIMD, so adding metrics adds little. InfluxDB has to open and merge one series per host per metric, so its cost grows with the number of metrics.

Single group by queries

Simple aggregation on metrics for specific hosts over time ranges.

Reading one field for one host over one hour is cheap when every field is its own series, which is why InfluxDB v1 edges the two shortest queries. As soon as a query touches more metrics, hosts or hours, QuestDB's columnar scan pulls ahead, and the margin grows with the amount of data touched.

Heavy analytical queries (high-cpu-all)

Full table scan finding hosts above CPU threshold.

A full-table scan with a filter on one metric. QuestDB evaluates the filter with a JIT-compiled predicate across all partitions in parallel; InfluxDB has to walk every series to apply it.

What are the data models used in InfluxDB and QuestDB?

The data model is where the performance difference starts. InfluxDB uses a measurement-based model optimized for tagged time series, while QuestDB uses a relational model that stores all data in tables.

InfluxDB: Measurement-based model

InfluxDB organizes data around measurements, tags, and fields:

measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100399000
--------------- --------------- --------------------- -------------------
| | | |
Measurement Tags Fields Timestamp
  • Measurement: Similar to a table name, groups related data points
  • Tags: Indexed key-value pairs (strings only) used for filtering and grouping
  • Fields: Non-indexed values containing the actual metrics (floats, integers, strings, booleans)
  • Timestamp: Nanosecond-precision time

A series in InfluxDB is defined as a unique combination of measurement + tagset. For example:

trades,symbol=AAPL,exchange=NYSE price=185.50,size=100 1705311000123456000
trades,symbol=MSFT,exchange=NASDAQ price=390.25,size=250 1705311000123789000

These two lines create two separate series because their tagsets differ. Each unique series gets its own TSM storage structure. This is why high-cardinality workloads (many unique tag combinations) degrade InfluxDB performance: thousands of unique symbol values means thousands of separate series to maintain.

QuestDB: Relational model

QuestDB uses a standard relational model where data lives in tables with typed columns:

CREATE TABLE trades (
timestamp TIMESTAMP,
symbol SYMBOL, -- Dictionary string (similar to InfluxDB tags)
exchange SYMBOL,
side SYMBOL,
price DOUBLE,
size DOUBLE
) TIMESTAMP(timestamp) PARTITION BY DAY;

Market data in QuestDB is simply rows in a table:

timestampsymbolexchangesidepricesize
2024-01-15T09:30:00.123456ZAAPLNYSEbuy185.50100
2024-01-15T09:30:00.123789ZMSFTNASDAQsell390.25250

Adding new symbols or exchanges doesn't create new storage structures, it just adds more rows. This is why QuestDB handles high cardinality without performance degradation.

Data type support:

CategoryQuestDB Types
IntegerBYTE, SHORT, INT, LONG, LONG128, LONG256
Floating pointFLOAT, DOUBLE, DECIMAL
StringSTRING, VARCHAR, CHAR, SYMBOL (indexed)
TemporalTIMESTAMP (nanosecond precision), DATE, INTERVAL
GeospatialGEOHASH
CollectionsARRAY
OtherBOOLEAN, UUID, IPv4, BINARY

QuestDB supports InfluxDB line protocol for compatibility, automatically mapping tags to SYMBOL columns and fields to appropriate types, so Telegraf and existing collectors keep working. Since QuestDB 10.0 the primary path is QWP, a binary wire protocol that carries typed columns rather than text lines, including arrays, handles queries as well as writes, and streams results back as Apache Arrow. The PostgreSQL wire protocol and REST API remain available.

Key model differences

AspectQuestDBInfluxDB
Data organizationTables + rowsMeasurements + series
Tag handlingSYMBOL columns (indexed strings)Creates separate series per tagset
High cardinalityNo impact (just more rows)Performance degrades (more series = overhead)
Query languageStandard SQLInfluxQL / Flux
JOINsFull SQL JOIN supportNot supported
SchemaSchema-on-write or predefinedSchema-on-write

Comparing database storage models

InfluxDB: TSM Trees

For storage, InfluxDB uses Time-Structured Merge (TSM) Trees, an LSM-tree variant optimized for time-series data. Writes first go to a write-ahead log (WAL) for durability, then into an in-memory cache that serves fast reads of recent data. When the cache fills, data is flushed to immutable TSM files on disk. Background compaction continuously merges smaller TSM files into larger ones to improve read efficiency, though this adds write amplification overhead.

Each unique series (measurement + tagset combination) creates its own TSM structure. This per-series architecture explains why high-cardinality workloads degrade InfluxDB's performance: more unique series means more TSM structures to maintain, index, and compact.

TSM Tree architecture showing write path from WAL through cache to compacted TSM files

InfluxDB partitions by time with shard groups. The shard group duration sets how much time each shard covers, and retention policies drop shards older than a given age:

Shard groups in InfluxDB showing time-based partitioning

QuestDB: Three-tier columnar storage

QuestDB implements a three-tier storage architecture optimized for both high-throughput ingestion and fast analytical queries:

Tier 1 - Write-Ahead Log (WAL): Incoming writes first land in a write-ahead log, providing durability guarantees. The WAL handles out-of-order data by buffering and sorting before committing to the main storage layer.

Tier 2 - Columnar partitions: Data is organized into time-partitioned columnar files optimized for query performance. Each partition is a directory containing separate files per column, so queries read only the columns they need. This columnar layout combined with time partitioning enables parallel scans with SIMD instructions across multiple CPU cores.

Tier 3 - Cold storage (Parquet): Older partitions can be converted to Parquet format and moved to object storage (S3, Azure Blob, GCS) or local cold storage. Recent data stays on fast local storage, history gets cheaper, and queries span all tiers.

WHERE symbol in ('AAPL', 'NVDA')
LATEST ON timestamp PARTITION BY symbol
CREATE MATERIALIZED VIEW 'trades_OHLC'
min(price) AS low
timestamp IN today()
SELECT spread_bps(bids[1][1], asks[1][1])
FROM read_parquet('trades.parquet')
SAMPLE BY 15m

Unlike InfluxDB's per-series TSM architecture, QuestDB stores all time series in a single table structure. This means adding new series (high cardinality) doesn't create additional storage overhead, the same columnar files simply contain more rows. This architectural difference explains why QuestDB maintains consistent performance as cardinality scales.

Query languages: SQL vs Flux

InfluxDB has gone through three query languages: InfluxQL, then Flux, and now SQL again in InfluxDB 3. QuestDB has used SQL from the start. Most engineers already know it, it works with BI tools, notebooks, ORMs and drivers without adapters, and what you learn on QuestDB carries over to PostgreSQL and the warehouses.

Flux vs SQL comparison

Flux uses a functional pipeline syntax that requires learning new concepts:

from(bucket: "metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu" and r.host == "server1")
|> aggregateWindow(every: 1m, fn: mean)

The equivalent in QuestDB SQL:

SELECT timestamp, avg(usage)
FROM cpu
WHERE host = 'server1' AND timestamp > dateadd('h', -1, now())
SAMPLE BY 1m;

QuestDB's time-series SQL extensions

QuestDB extends standard SQL with purpose-built functions for time-series analysis:

ExtensionPurposeExample
SAMPLE BYTime-based aggregationSELECT avg(price) FROM trades SAMPLE BY 1h
LATEST ONLast value per groupSELECT * FROM trades LATEST ON timestamp PARTITION BY symbol
ASOF JOINTime-aligned joinsJoin trades with quotes at exact timestamps
WHERE IN (ts, ts)Time range filteringOptimized partition pruning

Ecosystem and integrations

Both integrate widely, with different strengths:

IntegrationQuestDBInfluxDB
GrafanaNative data sourceNative data source
TelegrafVia ILPNative
PostgreSQL toolsFull compatibility (psql, any PG driver)Not supported
Client librariesPython, Java, Go, Node.js, Rust, C/C++, .NETPython, Java, Go, Node.js, and more
KafkaOfficial Kafka connectorNative Kafka consumer
Pandas/PolarsNative integrationVia client library

QuestDB's advantage: PostgreSQL wire protocol compatibility means PostgreSQL client libraries work with QuestDB, including psql, SQLAlchemy, and any PostgreSQL driver.

InfluxDB's advantage: As the older and more widely deployed database, InfluxDB has broader native integrations with monitoring tools and a larger collection of community Telegraf plugins.

Is QuestDB an InfluxDB replacement?

Not for every monitoring deployment. InfluxDB v1 and v2 remain a practical choice for established Telegraf pipelines, infrastructure and device metrics, dashboards, and narrow reads over a known set of series, and v1 wins several of the narrowest queries in this benchmark.

QuestDB is the stronger choice once the data is mission critical. Take energy plant monitoring, market data and trades, or telemetry from a rocket: a single lost record has consequences, the latest state has to be available immediately, and HA, backups, standard SQL and years of queryable history are requirements. That is what QuestDB is built for.

The benchmark shows the transition. QuestDB holds between 7.1 and 8.6 million rows per second from 1,000 to a million hosts, while InfluxDB v1 falls from 1.14 million to 237,000 and v2 from 618,000 to 210,000. InfluxDB v1 stays competitive on the narrowest reads; QuestDB is faster on everything that aggregates across hosts, and on the latest-point query by a wide margin.

Migration doesn't need a big-bang rewrite. QuestDB accepts InfluxDB Line Protocol, so Telegraf and existing collectors keep writing while you dual-write, settle the relational schema and move InfluxQL or Flux queries to SQL one workload at a time.

If you're building something new and the data will matter, starting on QuestDB saves a migration later.

Ready to try QuestDB? Get started with the quickstart guide or join our Slack community to ask questions.

Appendix: what each TSBS query does

Query names encode their parameters: single-groupby-5-8-1 is five metrics, eight hosts, one hour.

QueryWhat it measures
single-groupby-M-H-TMaximum of M CPU metrics for H random hosts, in 5-minute buckets over T hours. 1-1-1 is one metric, one host, one hour; the -12 variants cover twelve hours
double-groupby-MAverage of M CPU metrics for every host, grouped by host and by hour, over 24 hours. all is all ten metrics
cpu-max-all-HMaximum of all ten CPU metrics for H random hosts, per hour. -1 and -8 cover one hour; -32-24 covers 32 hosts over 24 hours
high-cpu-1Every reading where one metric is above a threshold, for one random host
high-cpu-allThe same threshold scan across every host, which is a full-table scan
lastpointThe most recent reading for every host
groupby-orderby-limitThe last five per-minute aggregates before a random point in time, ordered by time, a top-N query

Definitions follow the TSBS README. Every query is generated with seed 123 against the 4,000-host dataset, so each engine answers the same random hosts and time ranges.

More database comparisons

Subscribe to stay up to date with all things QuestDB.