LabHub

Blog

Time-Series Databases in 2026 — TimescaleDB / InfluxDB 3 / QuestDB / ClickHouse / VictoriaMetrics Deep Dive

한국어English日本語

Prologue — "The era of one TSDB to rule them all is over"

Around 2017, if you said "time-series database," exactly one name came up: InfluxDB 1.x. By 2020 Prometheus had become the metrics standard, and TimescaleDB arrived on Postgres wielding SQL. By 2023 ClickHouse was eating into time-series territory from the OLAP side, and QuestDB shipped a Java engine optimised for fast ingest.

As of 2026, what we call "time-series data" actually contains at least four different workloads.

  1. Metrics — periodic numbers like CPU, memory, QPS. Cardinality explosion is the main enemy.
  2. Logs — one text line per timestamp + message. Full-text search plus time filtering.
  3. Traces — distributed-system spans. A graph linked by span-id and trace-id.
  4. IoT / sensor (telemetry) — device, vehicle, factory sensor series. Compression ratio and ingest throughput matter.

On top of those four axes are application categories like OLAP (analytical queries) and APM (application performance monitoring). So even though TimescaleDB, VictoriaMetrics, and ClickHouse all carry the "time-series DB" label, they target very different markets.

This post maps the nine major candidates as of May 2026 — TimescaleDB, InfluxDB 3 Core/Enterprise, QuestDB, ClickHouse, VictoriaMetrics, Prometheus + Grafana Mimir, M3DB, GreptimeDB, TDengine/OpenTSDB — covering position, strengths, and weaknesses. We close with "what should our team pick" answered across four domains: IoT, observability, finance, OLAP.


1. The 2026 TSDB Map — Metrics, Logs, Traces, IoT

The big picture first. The 2026 TSDB landscape sorts into three families.

FamilyTraitRepresentatives
Postgres familyStandard SQL, transactions, strong JOINsTimescaleDB
Native TSDB familySeries-optimised compression and indexes, metrics-focusedInfluxDB 3, VictoriaMetrics, Prometheus, M3DB, GreptimeDB
Column-store familyStarted in OLAP, also great at time seriesClickHouse, QuestDB, Apache Druid, Apache Pinot

By workload:

WorkloadRecommended candidatesWhy
Kubernetes metricsPrometheus + Mimir, VictoriaMetricsStandard compatibility, cardinality tooling
APM metrics + tracesOTel + ClickHouse or GreptimeDBDirect OTLP ingestion, columnar compression
IoT sensor (hundreds of thousands of devices)InfluxDB 3, TDengine, TimescaleDBCompression ratio, downsampling, edge integration
Financial tick dataQuestDB, ClickHouse, TimescaleDBNanosecond precision, fast time-series JOINs
General analytics + time seriesClickHouse, TimescaleDBSQL familiarity, combine with non-time data
Logs (alongside metrics)ClickHouse, GreptimeDBFull-text plus time filtering

A core insight: attempts to unify on a single TSDB almost always fail. Cramming k8s observability and IoT into the same database breaks one side because the cardinality model is fundamentally different. Define your team's workload first, then pick the right tool.


2. TimescaleDB — Time Series on Top of Postgres

TimescaleDB is less a "time-series database" and more a time-series friendly Postgres extension. Since 2017 it has been the overwhelming #1 pick for teams who love SQL but want compression and partitioning automated.

Core concepts

Strengths

Weaknesses

When to pick it

-- Creating a TimescaleDB hypertable
CREATE TABLE metrics (
  time TIMESTAMPTZ NOT NULL,
  device_id TEXT NOT NULL,
  temperature DOUBLE PRECISION,
  humidity DOUBLE PRECISION
);

SELECT create_hypertable('metrics', 'time');

-- Automatic compression policy on time chunks
ALTER TABLE metrics SET (
  timescaledb.compress,
  timescaledb.compress_segmentby = 'device_id'
);
SELECT add_compression_policy('metrics', INTERVAL '7 days');

-- Continuous aggregate
CREATE MATERIALIZED VIEW metrics_hourly
WITH (timescaledb.continuous) AS
SELECT
  time_bucket('1 hour', time) AS bucket,
  device_id,
  AVG(temperature) AS avg_temp,
  MAX(temperature) AS max_temp
