2009-08-26 11 views
17

Sono interessato al monitoraggio di alcuni oggetti. Mi aspetto di ottenere circa 10000 punti dati ogni 15 minuti. (Forse non all'inizio, ma questo è il 'ballpark generale'). Mi piacerebbe anche essere in grado di ottenere statistiche giornaliere, settimanali, mensili e annuali. Non è fondamentale mantenere i dati con la massima risoluzione (15 minuti) per più di due mesi.Qual è la migliore soluzione open source per l'archiviazione dei dati delle serie temporali?

Sto prendendo in considerazione vari modi per archiviare questi dati e ho cercato un classico database relazionale o un database di schemi (come SimpleDB).

La mia domanda è, qual è il modo migliore per farlo? Preferirei molto una soluzione open-source (e gratuita) a una costosa proprietaria.

Piccola nota: sto scrivendo questa applicazione in Python.

+0

si sono probabilmente alla ricerca di un qualche tipo di soluzione di binning. Puoi trovare utile la discussione in questa domanda correlata: http://stackoverflow.com/questions/1248815/percentiles-of-live-data-capture/1249003#1249003 –

risposta

11

HDF5, cui si può accedere attraverso h5py o PyTables, è progettato per gestire grandi volumi di dati. Entrambe le interfacce funzionano bene. Ad esempio, sia h5py che PyTables hanno la compressione automatica e supportano Numpy.

+0

Questo sembra molto interessante, lo controllerò. – lorg

8

RRDTool di Tobi Oetiker, sicuramente! È open source, è stato progettato proprio per questi casi d'uso.

EDIT:

Per fornire alcuni punti salienti: negozi rrdtool dati di serie temporali in una base di dati round-robin. Mantiene i dati grezzi per un determinato periodo di tempo, quindi li condensa in un modo configurabile in modo da avere dati dettagliati per un mese, dati media su una settimana per gli ultimi 6 mesi e dati medi su un mese per l'ultimo 2 anni. Come effetto collaterale, la base dati rimane la stessa dimensione per tutto il tempo (quindi non si può eseguire il sudore del disco pieno). Questo era il lato di archiviazione. Sul lato di recupero RRDTool offre query di dati che vengono immediatamente trasformate in grafici (ad esempio png) che è possibile includere prontamente in documenti e pagine Web. È una soluzione solida, solida e collaudata, che è una forma molto generalizzata rispetto al suo predecessore, MRTG (alcuni potrebbero aver sentito parlare di questo). E una volta che ci sei entrato, ti ritroverai a riutilizzarlo più e più volte.

Per una rapida panoramica e chi utilizza RRDTool, vedere anche here. Se vuoi vedere quali tipi di grafici puoi produrre, assicurati di dare un'occhiata allo gallery.

+0

Ero a conoscenza di RRDTool, è bello avere un altro "voto" su di esso. Lo esaminerò più profondamente. Per inciso, sai se puoi interfacciarti con esso in Python? – lorg

+0

@lorg Non l'ho provato da solo, ma i documenti elencano esplicitamente i collegamenti Python (http://oss.oetiker.ch/rrdtool/prog/rrdpython.en.html) – ThomasH

+0

con collegamenti Python. ma l'ultima volta che ho guardato (molto tempo fa), non hanno funzionato alla grande. Finisco per incastrare la CLI con chiamate subprocess come questa classe: http://code.google.com/p/perfmetrics/source/browse/trunk/lib/rrd.py –

1

file di testo semplice? Non è chiaro a cosa si traducano i 10 punti dati per 15 minuti in termini di byte, ma in ogni caso i file di testo sono più facili da memorizzare/archiviare/trasferire/manipolare ed è possibile ispezionarli direttamente, semplicemente osservando. abbastanza facile da lavorare con Python, anche.

1

Questo è piuttosto roba standard per il data-warehousing.

Un sacco di "fatti", organizzati per un numero di dimensioni, una delle quali è il tempo. Un sacco di aggregazione.

In molti casi, i file flat semplici elaborati con semplici algoritmi di aggregazione basati su defaultdict funzioneranno a meraviglia, in modo rapido e semplice.

Guarda Efficiently storing 7.300.000.000 rows

Database choice for large data volume?

0

C'è un database aperto timeseries sorgente in fase di sviluppo attivo (.NET solo per ora) che ho scritto.È in grado di memorizzare enormi quantità (terrabyte) di dati uniformi in modo "file binario piatto". Tutto l'utilizzo è orientato al flusso (avanti o indietro). Lo utilizziamo attivamente per lo stoccaggio e l'analisi delle zecche azionarie presso la nostra azienda.

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); 
}