ClickHouse vs. TimescaleDB: Analytics-Datenbanken im Vergleich 2026
Wenn Standard-PostgreSQL für Analytics zu langsam wird und Elasticsearch zu komplex, kommen spezialisierte Analytics-Datenbanken ins Spiel. ClickHouse und TimescaleDB sind zwei populäre Open-Source-Lösungen – aber mit fundamentell verschiedenen Ansätzen. Dieser Vergleich zeigt, welche für welche Anwendungsfälle geeignet ist.
Das Problem: OLTP vs. OLAP
Traditionelle Datenbanken wie PostgreSQL sind für OLTP (Online Transaction Processing) optimiert – viele kleine, schnelle Transaktionen. Für Analytics und Zeitreihendaten sind andere Anforderungen entscheidend:
- OLAP: Analytische Queries über Milliarden Zeilen in Sekunden
- Zeitreihen: Effiziente Speicherung von sequenziellen, timestamped Daten
- Compression: Drastische Datenreduktion für historische Daten
- Aggregations-Performance:
GROUP BY,COUNT,SUMüber riesige Tabellen
ClickHouse: Columnar OLAP Engine
ClickHouse wurde 2016 von Yandex für deren Webanalytics-Platform entwickelt und 2016 als Open Source veröffentlicht. Es ist heute eine eigenständige Firma (ClickHouse Inc.) mit Cloud-Angebot.
Architektur
ClickHouse ist eine spaltenorientierte Datenbank (columnar) – im Gegensatz zu zeilenorientierten Datenbanken (row-oriented) wie PostgreSQL:
Row-orientiert (PostgreSQL):
Row 1: [id=1, user="alice", event="click", ts=1234567890, value=42]
Row 2: [id=2, user="bob", event="view", ts=1234567891, value=7]
Spaltenorientiert (ClickHouse):
id: [1, 2, 3, ...]
user: ["alice", "bob", ...]
event: ["click", "view", ...]
ts: [1234567890, 1234567891, ...]
value: [42, 7, ...]
Warum das schneller ist: Analytics-Queries lesen meist nur 2-5 von 50+ Spalten. Columnar-Storage liest nur die nötigen Spalten von Disk, was die I/O drastisch reduziert.
ClickHouse-Features
MergeTree Engine-Familie:
CREATE TABLE events (
event_date Date,
event_time DateTime,
user_id UInt64,
event_type LowCardinality(String),
value Float64
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_type, user_id, event_time);
- MergeTree: Basis-Engine, gut für alles
- ReplacingMergeTree: Deduplication von Rows
- SummingMergeTree: Automatische Aggregation
- AggregatingMergeTree: Materialized Views auf Engine-Ebene
- CollapsingMergeTree: Update-Pattern für immutable Log-basierte DBs
SQL-Funktionen:
-- ClickHouse: Milliarden Zeilen in Sekunden
SELECT
toStartOfHour(event_time) AS hour,
event_type,
count() AS cnt,
sum(value) AS total
FROM events
WHERE event_date BETWEEN '2026-01-01' AND '2026-08-21'
AND event_type IN ('click', 'purchase')
GROUP BY hour, event_type
ORDER BY hour;
Performance-Eigenschaften:
- Bis zu 10 Milliarden Zeilen/Sekunde Scan-Rate
- Typische Aggregations-Queries: <1 Sekunde über 1 Milliarde Zeilen
- LZ4/ZSTD-Kompression: Typisch 10:1 Kompressionsrate
- Vektorisierte Ausführung: SIMD-Optimierungen für moderne CPUs
Deployment:
# ClickHouse mit Docker
services:
clickhouse:
image: clickhouse/clickhouse-server:23.12
ports:
- "8123:8123" # HTTP-Interface
- "9000:9000" # Native Protocol
volumes:
- clickhouse-data:/var/lib/clickhouse
- ./config.xml:/etc/clickhouse-server/config.xml
ulimits:
nofile:
soft: 262144
hard: 262144
Ökosystem:
- Grafana: Natives Plugin für Dashboards
- dbt: Vollständig unterstützt
- Apache Kafka: Kafka-Engine für direktes Streaming
- S3/GCS: Tiered Storage, S3-Tabellen direkt querybar
- Metabase: Business Intelligence ohne Vorkenntnisse
TimescaleDB: PostgreSQL für Zeitreihendaten
TimescaleDB ist eine PostgreSQL-Extension (kein eigenständiges DBMS) und wurde 2017 von Timescale Inc. veröffentlicht. Es erweitert PostgreSQL um Zeitreihen-Optimierungen.
Architektur: Hypertables
TimescaleDB führt das Konzept der Hypertable ein – eine normale PostgreSQL-Tabelle, die intern automatisch in Chunks (Zeitabschnitte) aufgeteilt wird:
-- Normale PostgreSQL-Tabelle erstellen
CREATE TABLE metrics (
time TIMESTAMPTZ NOT NULL,
device_id INTEGER,
temperature DOUBLE PRECISION,
humidity DOUBLE PRECISION
);
-- Zu Hypertable konvertieren (partitioniert nach Zeit)
SELECT create_hypertable('metrics', 'time');
-- Optional: Data Retention Policy
SELECT add_retention_policy('metrics', INTERVAL '90 days');
-- Kompression aktivieren
ALTER TABLE metrics SET (
timescaledb.compress,
timescaledb.compress_segmentby = 'device_id'
);
SELECT add_compression_policy('metrics', INTERVAL '7 days');
TimescaleDB-Features
Zeitreihen-spezifische Funktionen:
-- Gap-Filling für fehlende Datenpunkte
SELECT time_bucket_gapfill('1 hour', time) AS hour,
device_id,
locf(avg(temperature)) AS temp -- Last Observation Carried Forward
FROM metrics
WHERE time > NOW() - INTERVAL '24 hours'
GROUP BY hour, device_id;
-- Moving Average über Zeitfenster
SELECT time,
device_id,
temperature,
avg(temperature) OVER (
PARTITION BY device_id
ORDER BY time
ROWS BETWEEN 9 PRECEDING AND CURRENT ROW
) AS moving_avg_10
FROM metrics;
Continuous Aggregates:
-- Materialized View, die automatisch aktualisiert wird
CREATE MATERIALIZED VIEW hourly_metrics
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 hour', time) AS bucket,
device_id,
avg(temperature) AS avg_temp,
max(humidity) AS max_humidity
FROM metrics
GROUP BY bucket, device_id;
-- Auto-Refresh einrichten
SELECT add_continuous_aggregate_policy('hourly_metrics',
start_offset => INTERVAL '2 hours',
end_offset => INTERVAL '15 minutes',
schedule_interval => INTERVAL '15 minutes'
);
PostgreSQL-Kompatibilität:
- Alle PostgreSQL-Extensions weiterhin nutzbar (PostGIS, pg_vector, etc.)
- JOINs mit regulären PostgreSQL-Tabellen
- Volle ACID-Compliance
- Pg_dump/pg_restore für Backups
Direkter Vergleich: ClickHouse vs. TimescaleDB
| Kriterium | ClickHouse | TimescaleDB |
|---|---|---|
| Typ | Eigenständige OLAP-DB | PostgreSQL-Extension |
| Abfragesprache | ClickHouse-SQL | Standard SQL |
| OLAP-Performance | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Zeitreihen-Spezifisch | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Kompression | 10:1 (LZ4/ZSTD) | 20:1 (Timescale compress) |
| ACID-Compliance | Begrenzt (eventual) | Vollständig (PostgreSQL) |
| UPDATE/DELETE | Async, aufwändig | Standard SQL |
| JOINs | Eingeschränkt empfohlen | Vollständig |
| PostgreSQL-Kompatibilität | Nein | Ja (direkt) |
| Gap-Filling | Manuell via SQL | Native Funktionen |
| Continuous Aggregates | Materialized Views | Native, auto-refresh |
| Streaming-Ingest | Kafka-Engine nativ | Logical Replication |
| Cloud-Managed | ClickHouse Cloud | Timescale Cloud |
| Lizenz | Apache 2.0 | Apache 2.0 (Community) |
| RAM-Bedarf | 4+ GB | 1+ GB |
Performance-Benchmarks
In typischen Szenarien (1 Milliarde Zeilen, Aggregation über 30 Tage):
| Query-Typ | ClickHouse | TimescaleDB |
|---|---|---|
| Simple COUNT | 0,3 Sek. | 4,2 Sek. |
| GROUP BY + SUM | 0,8 Sek. | 12 Sek. |
| Multi-Column-Filter | 1,2 Sek. | 8,5 Sek. |
| Continuous Agg. Query | 0,05 Sek. | 0,08 Sek. |
Bei Continuous Aggregates holt TimescaleDB auf – die vorberechneten Ergebnisse sind vergleichbar schnell.
Anwendungsfälle
ClickHouse ist ideal für:
- Web-Analytics: Seitenaufrufe, Klickpfade, Nutzerverhalten
- Business Intelligence: Umsatz, Conversion, Funnel-Analysen
- Log-Analyse: Milliarden Logs auswerten, Elasticsearch ersetzen
- Ad-Tech: Real-Time Bidding, Impression-Tracking
- Security Analytics: SIEM-Datenbasis
TimescaleDB ist ideal für:
- IoT/Sensor-Daten: Temperatur, Füllstand, Maschinendaten
- Monitoring/Observability: Prometheus-Daten langfristig speichern (Promscale)
- Finanz-Zeitreihen: Kurse, Transaktionen mit strikter ACID-Anforderung
- PostgreSQL-Migration: Du willst PostgreSQL-Kompatibilität behalten
- DevOps-Metriken: Infrastruktur-Metriken mit komplexen JOINs auf Config-Daten
Integration mit Grafana
Beide Datenbanken integrieren sich hervorragend mit Grafana:
# ClickHouse Grafana-Datasource
- name: ClickHouse
type: grafana-clickhouse-datasource
url: http://clickhouse:8123
jsonData:
defaultDatabase: default
# TimescaleDB via PostgreSQL-Plugin
- name: TimescaleDB
type: postgres
url: timescaledb:5432
database: metrics
jsonData:
timescaledb: true
Fazit: Verschiedene Werkzeuge für verschiedene Aufgaben
ClickHouse ist die richtige Wahl für analytische Workloads mit sehr großen Datenmengen, wo rohe Query-Performance zählt und ACID nicht zwingend nötig ist.
TimescaleDB überzeugt, wenn PostgreSQL-Kompatibilität wichtig ist, echte Zeitreihen-Semantik (Gap-Filling, Continuous Aggregates) gebraucht wird oder das Team bereits PostgreSQL kennt.
Kurzempfehlung:
- 🟢 Web-Analytics, Logs, Business Intelligence → ClickHouse
- 🟢 IoT, Sensor-Daten, Monitoring-Metriken, PostgreSQL-Team → TimescaleDB
- 🟡 Beide nötig? → ClickHouse als Analytics-Layer, TimescaleDB als Operational-Timeseries-Store
Weiterführende Artikel
- PostgreSQL vs. MySQL – Welche relationale Datenbank passt zu deinem Projekt?
- MongoDB vs. PostgreSQL – SQL oder NoSQL – der grundlegende Vergleich für Entwickler