Optimisation BDD+ requêtes

cs_momoblue Messages postés 1 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 18 août 2003 - 18 août 2003 à 19:09
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006 - 19 août 2003 à 02:33
Bonjour,

je dois faire des calculs statistiques à partir de données en base et ne sais pas trop comment m'y prendre:

J'ai une table composée de 10000 appareils electriques (num_appareil).
chaque appareil subit un grand nombre d'évènements dans une journée (état modifié, intervention d'un opérateur...).
=> Objectifs :
Connaître le nombre d'évènements subis par un appareil pendant une période donnée. (je dois connaître la date et l'heure exactes de chaque évènement).
Pouvoir comparer ce nombre avec celui d'une autre période ou d'un autre appareil.
Afficher dans une IHM ces comparaisons. (ce qui sous entend avoir un historique du nombre d'évenements sur une longue période).

Or, chaque appareil peut subir 2000 opérations en une journée. ce qui fait pour mes 10 000 appareils environ 20 000 000 d'évènements traités par jour, soit 20 000 000 de mises à jour de compteurs dans une table de stats (update en temps reel) et 20 000 000 de requêtes d'affichage dans l'IHM.

Je voudrais optimiser tout cela en affichant les stats dans l'ihm non pas en temps réel mais en affichant les évènements cumulés sur une heure.

Est-il judicieux de créer des fonctions qui incrémentent un compteur et d'inserer la valeur du compteur une fois par heure dans la table stats (=> MAJ moins frequente)?
Ou puis-je simplement continuer un update en temps reel dans la base et faire une requête de selection une fois par heure pour un affichage dans l'IHM ?
Dois-je faire les deux?

Avez-vous des idées?
Merci beaucoup pour votre aide

2 réponses

cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
19 août 2003 à 02:31
Salut,

Ca depend des contraintes que tu te pose et du materiel que tu utilise. Pour 20 000 000 de select et update par jour si tout est compris dans les 8 heures de bureaux, tu as interet a avoir du bon matos.

Si tu dois seulement compter le nb d'evenement par appareil, perso je ferait tout en memoire en maintenant un tableau. Je ferait un backup du tableau toute les 10 minutes (2000 operations en une journee et une sauvegarde par heure, si ton systeme plante 59 minutes apres la derniere sauvegarde
tu perds un max d'info) avec 10 minutes, au pire sur une heure tu perd 15% de ta periode de statistique qui est l'heure).
Mais ca depends de la charge que ton systeme peut supporter.

Si tu doit identifier chaque evenement, j'opterai pour un fichier log et un autre systeme pour inserer le fichier log dans la Bdd lance par un batch toutes les heures.
L'avantage c'est que tu meme sauvegarder les fichiers logs et les graver quelque part au cas ou et tu peux faire l'insert dans la bdd sur une autre machine.

Laurent
0
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
19 août 2003 à 02:33
PS: n'oublie pas d'utiliser CFLOCK pour eviter les problemes d'erreurs de transations.
0
Rejoignez-nous