6
votes

Tendance 100 millions de dollars + rangées

J'ai un système qui enregistre certaines valeurs mesurées chaque seconde. Quelle est la meilleure façon de stocker des données de tendance qui sont des valeurs correspondant à une seconde spécifique?

    TREND_TIME datetime (clustered_index)
    TREND_DATA1 real
    TREND_DATA2 real
    ...
    TREND_DATA20 real

sql

4 commentaires

Les données de tendance vont-elles être lues ou mises à jour?


Vous devez spécifier le RDBMS - il s'agit d'une question de la mise en œuvre de la base de données physiques et non de la conception logique, les RDBM qui importent ici.


Il sera lu beaucoup pour afficher de nombreux types de graphismes.


Microsoft SQL Server Standard 2005 est utilisé.


3 Réponses :


0
votes

est le problème du schéma de base de données?

1 seconde à de nombreuses tendances Vous indique évidemment d'abord une table séparée avec une clé étrangère de seconde. Sinon, si les "nombreuses valeurs de tendance" sont représentées par les colonnes et non des lignes, vous pouvez toujours ajouter les colonnes sur la table secondes et inciter les valeurs null.

Avez-vous essayé cela? La performance était-elle pauvre?


0 commentaires

2
votes

Je modifierais l'approche de sauvegarde des données et au lieu de sauvegarder des données "brutes" en tant que valeurs, je sauverais 5 à 20 minutes de données dans une matrice (mémoire, côté BL), comprimez cette matrice à l'aide d'un algorithme à base de LZ, puis rangez le données dans la base de données comme données binaires. En outre, il serait agréable d'enregistrer max / min / avg / etc .. Info pour ce morceau binaire.

Lorsque vous souhaitez traiter les données, vous pouvez traiter le morceau de données après le morceau et que vous conservez un profil de mémoire faible pour votre application. Cette approche est un peu plus complexe mais très évolutive en termes de mémoire / de traitement.

J'espère que cela aide.


2 commentaires

Cette approche n'est pas évolutive, je pense parce que lorsque j'aimerais voir un mois de données, je dois décompresser beaucoup.


Je vois ce que tu veux dire. Pour résoudre ce problème, si possible, faites un résumé des données comprimées que vous avez sur une mois / année et stockez ce résumé dans la base de données. Vous auriez probablement besoin de stocker divers résumés représentant différentes opérations effectuées sur les données de base, mais vous obtiendrez une vitesse éblouissante.



3
votes

Avez-vous considéré comme RRDTool - il fournit une base de données Round Robin ou un tampon circulaire, car Données de séries chronologiques. Vous pouvez stocker des données à n'importe quel intervalle que vous aimez, puis définissez des points de consolidation et une fonction de consolidation, par exemple (somme, min, max, avg) pour une période donnée, 1 seconde, 5 secondes, 2 jours, etc. car il sait quoi Points de consolidation que vous souhaitez, il n'a pas besoin de stocker tous les points de données une fois qu'ils ont été approuvés.

ganglia et Cacti Utilisez ceci sous les couvertures et il est assez facile d'utiliser de nombreuses langues.

Si vous avez besoin de toutes les données de données, envisagez de l'utiliser uniquement pour l'agrégation.


2 commentaires

Je suis définitivement favorable à cette approche, j'utilise Ganglia pour suivre de nombreuses séries de données sur des années et cela fonctionne bien!


Merci, ganglia et cactus semblent très utiles. Mais je n'ai pas pu trouver une bibliothèque C # pour RRDTool.