New: QuestDB For AI Agents

Learn more

The Best Time-Series Databases in 2026 (and How to Choose)

Last updated: 7 July 2026.

QuestDB is the open-source time-series database for demanding workloads—from trading floors to mission control. It delivers ultra-low latency, high ingestion throughput, and a multi-tier storage engine. Native support for Parquet and SQL keeps your data portable, AI-ready—no vendor lock-in.

Search for "the best time-series database" and you will find the same article over and over: a few engines lined up and ranked, almost entirely on speed. It is an odd way to choose one. Ingesting and querying fast is the reason the whole category exists, and the serious engines are all fast enough for most workloads, so a ranking built on throughput mostly answers a question you have already settled.

So this guide is about everything else, the parts of the decision you actually live with once the data is flowing: whether the query language really understands time, how much you have to operate day to day, how easily your data moves in and out, and where each engine draws its line between what is open source, what is free, and what needs a commercial license.

Performance still matters, of course. Any of these engines will outrun a general-purpose transactional or analytical database on this work, so among them speed alone rarely settles the choice. It decides at the top end: if you need to ingest millions of rows per second, or hold the same throughput on less hardware, QuestDB is a strong match, and our head-to-head benchmarks against InfluxDB, TimescaleDB and ClickHouse show it. Treat every benchmark, ours included, with a pinch of salt though: small changes to the setup reshuffle the rankings, as we found in Lies, damn lies and database benchmarks.

This is a guide, not a leaderboard: for each question we name the databases that fit and the ones that do not, which might or might not be QuestDB (we are biased here, of course). If you want the category basics first, our time-series database glossary entry covers them.

INFO

Full disclosure: we build QuestDB, so we know it in depth and are not equally expert in the other six engines. We researched them carefully, by hand and with AI agents, and checked the claims here against each vendor's own documentation, to paint as realistic and fair a picture as we could. We may still have something wrong. If you spot an error, tell us on our community forum and we will fix it.


Quick picks: the best time-series databases in 2026

If you just want the shortlist:

  • Best overall, for high-volume ingestion and low-latency time-based queries: QuestDB. The fastest out-of-the-box ingestion in our TSBS runs, SQL with the right primitives for low-latency domains, and open Parquet storage under an Apache 2.0 license.
  • Time-series without leaving PostgreSQL: TimescaleDB. Relational and time-series data share one Postgres database and its entire ecosystem.
  • Observability, logs and huge event datasets: ClickHouse. Columnar aggregation at very large scale, when writes arrive in batches.
  • Industrial IoT fleets and the edge: TDengine or InfluxDB 3. TDengine puts clustering in its open-source core; InfluxDB's Telegraf agent and line protocol are made for constrained devices. Both work best while ingest rates and the number of unique series stay moderate.
  • High-frequency trading where the application layer is already built in q: kdb+. Very fast in-memory tick analytics, for teams where openness and vendor lock-in are not a constraint.
  • Infrastructure monitoring and metrics: Prometheus. A different job from the business data this guide is about, and the cloud-native standard for it.

Monitoring vs business data: not all time-series data is the same

Two very different jobs hide under the label "time-series." One is infrastructure and service monitoring: CPU, memory, request rates and the like, collected on a schedule and read mostly through alerts and dashboards. If that is your data, Prometheus and its ecosystem are built for exactly it. Prometheus is the CNCF-graduated standard for cloud-native and Kubernetes monitoring: it scrapes HTTP endpoints, labels each series, queries with PromQL and alerts through Alertmanager, with an exporter for almost everything.

The other job is business data: the time-stamped records your systems are actually built on, whether that is trades and quotes, readings from a turbine, telemetry from a robot, or energy meter data. Unlike monitoring data, which is routinely sampled, downsampled and aged out, where a lost scrape is a non-event, this data is mission-critical. A missing trade is a compliance problem, a gap in meter data is revenue you cannot bill, and a lost telemetry window is an incident you cannot reconstruct. You keep the raw records, you keep them durably, and you run analytical queries over them, and that is the job this guide is about.

Do you even need a time-series database?

