Ü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.
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 gespeichert | Sensorwerte – Tag-Punkte aus dem Feld(pp.tm_tag_point) | Metriken – wie PLANTPULSE.JMX.* · PLANTPULSE.EDGE.*, systemeigene Kennzahlen |
| Charakter | Allgemeine Zeitreihen-Datenbank | Metrik-spezifisch |
| Port | 9042 (CQL) | 7800 (Klartext) · 7801 (TLS) |
| Abfrage | CQL – eingebaute Funktionen wie time_bucket_gapfill | TQL |
| Dokumentation | dieser Abschnitt | Zeitreihen-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 Aktion | Was diese Datenbank tut | Dokumentation |
|---|---|---|
| Bucketing, Aggregation, Interpolation serverseitig durchführen | 21 CQL-Funktionen + Gap-Fill | Zeitreihenfunktionen |
| Alte Daten automatisch komprimieren | Gestufte Speicherung – Abfragen bleiben unverändert | Gestufte Speicherung |
| Nach Ablauf der Aufbewahrungsdauer vollständig löschen | Zeitreihen-Kompaktierung (TSCS) | Zeitreihen-Kompaktierung |
| Log- und Ereignistexte per Teilstring suchen | Volltextsuche – inklusive Koreanisch | Volltextsuche |
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.
| Element | Ohne Stufung | Mit Stufung | Effekt |
|---|---|---|---|
| Speicherbedarf | 237,8 MB | 33,3 MB | 7,1-fach kleiner (11,9 → ca. 1,7 Bytes pro Zeile) |
count(*) (Partition mit 40.000 Zeilen) | 303 ms | 50 ms | 6,1-fach schneller |
time_bucket + Aggregation | 150–270 ms | 31–64 ms | 3–6-fach schneller |
| Gap-Fill (locf · interpolate) | 162–284 ms | 30–53 ms | 5,4-fach schneller |
| Stündlicher Durchschnitt über 90 Tags (3,6 Mio. Zeilen) | 14,9 s | 4,2 s | 3,5-fach schneller |
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.
- 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 Aktion | Dokumentation |
|---|---|
| Bucketing, Gap-Fill, Interpolation verwenden | Zeitreihenfunktionen |
| Alte Werte auf günstigere Speicherung auslagern | Gestufte Speicherung |
| Kompaktierung verstehen | Zeitreihen-Kompaktierung (TSCS) |
| Textinhalte durchsuchen | Volltextsuche |
| Direkt mit CQL abfragen | Datenabfrage |
Wenn Sie Metriken (Systemkennzahlen) suchen, sind Sie hier falsch → Zeitreihen-Engine