python - what - ¿Cuál es la mejor solución de código abierto para almacenar datos de series de tiempo?
tutorial de django (5)
Estoy interesado en monitorear algunos objetos. Espero obtener unos 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.
Estoy considerando varias formas de almacenar estos datos, y he estado buscando una base de datos relacional clásica, o una base de datos no estructurada (como SimpleDB).
Mi pregunta es, ¿cuál es la mejor manera de ir haciendo esto? Preferiría mucho una solución de código abierto (y gratuita) a una costosa propietaria.
Pequeña nota: estoy escribiendo esta aplicación en Python.
Esto es algo bastante estándar de almacenamiento de datos.
Muchos "hechos", organizados por una serie de 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 el estado por defaultdict
funcionarán de maravilla, de manera rápida y simple.
Hay una base de datos de código abierto de series temporales en desarrollo activo (.NET solo por ahora) que escribí. Puede almacenar cantidades masivas (terrabytes) de datos uniformes en forma de "archivo plano binario". Todo uso está orientado a la corriente (hacia adelante o hacia atrás) Lo usamos activamente para el almacenamiento y análisis de ticks 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);
}
archivos de texto sin formato? No está claro a qué se traducen sus 10k puntos de datos por 15 minutos en términos de bytes, pero de cualquier manera los archivos de texto son más fáciles de almacenar / archivar / transferir / manipular y puede inspeccionarlos directamente con solo mirar. Bastante fácil de trabajar con Python, también.
RRDTool por Tobi Oetiker, definitivamente! Es de código abierto, ha sido diseñado para exactamente tales casos de uso.
EDITAR:
Para proporcionar algunos puntos destacados: RRDTool almacena datos de series de tiempo en una base de datos de round-robin. Mantiene los datos sin procesar durante un período de tiempo determinado, luego los condensa de una manera configurable para que tenga datos detallados para un mes, los datos promediados durante una semana durante los últimos 6 meses y los datos promediados sobre un mes durante los últimos 2 años. Como efecto colateral, su base de datos sigue siendo del mismo tamaño todo el tiempo (por lo que no se puede llenar la totalidad de su disco). Este era el lado de almacenamiento. En el lado de 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 probada, 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 él, te encontrarás reutilizándolo una y otra vez.
Para una descripción general rápida y quién usa RRDTool, vea también here . Si desea ver qué tipo de gráficos puede producir, asegúrese de echar un vistazo a la gallery .