A specialized engine earns its keep on a specific shape of problem, so before comparing them, make sure you have it. A time-series database pays off when most of your queries filter or aggregate by time (recent windows, downsampling, rolling statistics), when ingestion is sustained and high-volume, or when the data outgrows local disks and needs to be tiered, archived or expired over time.

If none of that fits, if most queries carry no time filter, ingestion is modest, and the data lifecycle is not a headache, then a general-purpose relational database like PostgreSQL is very likely the simpler and better choice, and you can skip the rest of this comparison. The same holds if your workload is really transactional, many small updates and deletes that need row-level consistency, which is exactly what those databases are built for and what time-series engines trade away for ingest speed. If Postgres is already struggling with your time-series data, read on.

The contenders, and what we are setting aside

Six of them are time-series databases, in alphabetical order: DolphinDB, InfluxDB, kdb+, QuestDB, TDengine and TimescaleDB. The seventh, ClickHouse, is not one; it is a column-oriented OLAP database. We include it because it is one of the OLAP engines people most often compare against a purpose-built time-series database.

We also set aside the metrics-first monitoring systems, Prometheus and VictoriaMetrics, which belong to the monitoring job above, and Apache Druid and Apache Pinot: both are very good at serving sub-second aggregations to thousands of dashboard users at once, but that is a different job from being the database you write everything to and query freely.

Every engine here is a strong choice for some workload. The rest of this guide is about matching one to the shape of your data and the way you work with it.


The 7 best time-series databases at a glance

Here is the whole field at a glance. Each column matches a section further down, so if a row raises a question, the answer is below.

EngineHighlightsLicenseBest for
QuestDBSQL + time semantics
Full temporal joins
Matviews · dedup on write
Tiered Parquet (Enterprise)
Console + dashboards
Apache 2.0
+ Enterprise
Capital markets, energy,
aerospace & robotics
InfluxDB 3SQL + InfluxQL
No temporal joins
No matviews · last-write
Object store native (Core)
Explorer app
MIT/Apache,
commercial tiers
Recent-data
metrics & IoT
TimescaleDBPostgreSQL SQL (no TS)
No temporal joins
Matviews · dedup on write
Tiering: Tiger Cloud only
Cloud console
Apache 2.0
+ TSL
Time-series in
PostgreSQL
TDengineSQL
ASOF + window joins
Matviews (TSMA) · dedup
Tiering: Enterprise
taosExplorer
AGPL-3.0
+ Enterprise
Industrial IoT
& edge
ClickHouseSQL dialect
ASOF join only
Matviews · eventual dedup
S3 tiering (OSS)
/play console
Apache 2.0
+ Cloud
Large-scale
analytical scans
kdb+q + SQL (KDB-X) + Python
ASOF + window joins
No matviews · DIY dedup
Proprietary storage
KX Dashboards · pgwire
Proprietary,
free tiers
HFT &
capital markets
DolphinDBSQL + scripting language
ASOF + window (functions)
No matviews · ingest dedup
Proprietary storage
GUI + web dashboards
Proprietary,
free Community
Capital markets,
industrial IoT

INFO

"InfluxDB" is really three databases. 1.x and 2.x run the older TSM engine, queried with InfluxQL and Flux. InfluxDB 3 is a ground-up Rust rewrite on Apache Arrow and Parquet, queried with SQL and InfluxQL, with Flux dropped; moving to it from 1.x or 2.x is a migration, not an upgrade. In this guide, InfluxDB means version 3.


How to choose a time-series database: the questions that decide it

Ingestion and query speed: necessary, not decisive

You do need enough headroom, so start here, then move on. In our reproducible TSBS benchmarks, QuestDB (version 9.x; v10 is around the corner) sustains ingestion from about 4 million to a peak of 11.4 million rows per second on default settings. Head to head:

  • QuestDB vs InfluxDB: up to 36x faster on ingestion, whether against 1.x, 2.x or 3 Core, and up to 130x faster on heavy double-groupby queries
  • QuestDB vs TimescaleDB: up to 13x faster on ingestion, and up to 20x faster on heavy double-groupby queries
  • QuestDB vs ClickHouse: up to 4.8x faster on ingestion and 27x faster on last-point queries, while ClickHouse is faster on some large range and aggregation scans

