Database
 sql >> Datenbank >  >> RDS >> Database

Eine Einführung in Zeitreihendatenbanken

Die Zeiten, in denen „die“ Datenbank ein einziges relationales Datenbankmanagementsystem war, das normalerweise auf dem leistungsstärksten Server im Rechenzentrum installiert war, sind lange vorbei. Eine solche Datenbank bediente alle Arten von Anfragen – OLTP, OLAP, alles, was geschäftlich erforderlich ist. Heutzutage laufen Datenbanken auf handelsüblicher Hardware, sie sind auch in Bezug auf die Hochverfügbarkeit ausgeklügelter und auf die Verarbeitung bestimmter Arten von Datenverkehr spezialisiert. Durch die Spezialisierung erreichen sie eine viel bessere Leistung – alles ist optimiert, um mit einer bestimmten Art von Daten umzugehen:Optimierer, Speicher-Engine, sogar die Sprache muss nicht mehr SQL sein, wie es früher der Fall war. Es kann SQL-basiert sein mit einigen Erweiterungen, die eine effizientere Datenbearbeitung ermöglichen, oder es kann auch etwas völlig Neues sein, das von Grund auf neu erstellt wurde.

Heute haben wir analytische, spaltenorientierte Datenbanken wie ClickHouse oder MariaDB AX, wir haben Big-Data-Plattformen wie Hadoop, NoSQL-Lösungen wie MongoDB oder Cassandra, Key-Value-Datenspeicher wie Redis. Wir haben auch Time-Series-Datenbanken wie Prometheus oder TimeScaleDB. Darauf konzentrieren wir uns in diesem Blogbeitrag. Zeitreihendatenbanken – was sind sie und warum sollten Sie einen weiteren Datenspeicher in Ihrer Umgebung verwenden?

Wofür sind Zeitreihendatenbanken?

Wie der Name schon sagt, dienen Zeitreihendatenbanken dazu, Daten zu speichern, die sich mit der Zeit ändern. Dies können alle Arten von Daten sein, die im Laufe der Zeit gesammelt wurden. Es können Metriken sein, die von einigen Systemen gesammelt wurden – alle Trendsysteme sind Beispiele für die Zeitreihendaten.

Wann immer Sie sich die Dashboards in ClusterControl ansehen, betrachten Sie tatsächlich die visuelle Darstellung der Zeitreihendaten, die in Prometheus, einer Zeitreihendatenbank, gespeichert sind.

Zeitreihendaten sind nicht auf Datenbankmetriken beschränkt. Alles kann eine Metrik sein. Wie verändert sich der Personenstrom, der ein Einkaufszentrum betritt, im Laufe der Zeit? Wie verändert sich der Verkehr in einer Stadt? Wie verändert sich die Nutzung der öffentlichen Verkehrsmittel im Laufe des Tages? Wasserfluss in einem Bach oder Fluss. Von einem Wasserkraftwerk erzeugte Energiemenge. All dies und alles andere, was in der Zeit gemessen werden kann, ist ein Beispiel für die Zeitreihendaten. Solche Daten können Sie abfragen, grafisch darstellen und analysieren, um Korrelationen zwischen verschiedenen Metriken zu finden.

Wie sind Daten in einer Zeitreihendatenbank strukturiert?

Wie Sie sich vorstellen können, ist die Zeit das wichtigste Datenelement in der Zeitreihendatenbank. Es gibt zwei Hauptmethoden zum Speichern von Daten. Erstens könnte etwas, das der Schlüsselwertspeicherung ähnelt, so aussehen:

Zeitstempel Messwert 1
2019-03-28 00:00:01 2356
2019-03-28 00:00:02 6874
2019-03-28 00:00:03 3245
2019-03-28 00:00:04 2340

Kurz gesagt, für jeden Zeitstempel haben wir einen gewissen Wert für unsere Metrik.

Ein weiteres Beispiel wird mehr Metriken beinhalten. Anstatt jede Metrik in einer separaten Tabelle oder Sammlung zu speichern, ist es möglich, mehrere Metriken nebeneinander zu speichern.

