Zum Hauptinhalt springen

Überblick über Zeitreihen-Datenbanken

Die Speicherschicht des Data Lake ist die Aster TSDB, optimiert für industrielle Zeitreihen-Workloads (apache-cassandra-timeseries). Sie ist ein firmeninterner Fork von Apache Cassandra cassandra-6.0, und CQL-Syntax sowie Disk-Format sind unverändert zum Upstream – vorhandene 6.0-Daten werden direkt gelesen, neue Funktionen müssen alle aktiviert sein, um zu funktionieren.

„Zeitreihen-Engine (TSE)“ und „das andere Ding“

Die Namen sind ähnlich, daher ist dies die häufigste Verwechslungsquelle. Was sie speichern, ist unterschiedlich.

Zeitreihen-Datenbank (dieses Dokument)Zeitreihen-Engine (TSE)
Was wird gespeichertSensorwerte – Tag-Punkte aus dem Feld(pp.tm_tag_point)Metriken – wie PLANTPULSE.JMX.* · PLANTPULSE.EDGE.*, systemeigene Kennzahlen
CharakterAllgemeine Zeitreihen-DatenbankMetrik-spezifisch
Port9042 (CQL)7800 (Klartext) · 7801 (TLS)
AbfrageCQL – eingebaute Funktionen wie time_bucket_gapfillTQL
Dokumentationdieser AbschnittZeitreihen-Engine

„Wie war die Temperatur der Anlage?“ gehört hierher, „Wie viele Datensätze hat der Erfasser gestern verarbeitet?“ gehört zur Engine.

Die Engine schreibt zwar in denselben Aster-TSDB-Ring, aber Keyspace und Schema sind unterschiedlich, daher werden Metriken, die in der Engine liegen, nicht gefunden, wenn man mit CQL über Tag-Tabellen sucht.

Was verbessert sich​

Feld-Zeitreihen haben ihre eigenen Eigenschaften. Pro Tag werden sekündlich unendlich viele Daten angehäuft, aus regulatorischen Gründen müssen sie über Jahre aufbewahrt werden, ein Edge, dessen Verbindung unterbrochen war, schiebt mehrere Tage Daten auf einmal hoch (verzögerte Erfassung), und Abfragen sind fast immer „dieser Tag, dieser Zeitraum“. Mit Standard-Cassandra ist das auch machbar, aber Kompression, Aufbewahrung und Aggregation bleiben vollständig der Anwendung überlassen. Dieser Fork verlagert diese Aufgaben in die Datenbank.

Gewünschte AktionWas diese Datenbank tutDokumentation
Bucketing, Aggregation, Interpolation serverseitig durchführen21 CQL-Funktionen + Gap-FillZeitreihenfunktionen
Alte Daten automatisch komprimierenGestufte Speicherung – Abfragen bleiben unverändertGestufte Speicherung
Nach Ablauf der Aufbewahrungsdauer vollständig löschenZeitreihen-Kompaktierung (TSCS)Zeitreihen-Kompaktierung
Log- und Ereignistexte per Teilstring suchenVolltextsuche – inklusive KoreanischVolltextsuche

Wenn man alle drei gleichzeitig aktiviert​

쓰기 ──▶ [ 핫 구간 ] 최근 데이터. 평소대로 행으로 저장·질의
│
│ hot_window 를 지나면 (계층형 저장)
▼
[ 콜드 청크 ] 컬럼 지향으로 압축. SELECT 가 알아서 합쳐 읽는다
│
│ cold_window / retention 이 지나면
▼
통째로 삭제 컴팩션 없이 창 단위로 (TSCS)

TSCS und gestufte Speicherung sind voneinander unabhängig. Man kann nur eine aktivieren; die risikoärmere Option ist, zuerst TSCS zu aktivieren.

Messwerte – Tabellenform im Betrieb, 20 Millionen Zeilen​

Basierend auf tm_tag_point (8 allgemeine Spalten), 234 Hosts, Chunk-Format v4.

ElementOhne StufungMit StufungEffekt
Speicherbedarf237,8 MB33,3 MB7,1-fach kleiner (11,9 → ca. 1,7 Bytes pro Zeile)
count(*) (Partition mit 40.000 Zeilen)303 ms50 ms6,1-fach schneller
time_bucket + Aggregation150–270 ms31–64 ms3–6-fach schneller
Gap-Fill (locf · interpolate)162–284 ms30–53 ms5,4-fach schneller
Stündlicher Durchschnitt über 90 Tags (3,6 Mio. Zeilen)14,9 s4,2 s3,5-fach schneller
Kompression beschleunigt auch Abfragen

Normalerweise ist Kompression ein Tausch von Speicher gegen Geschwindigkeit; hier wurden alle gemessenen Abfragen gleich schnell oder schneller – weil weniger Bytes gelesen werden müssen. Auch Scans ohne Bereich werden nicht langsamer, da Fenster in Abfragereihenfolge einzeln entpackt werden und die Verarbeitung stoppt, sobald LIMIT erreicht ist.

Zwei Hinweise
  • Aggregation über einen vollständigen Scan ohne Partitionsschlüssel liefert in gestuften Tabellen falsche Werte. Dieser Pfad führt keine Chunk-Zusammenführung durch.
  • Die Speicherreduzierung hängt von der Tabellenform ab. Die minimale Form ohne konstante Spalten und ohne vollständig NULL-Spalten (ein einzelner hochentropischer double) entspricht nicht den obigen Werten. Überprüfen Sie es an Ihrer eigenen Tabelle, bevor Sie entscheiden.

Wo befindet es sich​

Unter $PP_HOME/plantpulse-storage/db/cassandra geht es zu apache-cassandra-timeseries-<version>.jar. Die Version des laufenden Prozesses prüfen Sie so:

docker exec plantpulse-datalake nodetool version

Version, Quelle und Aktualisierungsverfahren sind in der Dokumentation für Betreiber enthalten und gehören nicht zu diesem Handbuch.


Weiterführendes​

Gewünschte AktionDokumentation
Bucketing, Gap-Fill, Interpolation verwendenZeitreihenfunktionen
Alte Werte auf günstigere Speicherung auslagernGestufte Speicherung
Kompaktierung verstehenZeitreihen-Kompaktierung (TSCS)
Textinhalte durchsuchenVolltextsuche
Direkt mit CQL abfragenDatenabfrage

Wenn Sie Metriken (Systemkennzahlen) suchen, sind Sie hier falsch → Zeitreihen-Engine