What about kdb+ and DolphinDB? Both are in-memory-first and very fast on the tick workloads they are tuned for, but with kdb+ you cannot really check: its license includes a DeWitt clause that forbids customers from publishing benchmark results, so independent, reproducible numbers are scarce and its speed is largely taken on reputation.

The query language, and whether it understands time

Language is the part of the decision you cannot easily reverse, because it shapes every query anyone writes for years and it sets the size of the hiring pool.

The SQL engines are not equivalent. TimescaleDB is a PostgreSQL extension that stays within standard SQL: it adds its time-series features (hypertables, continuous aggregates, compression) as functions and policies rather than new query syntax, so its strength is that it is just Postgres, with no special time-series semantics to learn. ClickHouse is SQL with its own extensions for large-scale analytics. QuestDB is SQL with extensions for time series: SAMPLE BY for downsampling, LATEST ON for last-value lookups, a full family of temporal joins, and TICK interval syntax for expressing complex time ranges in a single filter. QuestDB Enterprise takes it further with exchange calendars that resolve real trading sessions, holidays and early closes from an exchange code.

kdb+ is the outlier that trades SQL for the terse, proprietary q array language: powerful in skilled hands, but a steeper curve, a smaller talent pool, and less reliable help from AI coding agents, which have seen far more SQL in training. (KX's newer engine, KDB-X, adds SQL and native Python on top of q, but in its own framing it is "q for speed, Python and SQL for ease": the SQL is a convenience layer that does not cover the full q feature set, with window joins staying q functions.) DolphinDB is a hybrid: an ANSI-compatible SQL dialect embedded in a proprietary scripting language, so you query in familiar SQL, with as-of and window joins available as SQL functions (aj, wj), and the scripting language there for heavier analytics.

Temporal joins are where "understands time" becomes concrete. An ASOF JOIN matches each row to the most recent prior row in another series without a hand-written window, the everyday operation behind quote-to-trade matching and sensor alignment.

ASOF JOIN: match each FX trade to the prevailing quoteDemo this query
SELECT
t.timestamp, t.symbol, t.price,
m.best_bid, m.best_ask
FROM fx_trades t
ASOF JOIN market_data m ON (symbol)
WHERE t.timestamp IN '$now-1h..$now'
LIMIT 20;

QuestDB supports every standard SQL join (INNER, LEFT, RIGHT, FULL, CROSS, LATERAL) and the full temporal family as first-class SQL keywords: ASOF (with LT and SPLICE variants), WINDOW, and HORIZON. WINDOW JOIN aggregates a related table within a time window around each row; HORIZON JOIN computes aggregations at a set of forward time offsets in a single pass, the shape of trade markout analysis. The examples in the docs run on live data rather than sitting as bare snippets, so you can paste them into the demo console and see output.

Where the others land:

EngineASOF joinWindow joinHorizon joinExposed as
QuestDBYes (+ LT, SPLICE)YesYes (only engine)SQL keywords
ClickHouseYesNoNoSQL keyword
TDengineYesYesNoSQL keyword
kdb+Yes (aj)Yes (wj)Noq; asof in SQL
DolphinDBYes (aj)Yes (wj)NoSQL functions
TimescaleDBEmulated (LATERAL)NoNonot native
InfluxDB 3NoNoNonot native

The InfluxDB row holds across versions: Flux (v2) and SQL (v3) both do ordinary equality joins, but neither has a native as-of or temporal join, a long-standing open feature request.

No single join decides it. An as-of join is fairly common, though not always where you would expect: ClickHouse, which is not a time-series database, has one in SQL, while InfluxDB and TimescaleDB, which are, do not offer a native one. kdb+, DolphinDB and TDengine add a window join too. What no other engine has at all is a HORIZON JOIN, or the LT and SPLICE variants. Only QuestDB offers the complete family, ASOF with its LT and SPLICE variants, WINDOW, and HORIZON, as standard SQL keywords.

Those keywords are not just syntactic sugar. You can emulate an as-of or window join with a LATERAL join or a correlated subquery, but performance suffers badly, because a native operator is one the engine is built to optimize around. QuestDB's ASOF JOIN, for example, is backed by several execution algorithms: a fast path for closely-spaced matches, a dense path for widely-spaced ones, and more, several of them selectable with optimizer hints and each suited to a different data distribution. A hand-rolled LATERAL join gets none of that. HORIZON JOIN has no real workaround at all: without it you pull the data out and compute the offsets outside the engine, in application code or a q script, then ship the results back.

Materialized views and deduplication: what the engine maintains for you

Two chores decide how much plumbing you write around the database: keeping pre-aggregated rollups fresh, and keeping duplicate rows out. The more the engine does automatically, the fewer cron jobs and reconciliation scripts you own.

Rollups

QuestDB's materialized views refresh incrementally as data arrives (REFRESH IMMEDIATE), with manual and timer options.

A materialized view: incrementally-maintained 1-minute OHLC
CREATE MATERIALIZED VIEW 'fx_trades_ohlc_1m'
WITH BASE 'fx_trades' REFRESH IMMEDIATE AS (
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
SAMPLE BY 1m
) PARTITION BY HOUR;

TimescaleDB's continuous aggregates are incrementally maintained by an invalidation engine that reprocesses only the changed time buckets, driven by a background refresh policy, and can blend the newest raw data at query time. ClickHouse offers both an insert-triggered incremental view (new blocks only, no historical backfill) and, since 24.10, a scheduled refreshable one. TDengine covers the ground with stream processing plus background-maintained TSMA rollups. The gap is InfluxDB 3, which dropped v1's continuous queries and v2's tasks and has no materialized view at all, only scheduled plugins. kdb+ has none, and DolphinDB does its continuous aggregation through streaming engines rather than a declarative view; either way you write the rollup yourself.

Deduplication

Time-series pipelines replay and retry, so where the engine removes duplicates matters:

EngineHow it deduplicates
QuestDBOn ingestion, via DEDUP UPSERT KEYS on a key you choose
TimescaleDBOn write, via a unique index and ON CONFLICT
DolphinDBOn ingestion, via keyed upsert! or the TSDB and PKEY engines
TDengineOn write, a duplicate timestamp overwrites
InfluxDBAt query and compaction time, last write wins
ClickHouseEventual, at background merge; needs FINAL to read a clean result
kdb+Not built in, done yourself with a keyed table

Licensing and open source: what the free build actually runs

The license label matters less than where the paywall sits. Five of the seven are open source: ClickHouse (Apache 2.0), QuestDB and TimescaleDB (Apache cores, though Timescale's newest features sit under the source-available TSL), TDengine (AGPL-3.0, a real consideration for embedding or resale) and InfluxDB 3 Core (MIT/Apache). kdb+ and DolphinDB are proprietary, free only in capped tiers.

What that free build then buys you varies more than the licenses suggest. ClickHouse and TDengine give the most away: clustering and high availability run in the open-source build, and ClickHouse also does S3 tiered storage there, with only its elastic SharedMergeTree engine reserved for Cloud. QuestDB and TimescaleDB are open at the core but gate the operational tier: full ingest and query performance are free, while replication, automated object-storage tiering and RBAC/SSO are commercial. And some free tiers hit a wall early: InfluxDB 3 Core is single-node and queries reach back only about 72 hours by default, and DolphinDB Community caps you at two nodes and two cores, so any real cluster needs a license.

High availability cuts across all of this, so it gets its own section next.

Day-to-day operations: how much you have to run

The cost that never shows up in a benchmark is the machinery you keep running day to day. All seven run as a single standalone instance, and every one has a free edition that lets you do it, so day one is easy across the board. None of them needs an external coordinator just to run on one node: ClickHouse's Keeper, and the ZooKeeper or Raft quorums the others use, only come into play when you cluster for high availability, which is the next question.

Getting to high availability, and how hard it is

Surviving a node failure is where "open source" and "easy" part ways. What matters is not only whether HA is in the free build, but how much of it you assemble yourself.

TDengine

The most turnkey in open source. Standard multi-node clustering and three-replica Raft high availability (replica 3) are in the Community edition with no external coordinator to run. Dual-replica and active-active are the Enterprise extras.

QuestDB

No HA in the open-source core, which runs single-node and scales vertically. QuestDB Enterprise adds primary-replica replication with no coordination service to run: the primary writes its write-ahead log to an object store, which can be a local or NFS filesystem or cloud object storage (S3, Azure Blob, GCS), and replicas replay it, with no direct node-to-node connections. Run replicas hot alongside the primary and failover is automatic, a replica taking over when the primary fails without interrupting connected clients, but that is a commercial feature.

QuestDB Enterprise distributed architecture: a primary ingests data and uploads its write-ahead log to object storage, hot replicas download and replay the WAL, and historic data is stored in open Parquet and Iceberg formats.
QuestDB Enterprise replication: the primary uploads its WAL to object storage (S3, Azure, GCS or NFS), hot replicas replay it and fail over automatically, and historic data stays in open Parquet and Iceberg.

ClickHouse

Can do HA in open source, at the cost of running it yourself: a separate three-node ClickHouse Keeper (or ZooKeeper) quorum, per-node XML describing the shard and replica topology, and ReplicatedMergeTree tables. The tutorials are good, so call it moderate rather than hard, but there is no turnkey control plane outside ClickHouse Cloud. One default worth knowing: ClickHouse's insert path favors throughput over per-insert durability, with fsync off by default, so a hard crash can lose recently inserted parts unless you enable durability settings. QuestDB's write-ahead log, described above, makes every committed write durable by default, which is why it tends to win where the data is the mission-critical kind this guide opened with: market ticks or energy meter readings you cannot afford to lose.

TimescaleDB

Inherits PostgreSQL's story: streaming replication is built in, but automatic failover is not, so a self-managed HA setup means adding Patroni and an external etcd or Consul. Native multi-node sharding was deprecated in 2.13 and removed in 2.14, so horizontal scale-out is gone; scaling is now vertical plus read replicas. Turnkey HA exists only on Tiger Cloud.

InfluxDB

Puts HA behind an edition step: Core is single-node, Enterprise adds self-managed HA and replicas, Cloud Dedicated is a managed cluster, and Clustered is a self-managed Kubernetes deployment you operate. On AWS, Amazon Timestream for InfluxDB is a fully managed option with Multi-AZ failover, the least-effort path if you are already there.

DolphinDB

Genuine HA (a Raft group of controllers for metadata plus partition replicas and client-side failover), but a real HA cluster exceeds the free Community edition's caps of two nodes and two cores, so in practice it needs an Enterprise license.

kdb+

No built-in HA at all, and in a live tick deployment even durability is something you engineer. Intraday data is held in memory in the real-time database (RDB) while history lives on disk in the HDB; if the RDB dies you recover by replaying the tickerplant's on-disk log, which, along with the gateways and the failover logic, is part of the tick architecture you build and run in q. KX's own guidance treats high availability as an engineering project, which is the tradeoff for its raw speed.

Open formats and the data lakehouse: how open is your data?

How openly a database stores its data decides how well it plays with everything else you run. If the files are in a format the rest of the ecosystem reads, a lakehouse, Spark or DuckDB can work on the same data the database is serving, with no export pipeline. It also settles the vendor lock-in question early: data that is already in an open format, in your own account, never needs migrating.

QuestDB stores older partitions as standard Apache Parquet files that sit on your own disks or in your own cloud account, not locked inside a provider's managed service, with Apache Iceberg integration in Enterprise for lakehouse catalogs. Because the data is already Parquet and already yours, there is nothing to export: any engine that reads Parquet, a lakehouse, Spark or DuckDB, can be pointed straight at the existing files, so the database sits inside an open data lakehouse instead of feeding one through exports. The open-source build converts partitions to Parquet on demand; QuestDB Enterprise does the tiering automatically, and both the per-column encoding and the lifecycle are declarative in the table definition.

Per-column Parquet encoding with a tiered storage policy
CREATE TABLE 'market_data' (
timestamp TIMESTAMP PARQUET(delta_binary_packed, zstd(4)),
symbol SYMBOL PARQUET(rle_dictionary, zstd(4), bloom_filter),
bids DOUBLE[][] PARQUET(default, zstd(4)),
asks DOUBLE[][] PARQUET(default, zstd(4)),
best_bid DOUBLE PARQUET(default, zstd(4)),
best_ask DOUBLE PARQUET(default, zstd(4))
) timestamp(timestamp) PARTITION BY HOUR
STORAGE POLICY(TO PARQUET 2 DAYS, TO REMOTE 1 HOUR, DROP LOCAL 3 MONTHS);

The remaining migration surface is the SQL itself, and SQL to SQL is the easy case: swapping one engine's time-series extensions for another's equivalents rather than re-platforming your data.

InfluxDB 3 is built on Apache Arrow and Parquet, similarly open at the storage layer. ClickHouse keeps its native tables in the MergeTree format; it reads Parquet well and exports query results to it, so it joins a lakehouse through an export step rather than through files that are already open in place. kdb+ and DolphinDB keep their native data in proprietary columnar formats, part of why they are fast, and both can write Parquet on the way out (DolphinDB through a Parquet plugin, kdb+ through KX's Arrow/Parquet interface); at large volumes that full copy is a real cost in time, compute and storage.

An open format helps most when you can reach the files, and that comes down to how you deploy, not which engine you pick. Self-host any of these, or use a bring-your-own-cloud option like QuestDB's where everything runs on your own infrastructure, and the Parquet is right there for the rest of your platform to read directly. On a fully managed cloud or service, even open-format data lives in the provider's account, so plan the export path before you need it.

Developer experience: consoles, AI agents and client libraries

Past the engine, someone has to query the data, wire it into applications, and increasingly point an AI agent at it.

Consoles and dashboards

QuestDB's web console has a SQL editor, schema explorer, live metrics, CSV import and, recently, native dashboards: notebook-style cells with charts and variables, all in the open-source build. They are built and stored in your browser rather than on the server, so you share them by exporting and importing, and on the demo instance you can build one yourself, though none is loaded by default. InfluxDB 3 ships a separate, free-but-proprietary Explorer app with dashboards; KX Dashboards is a KX product now bundled with KDB-X; TDengine bundles the taosExplorer web UI; DolphinDB has a desktop GUI, a VS Code extension and web dashboards. TimescaleDB has no self-managed UI (its editor is cloud-only), and ClickHouse's built-in /play is a minimal query page. Grafana connects to all of them.

AI and agents

Every vendor has moved on this in the past year, so it no longer separates them much. Most of these engines ship an official MCP server, so you can point Claude Code, Codex or Cursor at QuestDB, ClickHouse, InfluxDB 3, TimescaleDB/Tiger, kdb+/KX or TDengine; DolphinDB's official MCP is narrower, scoped to stock research, with a general one available from the community. In-product natural-language assistants are common too, in varying flavors. QuestDB's writes SQL in its open-source web console with your own OpenAI or Anthropic key, and its MCP can drive that same console to build those dashboards. Here is one, with the natural-language prompt that produced it:

A dashboard in QuestDB's open-source web console: a Live FX Demo with an EURUSD 15-minute OHLC candlestick chart with VWAP and Bollinger Bands, a SQL query cell, a markout line chart, and a volume-by-ECN stacked bar chart.
A dashboard in QuestDB's open-source web console: OHLC with VWAP and Bollinger Bands, markout analysis and volume by ECN, each cell backed by its own SQL query.

Create a clean QuestDB notebook dashboard for a live FX demo using fx_trades: a rolling 12-hour chart of 15-minute OHLC candles with VWAP and Bollinger Bands, a markout chart comparing yesterday's trades against market mid from 5 minutes before to 5 minutes after each trade at 30-second steps, volume by ECN, and a compact summary table. Use a notebook variable for the symbol, validate the SQL, enable chart auto-refresh, and make the layout polished for a live demo.

InfluxDB's lives in its Explorer app, ClickHouse's in its Cloud console and, since 25.7, its open-source client, and Timescale's is PopSQL. KX Dashboards' chat agent builds dashboards from plain language. The feature is now widespread; what differs is the packaging, from a free open-source console to companion apps and Cloud-only tools.

Client libraries and interfaces

Coverage is broad across the board; every engine ships native clients for the mainstream languages, Python, Java, Go, C/C++, .NET, Node.js and more, and every one can be driven over HTTP as well, most through a built-in REST query endpoint, kdb+ and TimescaleDB through a module or add-on. The more useful distinction is PostgreSQL wire compatibility, which lets any Postgres client, driver or BI tool connect with no dedicated library. TimescaleDB has it fully, since it is Postgres, while QuestDB, ClickHouse and KDB-X (the newer KX engine) expose a PostgreSQL-compatible query endpoint, though KDB-X's handles only basic ANSI SQL (SELECT, WHERE, LIMIT, ORDER BY), not its richer query features. Classic kdb+, InfluxDB, TDengine and DolphinDB use their own native protocols instead.


The best time-series database by use case

Put the questions above together and a shortlist usually falls out. Here it is, by domain.

Low-latency applications: capital markets, trading infrastructure and crypto

QuestDB for ASOF/WINDOW/HORIZON tick analytics on an open SQL stack with no proprietary language to hire for; it was built on trading floors and is heavily used across capital markets. Because it runs on your own infrastructure, on-prem or in your own cloud account and never on a vendor's, it also fits a tightly regulated industry where data has to stay under your control and be kept for decades.

kdb+ is a good bet in one specific situation: the firm already has a full set of applications built in q, a language powerful enough to build entire trading systems rather than just queries, and no intention of moving away from the q ecosystem, vendor lock-in, on-site consultants and all. (KX's newer KDB-X engine, which adds SQL and Python on top of q, is covered in the query-language section above.) DolphinDB where its mix of ANSI-compatible SQL and a powerful proprietary scripting language is the preferred model. See QuestDB vs kdb+.

Industrial IoT and the edge

Split this one by throughput. At the high end, where the data is heavy and the infrastructure critical, energy, aerospace, robotics, QuestDB shines: high ingest rates, SQL, open Parquet and a permissive license on the same data. For lighter collection work, InfluxDB is a fine choice with deep roots here: Telegraf, its collection agent, ships hundreds of input plugins for sensors, buses and systems, the line protocol is trivial for constrained devices to emit, and InfluxDB 3 Core runs happily at the edge on a single node. TDengine is purpose-built for device fleets, with clustering in its open-source core and an all-in-one edge-to-cloud stack.

Time-series without leaving PostgreSQL

TimescaleDB, so relational and time-series data share one database and the whole Postgres ecosystem.

Observability, logs and huge event datasets

ClickHouse, when the job is really columnar aggregation and writes arrive in batches. For observability and log monitoring in particular, it is becoming the market leader.

Staying in the InfluxDB ecosystem

InfluxDB 3 spans editions from free Core to managed Cloud Dedicated, plus Amazon Timestream for InfluxDB on AWS with Multi-AZ failover. If your team already runs Telegraf and the line protocol, it is the lowest-friction path. Keep in mind the protocol does not lock you in: QuestDB ingests the same line protocol over TCP and HTTP, so Telegraf and existing collectors keep working if you switch. Our InfluxDB 3 Core benchmarks and InfluxDB alternatives cover the tradeoffs and the migration.

The bottom line

Pick by the question that matters most for your workload, not by an overall ranking. If you never leave Postgres, TimescaleDB. If the job is observability, logs or batch analytics, ClickHouse, which has become the widely adopted choice for that work.

QuestDB is built for the hard cases: strict latency, huge ingestion, data you cannot afford to lose. The benchmarks are all reproducible, so run them and see for yourself.

Frequently asked questions

What is the best time-series database in 2026?

There is no single winner for every workload. For low-latency applications and the most demanding high-throughput workloads, QuestDB is our top pick: it posted the fastest out-of-the-box ingestion in our TSBS benchmarks, extends SQL with real time semantics including a full family of temporal joins, and stores data in open formats like Apache Parquet. The best choice for you depends on what you are working with: staying inside PostgreSQL points to TimescaleDB, observability, logs and batch analytics to ClickHouse, edge IoT to TDengine or InfluxDB, and q-based trading stacks to kdb+.

When should I use a time-series database instead of PostgreSQL?

If most of your queries have no time filter, ingestion is modest and old data is not piling up into a storage problem, stay with PostgreSQL; it is the simpler choice. A time-series database starts to pay off when most queries filter or aggregate by time, when ingestion is sustained and high-volume, or when retention and storage cost become real work. TimescaleDB is the middle path, since it adds time-series features inside PostgreSQL itself.

What is the best open-source time-series database?

QuestDB (Apache 2.0) is built for high-volume ingestion with time-series SQL, and its data tiers to open Parquet. The free builds differ more than the licenses do: ClickHouse (Apache 2.0) and TDengine (AGPL-3.0) include clustering and high availability in open source, while InfluxDB 3 Core (MIT/Apache) runs single-node with a roughly 72-hour default query window, and TimescaleDB's newest features sit under the source-available TSL rather than its Apache core.

Which time-series databases support ASOF and temporal joins?

QuestDB supports ASOF JOIN (plus LT and SPLICE variants), WINDOW JOIN and HORIZON JOIN as first-class SQL keywords, and is the only engine that offers HORIZON JOIN. ClickHouse and TDengine expose ASOF JOIN in SQL (TDengine also has a window join). kdb+ offers as-of and window joins in its q language, and KDB-X's SQL adds the as-of join, while DolphinDB offers both as functions within its SQL. TimescaleDB has no native ASOF keyword (it is emulated with LATERAL), and InfluxDB 3 has none.

What is the best time-series database for capital markets?

QuestDB is built for market-data and trading workloads on a modern SQL stack, with ASOF/WINDOW/HORIZON joins, nanosecond timestamps and high ingestion, and is used across capital markets. kdb+ remains the entrenched choice for high-frequency trading where microsecond latency is decisive and the q expertise and budget exist, and DolphinDB pairs ANSI-compatible SQL with a proprietary scripting language and is used in the same space.

What is the best kdb+ alternative?

QuestDB is the most direct open-source alternative: the same tick-data workloads written in standard SQL rather than q, with ASOF, WINDOW and HORIZON joins, nanosecond timestamps and open Parquet storage. DolphinDB is a proprietary alternative in the same space. See our QuestDB vs kdb+ comparison for the detail.

What is the best time-series database for industrial IoT and sensor data?

InfluxDB has deep roots in IoT and sensor monitoring, through Telegraf's large plugin ecosystem and a line protocol that constrained devices emit easily. TDengine offers an all-in-one edge-to-cloud stack with clustering in its open-source core. When the job goes beyond monitoring to running critical infrastructure such as aerospace or energy, QuestDB is a well-established player, with high-ingest SQL, open Parquet storage and a permissive license. All three handle sensor ingestion well; once you are pushing millions of rows per second, or tracking millions of unique series, QuestDB copes best.

What is the best InfluxDB alternative?

For high-volume workloads, QuestDB: it ingests 12x to 36x faster than InfluxDB 3 Core in our TSBS benchmarks, adds the temporal joins InfluxDB lacks, and accepts the InfluxDB Line Protocol, so Telegraf and existing collectors keep working. TimescaleDB fits if you would rather stay inside PostgreSQL. And since InfluxDB 3 is a ground-up rewrite, moving off 1.x or 2.x is a migration whichever way you go; our InfluxDB alternatives guide covers the options.

Which time-series database works best with Grafana?

All of them connect to Grafana. QuestDB has an official Grafana plugin and also works through the standard PostgreSQL data source, as does TimescaleDB. InfluxDB and Prometheus have first-party data sources, and ClickHouse and TDengine ship official plugins. For infrastructure metrics, Prometheus and Grafana remain the default pairing; for dashboards over business data, any engine here works, so pick the database on its merits.

Is ClickHouse a time-series database?

Not strictly. ClickHouse is a column-oriented OLAP database widely used for time-series-shaped data such as metrics, logs and events. It supports ASOF JOIN and gap-filling, but it is optimized for batched analytical scans rather than single-row streaming ingestion, and its dedicated TimeSeries table engine is still experimental.

Try QuestDB

QuestDB is open source and Apache 2.0 licensed. You can get started for free with the open-source build, or explore QuestDB's SQL on the live demo, a read-only console preloaded with real time-series datasets. The source and issue tracker are fully open, the cookbook has examples you can run, the customer stories show how teams run QuestDB in production, and the agents page covers how it works with AI tooling. If you need replication, role-based access control or tiered storage, see QuestDB Enterprise, where you can also book a call.

Subscribe to stay up to date with all things QuestDB.