Zeitstempel Messwert 1 Messwert 2 Messwert 3 Metrik 4 Messwert 5
2019-03-28 00:00:01 765 873 124 98 0
2019-03-28 00:00:02 5876 765 872 7864 634
2019-03-28 00:00:03 234 7679 98 65 34
2019-03-28 00:00:04 345 3 598 0 7345

Diese Datenstruktur hilft, die Daten effizienter abzufragen, wenn die Metriken in Beziehung stehen. Anstatt mehrere Tabellen zu lesen und sie zusammenzuführen, um alle Metriken zusammenzufassen, reicht es aus, eine einzige Tabelle zu lesen, und alle Daten können verarbeitet und präsentiert werden.

Sie fragen sich vielleicht – was ist hier wirklich neu? Wie unterscheidet sich dies von einer regulären Tabelle in MySQL oder einer anderen relationalen Datenbank? Nun, das Tabellendesign ist ziemlich ähnlich, aber es gibt signifikante Unterschiede in der Arbeitslast, die die Leistung erheblich verbessern können, wenn ein Datenspeicher darauf ausgelegt ist, sie zu nutzen.

Zeitreihendaten werden normalerweise nur angehängt – es ist ziemlich unwahrscheinlich, dass Sie alte Daten aktualisieren. Normalerweise löschen Sie bestimmte Zeilen nicht, andererseits möchten Sie möglicherweise eine Art Aggregation der Daten im Laufe der Zeit. Wenn dies beim Entwerfen der Datenbankinterna berücksichtigt wird, wird dies einen signifikanten Unterschied zu „normalen“ relationalen (und nicht auch relationalen) Datenbanken ausmachen, die für die Art des Datenverkehrs der Online-Transaktionsverarbeitung vorgesehen sind:Was am wichtigsten ist, ist die Fähigkeit zur konsistenten Speicherung (jngest) große Datenmengen, die mit der Zeit eintreffen.

Es ist möglich, ein RDBMS zum Speichern von Zeitreihendaten zu verwenden, aber das RDBMS ist nicht dafür optimiert. Daten und Indizes, die auf der Rückseite generiert werden, können sehr groß und langsam abzufragen sein. In RDBMS verwendete Speicher-Engines sind darauf ausgelegt, eine Vielzahl unterschiedlicher Datentypen zu speichern. Sie sind in der Regel für die Arbeitslast der Online-Transaktionsverarbeitung optimiert, zu der häufige Datenänderungen und -löschungen gehören. Relationalen Datenbanken fehlen in der Regel auch spezialisierte Funktionen und Merkmale in Bezug auf die Verarbeitung von Zeitreihendaten. Wir haben erwähnt, dass Sie wahrscheinlich Daten aggregieren möchten, die älter als ein bestimmter Zeitraum sind. Möglicherweise möchten Sie auch einige statistische Funktionen auf Ihren Zeitreihendaten ausführen können, um sie zu glätten, Trends zu bestimmen und zu vergleichen, Daten zu interpolieren und vieles mehr. Hier finden Sie beispielsweise einige der Funktionen, die Prometheus den Benutzern zur Verfügung stellt.

Beispiele für Zeitreihendatenbanken

Es gibt mehrere bestehende Zeitreihendatenbanken auf dem Markt, sodass es nicht möglich ist, alle abzudecken. Wir möchten dennoch einige Beispiele für Zeitreihendatenbanken geben, die Sie vielleicht kennen oder vielleicht sogar (wissentlich oder nicht) verwenden.

InfluxDB

InfluxDB wurde von InfluxData erstellt. Es ist eine in Go geschriebene Open-Source-Zeitreihendatenbank. Der Datenspeicher bietet eine SQL-ähnliche Sprache zum Abfragen der Daten, was es den Entwicklern leicht macht, sie in ihre Anwendungen zu integrieren. InfluxDB funktioniert auch als Teil eines kommerziellen Angebots, das den gesamten Stack abdeckt, um eine voll funktionsfähige, hochverfügbare Umgebung für die Verarbeitung von Zeitreihendaten bereitzustellen.

