2009-08-26 11 views
17

Estoy interesado en monitorear algunos objetos. Espero obtener aproximadamente 10000 puntos de datos cada 15 minutos. (Tal vez no al principio, pero este es el "estadio general"). También me gustaría poder obtener estadísticas diarias, semanales, mensuales y anuales. No es crítico mantener los datos en la resolución más alta (15 minutos) durante más de dos meses.¿Cuál es la mejor solución de código abierto para almacenar datos de series de tiempo?

Estoy considerando varias formas de almacenar estos datos, y he estado buscando en una base de datos relacional clásica, o en una base de datos sin esquema (como SimpleDB).

Mi pregunta es, ¿cuál es la mejor manera de hacerlo? Preferiría mucho más una solución de fuente abierta (y gratuita) que una costosa de propiedad exclusiva.

Nota pequeña: Estoy escribiendo esta aplicación en Python.

+0

usted está probablemente en busca de algún tipo de solución de agrupación. Puede encontrar la discusión en esta pregunta relacionada útil: http://stackoverflow.com/questions/1248815/percentiles-of-live-data-capture/1249003#1249003 –

Respuesta

11

HDF5, que se puede acceder a través de h5py o PyTables, está diseñado para tratar conjuntos de datos muy grandes. Ambas interfaces funcionan bien. Por ejemplo, tanto h5py como PyTables tienen compresión automática y admiten Numpy.

+0

Esto parece muy interesante, lo verificaré. – lorg

8

RRDTool por Tobi Oetiker, definitivamente! Es de código abierto, ha sido diseñado para tales casos de uso.

EDIT:

Para proporcionar algunos puntos destacados: las tiendas rrdtool de datos de series de tiempo en una base de datos de todos contra todos. Mantiene datos brutos durante un período de tiempo determinado, luego los condensa de forma configurable para que tenga datos precisos, por ejemplo, durante un mes, datos promediados durante una semana durante los últimos 6 meses y datos promediados durante un mes durante el último 2 años. Como efecto secundario, su base de datos sigue siendo del mismo tamaño todo el tiempo (por lo que no debe preocuparse porque el disco esté completo). Este fue el lado del almacenamiento. En el lado de la recuperación, RRDTool ofrece consultas de datos que se convierten inmediatamente en gráficos (por ejemplo, png) que puede incluir fácilmente en documentos y páginas web. Es una solución sólida como una roca, que es una forma muy generalizada sobre su predecesora, MRTG (algunos podrían haber oído hablar de esto). Y una vez que te metiste en ello, te encontrarás reutilizándolo una y otra vez.

Para obtener una visión general y quién utiliza RRDTool, ver también here. Si desea ver qué tipo de gráficos puede producir, asegúrese de echar un vistazo al gallery.

+0

Estaba al tanto de RRDTool, es bueno tener otro "voto" al respecto. Lo investigaré más a fondo. Como un aparte, ¿sabes si puedes interactuar con él en Python? – lorg

+0

@lorg No lo he probado, pero los documentos enumeran explícitamente enlaces de Python (http://oss.oetiker.ch/rrdtool/prog/rrdpython.en.html) – ThomasH

+0

tiene enlaces de Python. pero la última vez que miré (hace mucho tiempo), no funcionaron muy bien. Terminé simplemente envolviendo la CLI con llamadas a subprocesos como esta clase: http://code.google.com/p/perfmetrics/source/browse/trunk/lib/rrd.py –

1

¿archivos de texto sin formato? No está claro a qué se traducen tus 10k puntos de datos por 15 minutos en términos de bytes, pero de cualquier forma los archivos de texto son más fáciles de almacenar/archivar/transferir/manipular y puedes inspeccionarlos directamente, solo con mirarlos. bastante fácil de trabajar con Python, también.

1

Esto es bastante estándar de almacenamiento de datos.

Gran cantidad de "hechos", organizados por varias dimensiones, una de las cuales es el tiempo. Mucha agregación

En muchos casos, los archivos planos simples que procesa con algoritmos de agregación simples basados ​​en defaultdict harán maravillas, de forma rápida y sencilla.

Mira Efficiently storing 7.300.000.000 rows

Database choice for large data volume?

0

Hay una base de datos de series temporales de código abierto en el desarrollo activo (.NET sólo por ahora) que escribí.Puede almacenar cantidades masivas (terrabytes) de datos uniformes en una forma de "archivo plano binario". Todo el uso está orientado a la transmisión (hacia adelante o hacia atrás). Lo utilizamos activamente para almacenar y analizar las garrapatas en nuestra empresa.

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