2009-08-26 11 views
17

Ich bin an der Überwachung einiger Objekte interessiert. Ich erwarte, alle 15 Minuten ungefähr 10000 Datenpunkte zu bekommen. (Vielleicht nicht auf den ersten, aber das ist der "allgemeine Ballpark"). Ich möchte auch tägliche, wöchentliche, monatliche und jährliche Statistiken erhalten können. Es ist nicht kritisch, die Daten für mehr als zwei Monate in der höchsten Auflösung (15 Minuten) zu halten.Was ist die beste Open-Source-Lösung für die Speicherung von Zeitreihendaten?

Ich denke über verschiedene Möglichkeiten nach, um diese Daten zu speichern, und habe mir eine klassische relationale Datenbank oder eine schemalose Datenbank (wie SimpleDB) angesehen.

Meine Frage ist, was ist der beste Weg, dies zu tun? Ich würde sehr gerne eine Open Source (und kostenlose) Lösung für eine proprietäre teure Lösung bevorzugen.

Kleiner Hinweis: Ich schreibe diese Anwendung in Python.

+0

Sie suchen wahrscheinlich für eine Art von Binning Lösung. Sie können die Diskussion in dieser verwandten Frage hilfreich finden: http://stackoverflow.com/questions/1248815/percentiles-of-live-data-capture/1249003#1249003 –

Antwort

11

HDF5, die durch h5py oder PyTables zugegriffen werden kann, ist für den Umgang mit sehr großen Datensätzen konzipiert. Beide Schnittstellen funktionieren gut. Zum Beispiel haben sowohl h5py als auch PyTables eine automatische Komprimierung und unterstützen Numpy.

+0

Dies scheint sehr interessant, ich werde es überprüfen. – lorg

8

RRDTool von Tobi Oetiker, auf jeden Fall! Es ist Open-Source, es wurde für genau solche Anwendungsfälle entwickelt.

EDIT:

ein paar Highlights zu bieten: RRDTool speichert Zeitreihendaten in einer Round-Robin-Datenbank. Es speichert Rohdaten für einen bestimmten Zeitraum und komprimiert sie dann in einer konfigurierbaren Weise, so dass Sie feinkörnige Daten für etwa einen Monat, gemittelte Daten über eine Woche für die letzten 6 Monate und gemittelte Daten über einen Monat für den letzten haben 2 Jahre. Als Nebeneffekt haben Sie die Datenbank immer die gleiche Größe (also keine Schwitzen Sie Festplatte kann voll ausgeführt werden). Dies war die Speicherseite. Auf der Abrufseite bietet RRDTool Datenabfragen, die sofort in Grafiken (z. B. PNG) umgewandelt werden, die Sie problemlos in Dokumente und Webseiten einfügen können. Es ist eine solide, bewährte Lösung, die gegenüber ihrem Vorgänger MRTG eine sehr verallgemeinerte Form hat (einige haben vielleicht schon davon gehört). Und wenn du erst einmal angefangen hast, wirst du es wieder und wieder benutzen.

Für einen schnellen Überblick und wer RRDTool verwendet, siehe auch here. Wenn Sie sehen möchten, welche Arten von Grafiken Sie erstellen können, werfen Sie einen Blick auf die gallery.

+0

Ich war RRDTool bekannt, es ist gut, eine weitere "Abstimmung" zu haben. Ich werde tiefer darauf eingehen. Übrigens, wissen Sie, ob Sie in Python mit ihm interagieren können? – lorg

+0

@lorg Ich habe es selbst nicht versucht, aber die Dokumente listet explizit Python-Bindungen (http://oss.oetiker.ch/rrdtool/prog/rrdpython.en.html) – ThomasH

+0

es hat Python-Bindungen. Aber das letzte Mal, als ich (vor langer Zeit) nachgesehen habe, haben sie nicht großartig funktioniert. Am Ende wickle ich die CLI mit Unterprozessaufrufen ein, wie es diese Klasse tut: http://code.google.com/p/perfmetrics/source/browse/trunk/lib/rrd.py –

1

einfache Textdateien? Es ist nicht klar, was Ihre 10k-Datenpunkte pro 15 Minuten in Bytes ausgedrückt werden, aber in irgendeiner Weise sind Textdateien einfacher zu speichern/zu archivieren/zu übertragen/zu manipulieren und Sie können das direkt durchsehen, indem Sie es betrachten. ziemlich einfach mit Python zu arbeiten.

1

Dies ist ziemlich Standard-Data-Warehousing Zeug.

Viele "Fakten", organisiert von einer Reihe von Dimensionen, von denen die Zeit ist. Viele Aggregation.

In vielen Fällen wirken einfache flache Dateien, die Sie mit einfachen Aggregationsalgorithmen basierend auf defaultdict verarbeiten, Wunder - schnell und einfach.

Blick auf Efficiently storing 7.300.000.000 rows

Database choice for large data volume?

0

Es ist eine Open-Source-Datenbank Zeitreihen unter aktiver Entwicklung (.NET für jetzt nur), die ich geschrieben habe.Es kann große Mengen (Terrabyte) von einheitlichen Daten in einer "binären flachen Datei" speichern. Alle Anwendungen sind stream-orientiert (vorwärts oder rückwärts). Wir nutzen es aktiv für die Lagerung und Analyse von Aktien in unserem Unternehmen.

https://code.google.com/p/timeseriesdb/

// Create a new file for MyStruct data. 
// Use BinCompressedFile<,> for compressed storage of deltas 
using (var file = new BinSeriesFile<UtcDateTime, MyStruct>("data.bts")) 
{ 
    file.UniqueIndexes = true; // enforces index uniqueness 
    file.InitializeNewFile(); // create file and write header 
    file.AppendData(data); // append data (stream of ArraySegment<>) 
} 

// Read needed data. 
using (var file = (IEnumerableFeed<UtcDateTime, MyStrut>) BinaryFile.Open("data.bts", false)) 
{ 
    // Enumerate one item at a time maxitum 10 items starting at 2011-1-1 
    // (can also get one segment at a time with StreamSegments) 
    foreach (var val in file.Stream(new UtcDateTime(2011,1,1), maxItemCount = 10) 
     Console.WriteLine(val); 
}