MSSQL et historisation de données temps réel - SQL/NoSQL - Programmation
Marsh Posté le 30-01-2009 à 11:47:26
J'imagine plutôt cette architecture :
Création d'un trigger sur la table source, qui :
1/ efface dans la table historique les lignes ayant plus de 10 minutes (sauf la ligne la plus récente, au cas où il n'y ait pas de modifications pendant plus de 10 minutes)
2/ ajoute la ligne qui vient d'être inserrée
Avantages :
1/ pas besoin de passer par un job
2/ si la donnée change 5 fois en 15 secondes seconde, tu as les 5 valeurs dans ton historique, ce qui est intéressant pour lisser les valeurs
3/ si la donnée ne change pas en 10 minutes, alors tu n'as pas de lignes superflues dans ta table, juste une
Ensuite, c'est à ton programme qui va lire la table de partitionner en 10zaines de secondes afin de faire un joli graphique, et déduire les données vides à partir de la valeur précédente.
Pour ce qui est de la charge, elle est absolument négligeable avec cette solution si tu n'as pas des dizaines de mise à jour par seconde dans la table source.
Marsh Posté le 30-01-2009 à 12:01:07
question peut-etre con mais pourquoi tu passes par une table temporaire? au lieu que ton graphe passe direct sur la prod
Marsh Posté le 30-01-2009 à 13:48:32
parce que la table source n'historise pas d'après ce que je comprends.
l'ancienne donnée est remplacée à chaque fois et perdue.
Marsh Posté le 28-01-2009 à 14:06:00
Hello.
Je vous explique ma problématique.
Je dispose d'un système qui se sert de MSSQL pour fournir des données temps réel.
Je dispose donc d'une table dont les données sont rafraichies toutes les 15 secondes. Je m'intéresse à une de ces données dont je veux suivre l'évolution.
Le besoin exprimé est de disposer d'un graphe mis à jour au fil de l'eau qui représente l'évolution de cette donnée sur les 10 dernieres minutes.
Voici la solution que j'ai imaginée:
- un process qui toute les 15 secondes récupère la donnée dans la table temps réel et la copie dans une nouvelle table. Pour ca, j'imaginais une procédure stockées, mais il faut disposer d'un moyen de la déclencher toutes les 15 secondes. Sous oracle, cela se fait grace à un JOB, mais existe-t-il un équivalent en MSSQL?
- création d'une "vue" qui me présente les 40 derniers enregistrements de cette nouvelle table (15 sec=4 enregistrements /min, sur 10 minutes)
- purge régulière de la table (jamais besoin de plus de 40 enregistrements)
- un système externe accède aux 40 données de la vue et les présente sous forme de barre-graphe (une barre par donnée), et répète l'opération toutes les 15 secondes (voire moins)
question 1: est-ce que ca vous parrait faisable?
questions 2: comment évaluer la charge "serveur" (CPU...) d'une telle solution, sachant qu'elle sera multipliée par 20 voire 30 (j'aurai facilement 20 à 30 flux de ce type à traiter sur le même serveur)? En fait, pour que je puisse effectuer tout cela sur le serveur existant, il faut que la charge ajoutée soit négligeable par rapports aux performances normales de la machine (un bon serveur "normal" d'aujourd'hui, probablement un 2x2 cores ou 2x4 cores).. car le serveur héberge à la fois la base de données et l'application temps réel métier (assez lourde). Est-ce qu'il faut mettre en palce tout ca sur une seconde base hébergée sur un serveur indépendant?
merci de votre aide