Prometheus

Prometheus ist ein weiteres Open-Source-Projekt, das ebenfalls in Go geschrieben ist. Es wird häufig als Backend für verschiedene Open-Source-Tools und -Projekte verwendet, z. B. Percona Monitoring and Management. Prometheus ist auch eine bevorzugte Zeitreihendatenbank für ClusterControl.

Prometheus kann von ClusterControl bereitgestellt werden, um zum Speichern der Zeitreihendaten verwendet zu werden, die auf den von ClusterControl überwachten und verwalteten Datenbankservern gesammelt wurden:

Prometheus ist in der Open-Source-Welt weit verbreitet und lässt sich mithilfe mehrerer Exportprogramme ganz einfach in Ihre vorhandene Umgebung integrieren.

RRDtool

Dies könnte ein Beispiel für eine Zeitreihendatenbank sein, die viele Menschen verwenden, ohne zu wissen, dass sie dies tun. RRDtool ist ein sehr beliebtes Open-Source-Projekt zum Speichern und Visualisieren von Zeitreihendaten. Wenn Sie jemals Cacti verwendet haben, basierte es auf RRDtool. Wenn Sie Ihre eigene Lösung entwickelt haben, haben Sie wahrscheinlich auch RRDtool als Backend zum Speichern Ihrer Daten verwendet. Heutzutage ist es nicht mehr so ​​beliebt wie früher, aber in den Jahren 2000 - 2010 war dies die gebräuchlichste Art, Zeitreihendaten zu speichern. Unterhaltsame Tatsache - frühere Versionen von ClusterControl haben davon Gebrauch gemacht.

Zeitskala

TimeScale ist eine auf PostgreSQL basierende Zeitreihendatenbank. Es ist eine Erweiterung von PostgreSQL, die für den Zugriff auf Daten auf den zugrunde liegenden Datenspeicher angewiesen ist, was bedeutet, dass es alle SQL akzeptiert, die Sie möglicherweise verwenden möchten. Als Erweiterung nutzt es alle anderen Funktionen und Erweiterungen von PostgreSQL. Sie können Zeitreihen und andere Datentypen mischen, um beispielsweise Zeitreihen und Metadaten zu verbinden und so die Ausgabe zu bereichern. Sie können auch eine erweiterte Filterung durchführen, indem Sie JOINs und Nicht-Zeitreihentabellen verwenden. Die Nutzung der GIS-Unterstützung in PostgreSQL TimeScale kann problemlos zur Verfolgung geografischer Standorte im Laufe der Zeit verwendet werden. Es kann auch alle Skalierungsmöglichkeiten nutzen, die PostgreSQL bietet, einschließlich der Replikation.

Zeitstrahl

Amazon Web Services hat auch ein Angebot für Zeitreihendatenbanken. Timestream wurde erst kürzlich, im November 2018, angekündigt. Es fügt dem AWS-Portfolio einen weiteren Datenspeicher hinzu, der Benutzern hilft, Zeitreihendaten aus Quellen wie Internet of Things-Appliances oder überwachten Diensten zu verarbeiten. Es kann auch verwendet werden, um Metriken zu speichern, die aus Protokollen stammen, die von mehreren Diensten erstellt wurden, sodass Benutzer analytische Abfragen darauf ausführen können, was hilft, Muster und Bedingungen zu verstehen, unter denen Dienste funktionieren.

Timestream bietet, wie die meisten AWS-Services, eine einfache Möglichkeit zur Skalierung, falls der Bedarf an Speicherung und Analyse der Daten mit der Zeit wächst.

Wie Sie sehen können, gibt es zahlreiche Optionen auf dem Markt, und das ist nicht verwunderlich. Die Analyse von Zeitreihendaten gewinnt in letzter Zeit immer mehr an Bedeutung und wird für den Geschäftsbetrieb immer wichtiger. Glücklicherweise ist es angesichts der großen Anzahl von Angeboten, sowohl Open Source als auch kommerzielle, ziemlich wahrscheinlich, dass Sie ein Tool finden, das Ihren Anforderungen entspricht.