2012-04-14 7 views
12

Ich plane ein Nebenprojekt, bei dem ich mich mit Zeitreihen wie Daten beschäftigen werde und einer dieser glänzenden neuen NoSQL-Datenbanken einen Versuch geben möchte und nach einer Empfehlung suche.Welche NoSQL DB für spärliche Zeitreihen wie Daten zu verwenden?

Für einen (wachsenden) Satz von symbols werde ich eine Liste von (time, value) Tupeln haben (mit der Zeit zunehmen). Nicht alle symbols werden aktualisiert; einige symbols können aktualisiert werden, während andere möglicherweise nicht, und vollständig neu symbols hinzugefügt werden können. erlauben

sollte die Datenbank daher:

  • Hinzufügen von Symbolen mit anfänglicher einelementige (Tupel) Liste. Z.B. A: [(2012-04-14 10:23, 50)]
  • Aktualisiere Symbole mit einem neuen Tupel. (Hängen Sie das Tupel an die Liste dieses Symbols an).
  • Lesen Sie die Daten für ein bestimmtes Symbol. (Idealerweise lasse ich auch den Zeitrahmen angeben, für den die Daten zurückgegeben werden sollen)

Die Erstellungs- und Aktualisierungsoperationen sollten möglicherweise atomar sein. Wenn das gleichzeitige Lesen mehrerer Symbole möglich ist, wäre das interessant.

Die Leistung ist nicht kritisch. Updates/Creates werden ungefähr einmal alle paar Stunden stattfinden.

+0

[Stack Overflow ist keine Empfehlungsmaschine] (http://meta.stackexchange.com/a/128562/172496) –

Antwort

17

Ich glaube, buchstäblich alle wichtigen NoSQL-Datenbanken werden diese Anforderung unterstützen, vor allem, wenn Sie nicht wirklich eine große Datenmenge haben (was die Frage aufwirft, warum NoSQL?).

Das sagte, ich musste vor kurzem entwerfen und arbeiten mit einer NoSQL-Datenbank für Zeitreihendaten, so kann einige Eingabe auf dieses Design geben, die dann für alle anderen hochgerechnet werden kann.

Unsere gewählte Datenbank war Cassandra, und unser Design wurde wie folgt:

  • Ein einzelner Schlüsselraum für alle
  • ‚Symbole‘
  • jedes Symbol eine neue Reihe war, war
  • Jedes Mal Eintrag eine neue Spalte für die entsprechende Zeile
  • Jeder Wert (kann mehr als ein einzelner Wert sein) wird der Zeiteintrag der Wert Teil

Damit können Sie alles erreichen, was Sie möchten, insbesondere die Daten für ein einzelnes Symbol lesen und gegebenenfalls einen Bereich verwenden (Spaltenbereichsaufrufe). Obwohl Sie gesagt haben, dass Leistung nicht kritisch ist, war es für uns und das war auch sehr performant - alle Daten für ein einzelnes Symbol sind per Definition sortiert (Spaltenname sort) und immer auf demselben Knoten gespeichert (keine Cross-Node-Kommunikation für einfache Abfragen)). Schließlich lässt sich dieses Design auch auf andere NoSQL-Datenbanken mit dynamischen Spalten übertragen.

Anschluss an diese, hier einige Informationen sind MongoDB über die Verwendung (und verkappte Sammlungen falls notwendig) für eine Zeitreihe Speicher: MongoDB as a Time Series Database

Schließlich ist hier eine Diskussion über SQL vs NoSQL für Zeitreihen: https://dba.stackexchange.com/questions/7634/timeseries-sql-or-nosql

Ich kann zu dieser Diskussion Folgendes hinzufügen:

  • Lernkurve für NoSQL wird höher sein, Sie erhalten nicht die zusätzliche Flexibilität und Funktionalität kostenlos in Bezug auf "weiche Kosten". Wer wird diese Datenbank operativ unterstützen?
  • Wenn Sie erwarten, dass diese Funktionalität in Zukunft wachsen wird (entweder mehr Felder zu jedem Zeiteintrag hinzugefügt werden oder eine viel größere Kapazität in Bezug auf die Anzahl der Symbole oder die Größe der Zeitreihe des Symbols), dann sollten Sie unbedingt NoSQL verwenden. Der Flexibilitätsvorteil ist riesig, und die Skalierbarkeit, die Sie (mit dem obigen Design) sowohl auf der Basis von Symbolen als auch Symbolen erhalten, ist nahezu unbegrenzt (ich sage fast unbegrenzt - maximale Spalten pro Zeile sind maximal Milliarden) Zeilen pro Schlüsselraum ist unbegrenzt, glaube ich).
  • 4

    Werfen Sie einen Blick auf opentsdb.org eine Opensource-Zeitreihendatenbank, die HBase verwenden. Sie haben es klug gemacht, wie sie den TS lagern. Es ist hier gut dokumentiert: http://opentsdb.net/misc/opentsdb-hbasecon.pdf

    +0

    +1 für opentsdb: Es ist eine perfekte OSS-Lösung, um große zu speichern Zeitreihen (wie Forex-Tick-Daten). Das Einrichten von Hbase kann mühsam sein, aber die Python-Collectors von OpenTsdb (die Sortiertransaktoren von OpenTsdb) machen es dann sehr einfach, Streaming-Daten im laufenden Betrieb zu speichern. –