FROM metrics
GROUP BY bucket, device_id;

3. InfluxDB 3 (DataFusion + Arrow) — A Completely Reborn InfluxDB

Going from InfluxDB 1.x → 2.x → 3.x, the internals were rewritten twice. The Flux language from 2.x is essentially deprecated, and 3.x is rebuilt on top of the Apache DataFusion query engine + Apache Arrow memory format + Apache Parquet storage. Practically, it is "an Arrow time-series database wearing the InfluxDB name."

Core changes

Strengths

Weaknesses

When to pick it

-- InfluxDB 3 SQL example (DataFusion)
SELECT
  date_bin('1 hour', time) AS hour,
  device_id,
  AVG(temperature) AS avg_temp
FROM metrics
WHERE time > now() - INTERVAL '7 days'
GROUP BY 1, 2
ORDER BY 1 DESC;

4. QuestDB — SQL Meets Fast Ingest

QuestDB is a Java-written time-series-focused column store. The headline pitch is "it speaks the Postgres wire protocol and the InfluxDB Line Protocol at the same time." Meaning you can write SQL and ingest with InfluxDB-compatible clients.

Core concepts

Strengths

Weaknesses

When to pick it

-- QuestDB ASOF JOIN — a time-series superpower
SELECT
  trades.timestamp,
  trades.symbol,
  trades.price,
  quotes.bid,
  quotes.ask
FROM trades
ASOF JOIN quotes
WHERE trades.symbol = quotes.symbol
  AND trades.timestamp > '2026-01-01';

5. ClickHouse — A Column Store with Crushing Performance

Strictly, ClickHouse is not a time-series database — it is an OLAP column store. But if you sort and partition by a time column, you can use it as a TSDB, and it will deliver analytical performance that outclasses other TSDBs. Between 2024 and 2026 it became one of the most adopted observability backends.

Core concepts

Strengths

Weaknesses

When to pick it

-- ClickHouse: time series with Gorilla compression
CREATE TABLE metrics (
  time DateTime64(3, 'UTC') CODEC(DoubleDelta, ZSTD),
  device_id LowCardinality(String),
  metric LowCardinality(String),
  value Float64 CODEC(Gorilla, LZ4)
) ENGINE = MergeTree
PARTITION BY toYYYYMM(time)
ORDER BY (device_id, metric, time);

-- Pre-aggregated materialized view
CREATE MATERIALIZED VIEW metrics_hourly
ENGINE = AggregatingMergeTree
PARTITION BY toYYYYMM(hour) ORDER BY (device_id, metric, hour) AS
SELECT
  toStartOfHour(time) AS hour,
  device_id,
  metric,
  avgState(value) AS avg_v,
  maxState(value) AS max_v
FROM metrics GROUP BY hour, device_id, metric;

6. VictoriaMetrics — Prometheus-Compatible and Lean

VictoriaMetrics (VM) in one sentence: "Prometheus-compatible, but faster, leaner, and more disk-efficient." It speaks PromQL nearly identically to Prometheus, and adds MetricsQL on top. Growing steadily since 2020, by 2026 it is one of the standard options for large metrics backends.

Core concepts

Strengths

Weaknesses

When to pick it

# vmagent as a Prometheus scrape replacement
vmagent \
  -promscrape.config=/etc/scrape_config.yml \
  -remoteWrite.url=http://vmstorage:8480/insert/0/prometheus/

# PromQL as-is
sum(rate(http_requests_total[5m])) by (service)

# MetricsQL extension
rollup_rate(http_requests_total[5m]:1m)

7. Prometheus + Mimir — The Standard for Kubernetes Metrics

In 2026 Prometheus is still the de-facto standard for Kubernetes metrics. A CNCF Graduated project that runs everywhere. Its limits are clear — long-term retention and horizontal scaling. The most common solution to both is Grafana Mimir (the successor to Cortex).

Where Prometheus sits

What Mimir solves

Competitors

