Ich muss eine Datenbank mit Zeitreihen erstellen und die folgenden Aufgaben ausführen:
- neue Zeitreihen erstellen
- Aktualisieren Sie vorhandene Zeitreihen
- eine oder mehrere Zeitreihen gleichzeitig abfragen (zum Beispiel alle Zeitreihen für dasselbe Datum usw.)
Ist Mongo daran angepasst und wenn ja, wie soll ich die Datenbank strukturieren? (Einmalige Serie = ein Dokument? Oder ein Dokument = ein Eintrag der Zeitserie, und alle diese Dokumente bilden die Sammlung, die die gesamte Zeitreihe darstellt?)
Ich bin hier etwas verloren und finde es schwierig, Informationen zu finden, da Mongo normalerweise als sehr flexibel dargestellt wird, sodass der Benutzer die Wahl in der Infrastruktur hat.
Jeder Link zu einem Tutorial, in dem speziell erklärt wird, wie Zeitreihen in Mongo verwaltet werden, ist sehr willkommen.
Vielen Dank!
Antworten:
Ich schlage einen einzelnen Zeitreiheneintrag pro Dokument vor. Es gibt einige Probleme beim Speichern mehrerer Einträge pro Dokument:
Beachten Sie auch, dass ein Zeitstempel in die Standard-MongoDB-Objekt-ID integriert ist . Sie können dies verwenden, wenn die Zeitreihengenauigkeit weniger als eine Sekunde beträgt.
Hier ist ein Beispiel für ein BSON-Dokument aus einer Ereignisprotokollierungsbibliothek, die MongoDB verwendet :
Da ein Ereignisprotokoll einer Zeitreihe ähnelt, kann es sich lohnen, den Rest des Codes zu studieren . Es gibt Versionen in Java, C #, PHP und Python.
Hier ist ein weiteres ähnliches Open Source-Projekt: Zarkov
[Update] Als Antwort auf den Kommentar von @ RockScience habe ich einige weitere Referenzen hinzugefügt:
quelle
Ich habe diese Frage auf SO ( /programming/4814167/storing-time-series-data-relational-or-non ) gefunden, wo das OP fragt, wie eine Zeitreihe gespeichert werden soll. Obwohl seine Frage eher auf der Verwendung einer NoSQL-Datenbank oder eines RDBMS basiert und Sie ziemlich darauf eingestellt zu sein scheinen, eine NoSQL-Datenbank zu verwenden.
Außerdem wurde dieser Artikel zu " Die eindeutigen Datenbankanforderungen für Zeitreihendaten " gefunden, der möglicherweise hilfreich ist.
Hoffe das hilft.
quelle
Ja, definitiv, die NoSQL-Datenbank eignet sich besser zum Speichern von Zeitreihendaten als herkömmliches RDBMS.
Ja, MongoDB ist außergewöhnlich an diesen Anwendungsfall angepasst.
-Wie sollten Sie die Datenbank strukturieren? Ein Dokument = eine Zeitreiheneingabe im Vergleich zu mehreren Zeitreihen.
Die Antwort besteht darin, mehrere Zeitreihen in einem Dokument zu speichern. Weniger Dokumente verbessern die Leistung bei weniger Lesevorgängen. Ein Trick besteht darin, Ihr Dokument mit den vordefinierten Werten vorzubereiten. Dadurch wird die Aktualisierung des Dokuments optimiert, indem das Auffüllen von Datensätzen vermieden wird .
Hier ist ein Schemabeispiel zum optimalen Speichern von Zeitreihen im Wert von einer Stunde mit einem Minutenintervall:
Sie initiieren es mit 0 Werten und dann werden die Updates optimiert. Die Lesevorgänge werden optimiert, da ein Dokument anstelle von 60 gelesen wird. Wenn Sie Daten im Wert von einem Tag speichern müssen oder einen Monat, in dem Sie mit derselben Technik fortfahren, haben Sie die Idee.
Hier ist der Link zu einem Tutorial, in dem speziell erklärt wird, wie Zeitreihen in MongoDb im offiziellen MongoDb-Blog verwaltet werden: http://blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in- mongodb
quelle