LabHub

ブログ

時系列データベース 2026 — TimescaleDB / InfluxDB 3 / QuestDB / ClickHouse / VictoriaMetrics 徹底比較

한국어English日本語

プロローグ — 「時系列DBひとつで全部こなす時代は終わった」

2017年頃まで「時系列DB?」と聞けば、InfluxDB 1.xの名前ひとつしか出てこなかった。2020年にはPrometheusがメトリクスの標準になり、TimescaleDBがSQLを武器にPostgres上で登場した。2023年にはClickHouseがOLAP側から時系列領域を侵食しはじめ、QuestDBがJavaで高速ingestを引っ提げて現れた。

2026年現在、私たちが「時系列データ」と呼んでいるものの中には、少なくとも4つの異なるワークロードが含まれている。

  1. メトリクス (metrics) — CPU・メモリ・QPSのような時間あたりの数値。カーディナリティ爆発が主な敵。
  2. ログ (logs) — タイムスタンプ + メッセージというテキスト1行。全文検索 + 時間フィルタ。
  3. トレース (traces) — 分散システムのspan。span-id・trace-idでつながったグラフ構造。
  4. IoT / センサー (telemetry) — デバイス・車両・工場のセンサー時系列。圧縮率と取り込みスループットが重要。

この4軸の上に、OLAP(分析クエリ)とAPM(アプリケーション性能管理)という応用カテゴリが重なる。つまり同じ「時系列DB」というラベルでも、TimescaleDB・VictoriaMetrics・ClickHouseはそれぞれ違う市場を狙っている。

この記事では、2026年5月時点の主要候補9つ — TimescaleDB、InfluxDB 3 Core/Enterprise、QuestDB、ClickHouse、VictoriaMetrics、Prometheus + Grafana Mimir、M3DB、GreptimeDB、TDengine / OpenTSDB — の立ち位置と強み・弱みを整理する。最後に「私たちのチームは何を選ぶべきか」を4つのドメイン(IoT・観測・金融・OLAP)別に答える。


1. 2026年の時系列DB地図 — メトリクス・ログ・トレース・IoTの4軸

まずは大きな絵から。2026年の時系列DBは大きく3つのファミリーに分類される。

ファミリー特徴代表
Postgresファミリー標準SQL、トランザクション、JOINに強いTimescaleDB
専用TSDBファミリー時系列最適化の圧縮・インデックス、メトリクス特化InfluxDB 3、VictoriaMetrics、Prometheus、M3DB、GreptimeDB
カラムストアファミリーOLAP出身で時系列も得意ClickHouse、QuestDB、Apache Druid、Apache Pinot

ワークロード別に見ると。

ワークロード推奨候補理由
KubernetesメトリクスPrometheus + Mimir、VictoriaMetrics標準互換、カーディナリティ管理ツール
APMメトリクス + トレースOTel + ClickHouseまたはGreptimeDBOTLPを直接受信、カラム圧縮
IoTセンサー(数十万デバイス)InfluxDB 3、TDengine、TimescaleDB圧縮率、ダウンサンプリング、エッジ統合
金融ティックデータQuestDB、ClickHouse、TimescaleDBナノ秒精度、高速時系列JOIN
一般分析 + 時系列ClickHouse、TimescaleDBSQLの親しみやすさ、非時系列との結合
ログ(メトリクスと一緒に)ClickHouse、GreptimeDB全文 + 時間フィルタ

ひとつ重要な洞察 — 時系列DBをひとつに統一しようとする試みはほとんど失敗する。k8s観測とIoTを同じDBに押し込むとカーディナリティモデルが根本的に異なるため、どちらかが壊れる。チームのワークロードをまず定義し、適切なツールを選ぶ。


2. TimescaleDB — Postgresの上の時系列

TimescaleDBは時系列DBというより時系列フレンドリーなPostgres拡張だ。2017年に登場して以来、「SQLは大好きだが時系列の圧縮とパーティショニングは自動化したい」というチームの圧倒的1番手。

コアコンセプト

強み

弱み

いつ選ぶか

-- 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');

-- 時間チャンクの自動圧縮ポリシー
ALTER TABLE metrics SET (
  timescaledb.compress,
  timescaledb.compress_segmentby = 'device_id'
);
SELECT add_compression_policy('metrics', INTERVAL '7 days');

-- 連続集計
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) — 完全に生まれ変わったInfluxDB

InfluxDB 1.x → 2.x → 3.xと進む過程で、内部は2度書き直された。2.xのFlux言語はほぼ廃止扱いで、3.xはApache DataFusionクエリエンジン + Apache Arrowメモリフォーマット + Apache Parquetストレージの上に作り直された。実質「InfluxDBという名のArrow時系列データベース」。

コアの変化

強み

弱み

いつ選ぶか

-- InfluxDB 3 SQL例 (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と高速ingestの出会い

QuestDBはJavaで書かれた時系列特化のカラムストアだ。コアの売り文句は「Postgresワイヤープロトコル + InfluxDB Line Protocolを同時に受ける」。SQLを使いつつInfluxDB互換クライアントでingestできるという意味。

コアコンセプト

強み

弱み

いつ選ぶか

-- QuestDB ASOF JOIN — 時系列特化
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 — カラムストアの圧倒的性能

ClickHouseは厳密には時系列DBではなくOLAPカラムストアだ。だが時間カラムでソート・パーティション分割すれば時系列DBとして使え、他の時系列DBを圧倒する分析性能を出す。2024-2026年で観測領域で最も採用されたバックエンドの1つ。

コアコンセプト

強み

弱み

いつ選ぶか

-- ClickHouse: 時系列 + Gorilla圧縮
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);

