QuestDB is an open-source time-series database, licensed under Apache 2.0, built to ingest millions of events per second, compute on live data in milliseconds and keep years of history queryable with extended standard SQL. Version 10.0 introduces the QuestDB Wire Protocol (QWP), a binary columnar protocol used both to write data and to read results back as Apache Arrow.
QuestDB key facts in 30 seconds
- Open-source time-series database under Apache 2.0, with more than 17,000 GitHub stars.
- Queried with SQL extended with functions such as SAMPLE BY, LATEST ON and ASOF JOIN.
- Version 10.0 introduces the QWP protocol for ingestion and Arrow reads.
- It speaks the PostgreSQL wire protocol, so existing drivers and tools work.
- Data is stored natively and in Parquet; the Enterprise edition tiers it to object storage.
The engine is written in Java with no garbage collection on the hot paths, plus parts in C++ and Rust. Data lives in memory-mapped columns partitioned by time, and queries run across all cores with SIMD instructions and JIT-compiled filters. Storage is tiered: a parallel write-ahead log, native columnar partitions and Apache Parquet. In the open-source edition partitions are converted to Parquet with ALTER TABLE; QuestDB Enterprise does it automatically and moves cold data to object storage.

Installing it with Docker or Homebrew
The quickest way to start it is Docker:
docker run -p 9000:9000 -p 8812:8812 questdb/questdb
On an Apple Silicon Mac you can also use Homebrew. The package only bundles native libraries for that architecture, so Intel Macs should use the Docker image:
brew install questdb
brew services start questdb
# or manually
questdb start
questdb stopCode language: PHP (php)
Ports matter. Port 9000 hosts the web console (SQL editor, charts and CSV import), the REST API, the new QWP and InfluxDB Line Protocol compatibility. Port 8812 speaks the PostgreSQL wire protocol, so any driver such as psycopg, JDBC or pgx, and BI tools or ORMs, can query the database unchanged. Inserts work that way too, but the project warns they are slower than with QWP. Neither port should be left open to the internet without authentication and a firewall in front.
Time-series SQL and use cases
The language is standard SQL with extensions for timestamped data. SAMPLE BY aggregates by interval, LATEST ON returns the last value of each series and ASOF JOIN matches each row with the most recent one from another table. These two examples from the documentation run on the public demo:
-- 15-minute OHLCV bars for EURUSD, today
SELECT timestamp, symbol,
first(price) AS open, max(price) AS high,
min(price) AS low, last(price) AS close,
sum(quantity) AS total_volume
FROM fx_trades
WHERE symbol = 'EURUSD' AND timestamp IN '$today'
SAMPLE BY 15m;
-- Match each trade to the most recent quote
SELECT t.timestamp, t.symbol, t.price, q.bid_price, q.ask_price
FROM fx_trades t
ASOF JOIN core_price q ON (symbol)
WHERE t.timestamp IN '$today';Code language: PHP (php)
The project lists capital markets (ticks, order books, pre- and post-trade analytics), aerospace and robotics telemetry, and grid, turbine or reactor data as typical uses. For a sysadmin it fits well as a store for infrastructure metrics: it ingests from Telegraf, Kafka, Redpanda or Apache Flink and is visualised with a native Grafana plugin. There are official clients for Python, .NET, C and C++, Go, Java, Node.js and Rust.
Performance: the project’s own figures
QuestDB publishes its own benchmarks. With version 10.0 and QWP it claims 19 million rows per second of ingestion per instance and 220 million rows per second streamed into Arrow with eight readers. In the TSBS test with 100,000 hosts on a 32 vCPU, 256 GB AWS instance, run in August 2026 with QuestDB 9.3.3, it reports 8.59 million rows per second for QuestDB against 1.75 million for ClickHouse, 1.08 million for TimescaleDB and 541,000 for InfluxDB 1.12. These are vendor measurements, and the README itself encourages users to run their own.
For work with coding agents, the project offers a skill that teaches its SQL dialect (npx skills add questdb/skills) and an MCP server for the web console.
Frequently asked questions
Is QuestDB compatible with PostgreSQL?
It speaks the PostgreSQL wire protocol on port 8812, so it can be queried with drivers such as psycopg, JDBC or pgx and with BI tools. It is not a full PostgreSQL and its SQL has its own extensions.
What is the difference between open source and Enterprise?
In open source, partitions are converted to Parquet manually with ALTER TABLE. Enterprise does it automatically and moves cold data to object storage.
What is QWP?
The QuestDB Wire Protocol, introduced in version 10.0: a binary columnar protocol over WebSocket used to write data and receive results as Apache Arrow over the same connection.
Does it work with Grafana?
Yes. QuestDB has a native Grafana plugin and publishes real-time demo dashboards.
Sources:
