Home Up PDF Prof. Dr. Ingo Claßen
Zeitreihendatenbanken - ADBKT

Zeitreihendaten

Warum Zeitreihendatenbanken

  • Erfassung von Ereignissen, die in hoher Frequenz auftreten
  • Hohe Schreibrate, Millionen Punkte/Sekunde möglich
  • Append-only: neue Daten werden angehängt, nicht geändert
  • Effizientes Speichermanagement notwendig, Kompression
  • Abfrage einer sehr großen Anzahl von Zeitreihen
  • Zeit als primärer Schlüssel
  • Optimiert für sequentielle Daten
  • Neueste Daten werden am häufigsten gelesen (Hot Data)
  • Automatische Löschung/Komprimierung alter Daten, Downsampling
  • Optimiert für zeitbasierte Abfragen

Anwendungsfälle

Hohe Kardinalität

Kardinalität

  • Kardinalität = Anzahl eindeutiger Werte in einer Kennung
  • Jede Kennungs-Kombination = eine eigene Zeitreihe

Beispiel IOT

  • 10.000 Smarthomes (Kennung = Smarthome-ID)
  • 10 Sensoren pro Smarthome (Kennung = Sensor-ID)
  • 10.000 × 10 = 100.000 Zeitreihen

Möglichst vermeiden

  • User-ID, Session-ID, Request-ID als Kennung → Millionen Zeitreihen
  • Präzise GPS-Koordinaten als Kennung → ∞ Zeitreihen
  • Faustregel: < 10.000 eindeutige Werte je Kennung

Typen von Zeitreihendaten

Metrics (Regular)

  • Gleichmäßige Zeitabstände (z.B. alle 15 s)
  • Polling-/Scraping-Modell (Pull)
  • Beispiele: CPU-Auslastung, Temperatur, Netzwerkdurchsatz
  • Einfach zu speichern und zu aggregieren

Events (Irregular)

  • Ungleichmäßige, ereignisgesteuerte Abstände
  • Push-Modell: Datenpunkt bei jedem Ereignis
  • Beispiele: HTTP-Anfragen, Transaktionen, Fehler
  • Erfordern Interpolation oder Bucketing für Aggregationen

Zeitreihendatenbanken

InfluxDB

  • Speziell für Zeitreihendaten entwickelt, sehr effizient bei hoher Schreiblast
  • Version 3 basiert auf Apache Datafusion, SQL
  • Integrierte Funktionen für Retention Policies und Downsampling

Prometheus

  • Open-Source Monitoring- und Alerting-System, stark im DevOps-Umfeld
  • Pull-basiertes Modell (scraped Metriken über HTTP)
  • Eigene Query-Sprache (PromQL) für flexible Auswertungen

kdb+

  • Hochperformante, spaltenorientierte Zeitreihendatenbank, oft im Finanzbereich eingesetzt
  • Sehr schnelle In-Memory-Analysen großer Datenmengen
  • Verwendet die kompakte Programmiersprache q für Abfragen und Analysen

TimescaleDB

  • Erweiterung für PostgreSQL, kombiniert SQL mit Zeitreihenfunktionen
  • Automatische Partitionierung (Hypertables) für skalierbare Speicherung
  • Gut integrierbar in bestehende SQL-Ökosysteme und Tools

Zeitbasierte Abfragen

  • Zeitbereichsabfragen: WHERE time >= now() - 1h
  • Aggregationen über Zeitfenster, Bucketing
  • Fensterarten
    • Tumbling Window
    • Hopping Window
    • Sliding Window
    • Session Window

Tumbling Window

  • Feste Größe: gleichlange, nicht-überlappende Zeitfenster
  • Jedes Ereignis gehört zu genau einem Fenster
  • Lückenlose Abdeckung: kein Ereignis wird übersprungen
  • Pro Fenster wird genau ein Ergebnis ausgegeben
  • Typische Anwendung: Zählen, Summieren, Durchschnitt je Periode

Hopping Window

  • Fenstergröße und Hop-Größe sind unabhängig
  • Hop < Fenstergröße → überlappende Fenster
  • Ereignisse im Überlappungsbereich werden in mehreren Fenstern gezählt
  • Hop = Fenstergröße → entspricht Tumbling Window
  • Anwendung: gleitende Statistiken mit fester Auflösung

Sliding Window

  • Fenster gleitet über den Ereignisstrom
  • Neuberechnung Fensterinhalt nur, wenn ein neues Ereignis eintritt oder ein altes Ereignis das Fenster verlässt
  • Ausgabe bei Beispiel, wenn 3 Einheiten im Fenster sind
  • Kein fixes Raster – Ausgabe ereignisgesteuert
  • Jedes Ereignis kann in vielen Fenstern enthalten sein
  • Anwendung: Anomalieerkennung, gleitende Schwellwerte

Session Window

  • Keine feste Größe: das Fenster passt sich der Aktivität an
  • Fenster öffnet sich beim ersten Ereignis einer Aktivitätsserie
  • Fenster schließt, wenn für ≥ Timeout kein Ereignis eintrifft
  • Optional: maximale Fensterdauer (max. duration)
  • Anwendung: Benutzer-Sessions, Geräteaktivität, Log-Cluster

Retention Policies & Downsampling

Retention Policy

  • Automatisches Löschen nach definierter Zeitdauer
  • Mehrere Policies pro Datenbank möglich
  • Beispiel: Raw 7 Tage, Aggregiert 1 Jahr

Downsampling

Horizontale Skalierung

Strategien

  • Sharding nach Zeit: jeder Knoten verwaltet Zeitbereich
  • Sharding nach Metrik: Metriken aufgeteilt auf Knoten
  • Replikation: Faktor 2–3 für Ausfallsicherheit
  • Object Storage: Langzeitarchiv in S3 / GCS / Azure

Zeitreihen-Komprimierung

Methoden

  • Delta-Encoding: Differenz zum Vorgänger speichern
  • Delta-of-Delta: bei gleichmäßigen Zeitstempeln
  • Gorilla XOR: XOR aufeinanderfolgender Floats
  • Simple8b: Bit-Packing für Integer-Werte
  • Run-Length Encoding: für Duplikate

Kompressionsrate: 10–100× je nach Datenmuste