2009-08-26 9 views
17

Je suis intéressé par la surveillance de certains objets. Je m'attends à obtenir environ 10000 points de données toutes les 15 minutes. (Peut-être pas au début, mais c'est le «stade général»). J'aimerais aussi pouvoir obtenir des statistiques quotidiennes, hebdomadaires, mensuelles et annuelles. Il n'est pas essentiel de garder les données dans la plus haute résolution (15 minutes) pendant plus de deux mois.Quelle est la meilleure solution open source pour stocker des données de séries chronologiques?

Je considère différentes façons de stocker ces données, et j'ai regardé une base de données relationnelle classique, ou à une base de données schemaless (comme SimpleDB). Ma question est la suivante: Quelle est la meilleure façon d'y parvenir? Je préférerais de beaucoup une solution open-source (et gratuite) à une solution propriétaire coûteuse.

Petite note: J'écris cette application en Python.

+0

Vous êtes à la recherche probablement une sorte de solution de binning. Vous pouvez trouver la discussion dans cette question connexe utile: http://stackoverflow.com/questions/1248815/percentiles-of-live-data-capture/1249003#1249003 –

Répondre

11

HDF5, accessible via h5py ou PyTables, est conçu pour traiter de très grands ensembles de données. Les deux interfaces fonctionnent bien. Par exemple, h5py et PyTables ont une compression automatique et prennent en charge Numpy.

+0

Cela semble très intéressant, je vais vérifier. – lorg

8

RRDTool par Tobi Oetiker, définitivement! C'est open-source, il a été conçu pour de tels cas d'utilisation.

EDIT:

Fournir quelques faits saillants: les magasins RRDTool données de séries chronologiques dans une base de données à la ronde. Il conserve les données brutes pour une période de temps donnée, puis les condense de manière configurable afin que vous ayez des données détaillées pendant un mois, des données moyennes sur une semaine pour les 6 derniers mois et des données moyennées sur un mois pour le dernier. 2 ans. En tant qu'effet secondaire, la base de données conserve la même taille tout le temps (donc vous ne risquez pas de saturer votre disque). C'était le côté du stockage. Du côté de la récupération, RRDTool propose des requêtes de données qui sont immédiatement transformées en graphiques (p. Ex. Png) que vous pouvez facilement inclure dans des documents et des pages Web. C'est une solution solide et éprouvée qui est une forme très généralisée par rapport à son prédécesseur, MRTG (certains en ont peut-être entendu parler). Et une fois que vous y êtes entré, vous vous retrouverez à le réutiliser encore et encore.

Pour une présentation rapide et qui utilise RRDTool, voir également here. Si vous voulez voir quels types de graphiques vous pouvez produire, assurez-vous de jeter un coup d'œil au gallery.

+0

Je connaissais RRDTool, il est bon d'avoir un autre "vote". Je vais regarder plus en profondeur. En aparté, savez-vous si vous pouvez vous interfacer avec Python? – lorg

+0

@lorg Je ne l'ai pas essayé moi-même, mais les docs listent explicitement les bindings Python (http://oss.oetiker.ch/rrdtool/prog/rrdpython.en.html) – ThomasH

+0

il a des bindings Python. mais la dernière fois que j'ai regardé (il y a longtemps), ils ne fonctionnaient pas très bien. Je finis par encapsuler l'interface de ligne de commande avec des appels de sous-processus comme le fait cette classe: http://code.google.com/p/perfmetrics/source/browse/trunk/lib/rrd.py –

1

fichiers texte en clair? Ce n'est pas clair ce que vos 10k points de données par 15 minutes se traduit en termes d'octets, mais de toute façon les fichiers texte sont plus faciles à stocker/archiver/transférer/manipuler et vous pouvez inspecter le directement, juste en regardant. assez facile à travailler avec Python, aussi.

1

Il s'agit d'un équipement standard d'entreposage de données.

Beaucoup de "faits", organisés par un certain nombre de dimensions, dont l'un est le temps. Beaucoup d'agrégation.

Dans de nombreux cas, des fichiers plats simples que vous traitez avec des algorithmes d'agrégation simples basés sur defaultdict feront des miracles - rapides et simples.

Regardez Efficiently storing 7.300.000.000 rows

Database choice for large data volume?

0

Il y a une base de données de timeseries open source en cours de développement (.NET uniquement pour l'instant) que je l'ai écrit.Il peut stocker des quantités massives (terrabytes) de données uniformes dans un "fichier plat binaire". Toute utilisation est orientée flux (avant ou arrière). Nous l'utilisons activement pour le stockage et l'analyse des ticks stock dans notre société.

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