63 votes

Existe-t-il un système de base de données puissant pour les données de séries chronologiques ?

Dans de nombreux projets, nous devons stocker, agréger et évaluer des valeurs de mesure simples. Une ligne se compose généralement d'un horodateur, d'une valeur et de quelques attributs de la valeur. Dans certaines applications, nous aimerions stocker 1000 valeurs par seconde et plus. Ces valeurs doivent être non seulement insérées mais aussi supprimées au même rythme, puisque la durée de vie d'une valeur est limitée à un an environ (dans les différentes étapes d'agrégation, nous ne stockons pas 1000/s pendant toute l'année).

Jusqu'à présent, nous avons développé différentes solutions. Une basée sur Firebird, une sur Oracle et une sur un mécanisme de stockage que nous avons créé nous-mêmes. Mais aucune de ces solutions n'est très satisfaisante.

Les deux solutions SGBD ne peuvent pas gérer le flux de données souhaité. En outre, les applications qui fournissent les valeurs (par exemple, les pilotes de périphériques) ne peuvent pas être facilement rattachées aux bases de données, les instructions d'insertion sont lourdes. Enfin, si une interface SQL avec les données est fortement souhaitée, les évaluations typiques sont difficiles à formuler en SQL et lentes à exécuter. Par exemple, trouver la valeur maximale avec horodatage toutes les 15 minutes pour toutes les mesures du dernier mois.

La solution maison peut gérer le taux d'insertion et dispose d'une API conviviale pour le faire, mais elle n'a rien d'un langage de requête et ne peut pas être utilisée par d'autres applications via une interface standard, par exemple pour l'établissement de rapports.

La meilleure solution dans mes rêves serait un système de base de données qui :

  • dispose d'une API pour une insertion très rapide
  • est capable de supprimer/trouver les valeurs à la même vitesse.
  • fournit une interface SQL standard avec un support spécifique pour les données de séries chronologiques typiques

Connaissez-vous une base de données qui s'approche de ces exigences ou aborderiez-vous le problème d'une manière différente ?

0 votes

Pour un traitement rapide et pratique (en mémoire) vous pouvez essayer pandas pour des entrées-sorties rapides. PyTables .

0 votes

Vous pouvez également essayer Starcounter. Il peut gérer quelques millions de requêtes SQL par seconde sur un seul serveur Windows 2008. Il est encore en version bêta fermée, mais il fonctionne en production sur de très grandes installations depuis un certain temps déjà. Un courriel devrait suffire pour en obtenir une copie.

0 votes

J'ai une question similaire, sinon identique, qui a été fermée comme hors sujet également, donc je l'ai déplacée ici : softwarerecs.stackexchange.com/questions/18302/

42voto

Joakim Points 1224

La plupart des autres réponses semblent mentionner des bases de données basées sur SQL. Les bases de données NoSQL sont bien meilleures pour ce genre de choses.

Quelques bases de données de séries chronologiques à source ouverte :

Basé sur le cloud :

1 votes

Avez-vous examiné les bases de données orientées colonnes ?

1 votes

3 votes

Erol propose une liste complète : erol.si/2015/01/

8voto

A.N. Points 31

Influxdb : : Une base de données de séries temporelles distribuée et open-source, sans dépendances externes.

6 votes

Il n'est pas distribué à moins que vous ne payiez $$$ ( docs.influxdata.com/influxdb/v1.0/high_availability/clusters )

2voto

Jonathan Leffler Points 299946

Pensez à IBM Informix Dynamic Server avec le Série chronologique DataBlade.

Il s'agit toutefois d'un débit de données extrême avec lequel vous travaillez. (Pas tout à fait au niveau de la physique sub-atomique du CERN, mais on se dirige dans cette direction générale).


Divulgation équitable : Je travaille pour IBM sur le SGBD Informix, mais pas sur le TimeSeries DataBlade en tant que tel.

1voto

Mitch Wheat Points 169614

0 votes

Merci pour l'astuce. StreamInsight semble intéressant et je vais devoir l'étudier. De plus, d'après ce que j'ai compris, il est inclus dans SQL Server ? Ma préoccupation : Le stockage est toujours dans SQL Server. Sera-t-il capable de gérer le flux de données demandé ? La documentation de StreamInsight indique qu'il peut gérer jusqu'à 100 000 événements/s "en période de pointe", mais cela doit faire référence à une sorte de mise en mémoire tampon. Quel est le débit en régime permanent ?

0 votes

Les vitesses de stockage dépendent de votre matériel ; dépensez suffisamment et vous pouvez obtenir 17.2GBytes par seconde ! !! 1,2 Go par seconde est réalisable avec une bonne matrice RAID de 12 à 18 disques.

1voto

shoonya Points 55

Vous pouvez essayer HDF5 pour les données de séries chronologiques. Il est extrêmement rapide pour de telles applications.

1 votes

HDF5 semble être un format de stockage. Pourriez-vous nous en dire un peu plus sur son utilisation dans le contexte des données de séries chronologiques ?

0 votes

Une bibliothèque python basée sur HDF5 est disponible à l'adresse suivante github.com/afiedler/tstables

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X