OptionTrait
Grafana MimirCortex successor, led by Grafana Labs
ThanosSidecar model, different answer to the same problem
VictoriaMetrics clusterSimpler, with MetricsQL extensions
CortexEffectively folded into Mimir

Strengths and weaknesses

Strengths: perfect integration with Kubernetes and the CNCF ecosystem, a deep exporter library, standard PromQL. Weaknesses: anything beyond metrics (logs, traces) is a separate stack, and a cardinality explosion makes operations heavy.

When to pick it


8. GreptimeDB — The Rust Newcomer

GreptimeDB is a Rust-based TSDB launched in 2022 that grew fast between 2024 and 2026. Its ambition is bold — metrics, logs, and traces in a single database, cloud-native.

Highlights

Strengths

Weaknesses

When to pick it


9. M3DB / TDengine / OpenTSDB — Other Candidates

M3DB

TDengine

OpenTSDB

Apache Druid / Pinot


10. Compression Strategy — Gorilla, ZSTD, Snappy

In TSDBs, disk usage equals cost. So every major TSDB in 2026 combines multiple codecs.

Time-series-specific codecs

General-purpose codecs (applied after the above)

Combination pattern

Most TSDBs pipeline "time-series codec → general-purpose codec". For example in ClickHouse:

This combo typically compresses 5-20x versus raw. Disk costs drop below 1/10.


11. Cardinality Explosion — The TSDB's Number-One Enemy

"Cardinality" is the TSDB metric that explodes most often. The definition is simple — the number of unique time series.

What blows up cardinality

Each series is usually defined like this.

metric_name{label1=value1, label2=value2, ...}

The number of label-value combinations is the number of series. Dangerous labels include:

What happens when it explodes

How to fix it

  1. Label hygiene — identify exploding labels and remove them from metrics, or push them to traces and logs.
  2. Cardinality visibility — VictoriaMetrics vmui cardinality explorer, Prometheus cardinality queries, Grafana Mimir analysis.
  3. Cardinality limits — enforce per-series label-value limits at the ingest side.
  4. Drop / Rewrite rules — strip dangerous labels at scrape time.
  5. Sampling and aggregation — do not store every series; keep key aggregates.

The "send it to traces" rule

High-cardinality dimensions (user, request ID, trace ID) belong in traces, not metrics. That is the standard 2026 answer. Metrics are for aggregates, traces are for detail.


12. Standards — Prometheus Exposition, OpenMetrics, OTel

Even with different TSDBs, the standards used to push data into them are converging.

Prometheus exposition format

# HELP http_requests_total Total HTTP requests
# TYPE http_requests_total counter
http_requests_total{method="GET",status="200"} 1234 1715814000000
http_requests_total{method="POST",status="201"} 56 1715814000000

OpenMetrics

OpenTelemetry (OTel)

InfluxDB Line Protocol

measurement,tag1=value1 field1=1.0 1715814000000000000

For a new project, treat OTel (OTLP) as the first-class signal, then accept the Prometheus format or OTLP directly depending on the backend. All major TSDBs support both.


13. IoT vs APM vs Finance — Who Should Pick What

Bringing it together. Recommendations by domain as of May 2026.

Kubernetes / observability (metrics-led)

Multi-signal observability (metrics + logs + traces unified)

IoT / sensors (tens to hundreds of thousands of devices)

Financial market data (ticks, quotes)

General OLAP + time series

Seven anti-patterns

  1. "One TSDB to rule them all" — without separating workloads, the cardinality model breaks.
  2. Stuffing user ID or request ID into metric labels — cardinality explosion.
  3. Sticking with default compression codecs — picking per column trait can yield 5x differences.
  4. No retention policy, infinite accumulation — disk cost runs away within a year.
  5. Skipping continuous aggregates — aggregating from raw every time.
  6. Keeping more than a year with bare Prometheus — pick one of Mimir, VictoriaMetrics, or Thanos.
  7. Mixing metric and trace responsibilities — detail goes to traces, aggregates to metrics.

What comes next

"Time series is not a single workload. Metrics, logs, traces, and IoT may look alike but they are different problems. The right answer is to use different tools."

— Time-Series Databases 2026, end.


References

Comments

No comments yet.

Sign in to leave a comment