-- 事前集計マテリアライズドビュー
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互換 + 軽量

VictoriaMetrics(VM)を1文で言うと「Prometheusと互換性があるが、より速く、軽く、ディスク効率が良い」。PromQLをほぼそのまま受け、その上にMetricsQLという拡張を載せる。2020年から着実に成長し、2026年には大規模メトリクスバックエンドの標準オプションの1つになった。

コアコンセプト

強み

弱み

いつ選ぶか

# vmagentでPrometheusスクレイプを代替
vmagent \
  -promscrape.config=/etc/scrape_config.yml \
  -remoteWrite.url=http://vmstorage:8480/insert/0/prometheus/

# PromQLそのまま
sum(rate(http_requests_total[5m])) by (service)

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

7. Prometheus + Mimir — Kubernetesメトリクスの標準

Prometheusは2026年でもKubernetesメトリクスの事実上の標準だ。CNCF Graduatedプロジェクトでどこでも動く。限界は明確 — 長期保管と水平スケール。これを解決するオプションの中で最も普及しているのがGrafana Mimir(Cortexの後継)。

Prometheusの位置

Mimirが解決すること

競合

オプション特徴
Grafana MimirCortex後継、Grafana Labs主導
Thanosサイドカーモデル、同じ問題への別解
VictoriaMetrics clusterよりシンプル、MetricsQL拡張
Cortex事実上Mimirに吸収

強み・弱み

強み:Kubernetes・CNCFエコシステムと完璧に統合、exporterプール、標準PromQL。 弱み:メトリクス以外(ログ・トレース)は別スタック、カーディナリティ爆発時の運用が重い。

いつ選ぶか


8. GreptimeDB — Rust基盤の新鋭

GreptimeDBは2022年に登場したRust基盤の時系列DBで、2024-2026年に急成長した。目標は野心的 — メトリクス・ログ・トレースを1つのDBで、クラウドネイティブに

特徴

強み

弱み

いつ選ぶか


9. M3DB / TDengine / OpenTSDB — その他候補

M3DB

TDengine

OpenTSDB

Apache Druid / Pinot


10. 圧縮戦略 — Gorilla、ZSTD、Snappy

時系列DBではディスク使用量がそのままコストだ。だから2026年のあらゆるメジャーTSDBは複数のコーデックを組み合わせる

時系列特化コーデック

汎用コーデック(上の段の後に)

組み合わせパターン

ほとんどの時系列DBは「時系列特化コーデック → 汎用コーデック」をパイプライン適用する。例えばClickHouse:

この組み合わせで通常原本比5〜20倍圧縮。ディスクコストは1/10以下に下がる。


11. カーディナリティ爆発 — 時系列DBの1番の敵

「カーディナリティ」は時系列DBで最も頻繁に爆発する項目だ。定義はシンプル — ユニークな時系列の個数

何がカーディナリティを爆発させるか

各時系列は通常以下のように定義される。

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

ラベルの値の組み合わせ数がそのままseries数だ。危険なラベルの例:

爆発すると何が起きるか

解決方法

  1. ラベル衛生 — 爆発ラベルを特定してメトリクスから外す、もしくはトレース / ログに移す。
  2. カーディナリティ可視性 — VictoriaMetricsのvmui cardinality explorer、Prometheusのカーディナリティクエリ、Grafana Mimirの分析。
  3. カーディナリティ制限 — 1 seriesあたりのラベル値上限をingest側で強制。
  4. Drop / Rewriteルール — スクレイプ段階で危険ラベルを除去。
  5. サンプリング・集計 — 全seriesを保管せず、コア集計のみ。

「トレースに送れ」原則

高カーディナリティのディメンション(ユーザー・リクエストID・トレースID)はメトリクスではなくトレースに送るのが、2026年の標準答え。メトリクスは集計、トレースは詳細。


12. 標準 — Prometheus exposition、OpenMetrics、OTel

異なる時系列DBを使っていても、データを流し込む標準は徐々に統合されている。

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

推奨アプローチ

新規プロジェクトならOTel(OTLP)を1級シグナルに、バックエンドに応じてPrometheus形式またはOTLPを直接受信。メジャーTSDBはすべて両方サポート。


13. IoT vs APM vs 金融 — 誰が何を選ぶべきか

総合へ。ドメイン別の2026年5月時点の推奨。

Kubernetes / 観測(メトリクス中心)

マルチシグナル観測(メトリクス + ログ + トレース統合)

IoT / センサー(数十〜数百万デバイス)

金融市場データ(ティック・気配値)

一般OLAP + 時系列

アンチパターン7つ

  1. 「時系列DB1つで全部」 — ワークロードを分けないとカーディナリティモデルが壊れる。
  2. メトリクスにユーザーID・リクエストIDを入れる — カーディナリティ爆発。
  3. 圧縮コーデックをデフォルトのまま — カラム特性に合わせれば5倍差。
  4. 保持ポリシーなしで無限蓄積 — ディスクコストが1年で暴走。
  5. continuous aggregateを使わない — 毎回rawから集計。
  6. Prometheus単独で1年+保管 — Mimir / VictoriaMetrics / Thanosのどれかを。
  7. メトリクスとトレースの責務混同 — 詳細はトレース、集計はメトリクス。

次の記事予告

「時系列は1つのワークロードではない。メトリクス・ログ・トレース・IoTは同じ形に見えても違う問題だ。違うツールで解くのが正解だ。」

— 時系列データベース 2026、了。


参考 / References

コメント

まだコメントはありません。

ログインするとコメントできます