InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
Zeitreihen Datenbank - ist eine Art von Speicher, der für zeitgebundene Daten optimiert ist. Jeder Eintrag in einem solchen System hat einen Zeitstempel, und die Zeit ist das Hauptmerkmal, nach dem diese Daten gespeichert, gelesen und analysiert werden. Solche Datenbanken sind für große Ereignisströme geschaffen, die kontinuierlich eintreffen und überwiegend nach der Aufzeichnung nicht mehr verändert werden.
Solche Datenbanken werden im Servermonitoring, in Finanzsystemen, in der Webtraffic-Analyse, in IoT-Geräten oder in beliebigen Prozessen eingesetzt, in denen es wichtig ist, die Dynamik von Kennzahlen zu sehen. Zum Beispiel die Veränderungen der CPU-Auslastung in den letzten Stunden, die Temperatur eines Sensors jede Sekunde oder die Schwankungen eines Börsenindex im Laufe des Tages.
Zeitreihen-Datenbanken bieten schnelles Lesen großer Zeiträume, effiziente Aggregationen, Kompression und die Möglichkeit, alte Daten schnell zu löschen, ohne die Leistung zu beeinträchtigen.
Zu den beliebten Implementierungen gehören InfluxDB, TimescaleDB, Prometheus, VictoriaMetrics und sogar Elasticsearch, das häufig für die Zeitreihenanalyse verwendet wird, da es in der Lage ist, Ereignisse schnell zu indizieren und aggregierte Abfragen auszuführen. Dies macht solche Datenbanken unverzichtbar für Monitoring-Systeme, Analysen und die Arbeit mit hochfrequenten Daten, bei denen die Zeit ein entscheidender Faktor ist.
MySQL und PostgreSQL können für Zeitreihen verwendet werden, aber sie skalieren schlecht unter solchen Lasten. Der Grund liegt nicht darin, dass sie "schlecht" sind, sondern darin, dass ihre Architektur nicht für sehr häufige Einfügungen und riesige Datenmengen, die genau nach Zeit organisiert sind, ausgelegt ist.
Warum MySQL und PostgreSQL nicht für Zeitreihen geeignet sind
In klassischen relationalen Datenbanken werden Einträge in Tabellen gespeichert, und Indizes in B-Bäumen (B-tree). Wenn Daten kontinuierlich über die Zeit hinzugefügt werden (jede Sekunde oder sogar jede Millisekunde), beginnt der Index schnell "aufzublähen", die Speichersegmente fragmentieren, und häufige INSERTs erzeugen eine Belastung für die Seitenverriegelung und das Transaktionsprotokoll. Infolgedessen beginnt die Datenbank langsamer zu werden, insbesondere wenn die Daten nicht mehr in Millionen, sondern in Hunderten Millionen oder Milliarden von Zeilen gemessen werden.
Ein zweiter Nachteil sind Aggregationen über große Zeiträume. Zum Beispiel die "Durchschnittstemperatur über drei Monate" in MySQL oder PostgreSQL zu erhalten, ist ein langsames Scannen durch eine riesige Tabelle. In Zeitreihen-Datenbanken werden diese Operationen sofort ausgeführt, da sie sofort für Bereichsanfragen optimiert sind und die Daten in einem leicht aggregierbaren Format speichern.
Ein weiteres Problem ist das Löschen alter Daten. In PostgreSQL verursacht dies massives Bloat und erfordert VACUUM, das das System ständig überlastet. In MySQL ist die Situation nicht besser: Wenn eine große Anzahl alter Einträge gelöscht wird, werden Tabellen und Indizes fragmentiert, und die Leistung sinkt. In Zeitreihen-Datenbanken ist dies architektonisch gelöst: Alte Daten werden in separaten "Stücken" gespeichert und einfach in ganzen Blöcken ohne Belastung verworfen.
Außerdem gibt es in herkömmlichen SQL-Datenbanken keine effiziente Datenkompression, die speziell für Zeitwertfolgen optimiert ist. In Zeitreihen-Speichern (InfluxDB, VictoriaMetrics, Prometheus) ermöglicht die Kompression, dieselben Daten 5–20 Mal kompakter zu speichern.
Zusammenfassend lässt sich sagen: MySQL/PostgreSQL funktionieren hervorragend mit klassischen Transaktionsdaten, aber bei großen Strömen von Telemetrie, Protokollen oder Sensordaten sinkt ihre Leistung schnell. Zeitreihen-Datenbanken sind speziell für solche Lasten geschaffen: Sie optimieren das Schreiben, Speichern, Lesen und Löschen von zeitgebundenen Daten.
Dieser Beitrag hat noch keine Ergänzungen vom Autor.