IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Optimisation de requête pour de nombreux enregistrements


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Optimisation de requête pour de nombreux enregistrements
    Bonjour,

    J'ai un programme qui récupère régulièrement (toutes les 5 secondes) un grand nombre d'informations depuis un équipement. Ces informations (séparées en 3 groupes : data1, data2, data3) sont pour la plus part du temps identiques mais j'ai besoin d'avoir un historique de leurs changements.

    Comme ces informations sont souvent identiques, je ne veux pas les enregistrer plusieurs fois en base données. C'est pourquoi, je pensais faire un hash pour chacun des groupes de données data1, data2 et data3 puis de les comparer lors de l'enregistrement.

    Je pensais donc faire 5 tables :
    • Une qui liste les équipements.
    • Une pour le groupe de données data1 avec un champ "hash" qui contient le hash de l'ensemble des autre champs.
    • Une pour le groupe de données data2 avec un champ "hash" qui contient le hash de l'ensemble des autre champs.
    • Une pour le groupe de données data3 avec un champ "hash" qui contient le hash de l'ensemble des autre champs.
    • Une pour la relation entre les équipements et les groupes de données avec un timestamp pour l'enregistrement et un timestamp pour chacun des groupes de données qui indique le timestamp de la dernière modification des données pour le groupe.


    J'ai ensemble de données d'environ 2000 lignes à enregistrer toutes les 5 secondes qui contiennent le nom de l'équipement, ainsi que les données des groupes data1, data2 et data3 avec le hash calculé pour chacun des groupes.

    Voici la structure des tables que je pensais faire mais je ne vois pas comment comment faire ma requête d'enregistrement par ce qu'il faut trouver l'ID d'un groupe de données si il existe déjà ou le créer si il n'existe pas, puis enregistrer l'ID correspondant aux bonnes données.

    Avez-vous une idée ? peut être que la structure de données n'est pas appropriées.

    Merci par avance.

    Table "equipement" :
    • id
    • name


    Table "data1" :
    • id
    • value1
    • value2
    • value3
    • value4
    • hash


    Table "data2" :
    • id
    • value1
    • value2
    • value3
    • value4
    • hash


    Table "data3" :
    • id
    • value1
    • value2
    • value3
    • value4
    • hash


    Table "equipement_data" :
    • id
    • timestamp
    • id_equipement
    • data1_id
    • data1_timestamp
    • data2_id
    • data2_timestamp
    • data3_id
    • data3_timestamp

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Ce modèle est à chier et ne vous posera que des problèmes. Il viole la première forme normale par apocope ! Vous aurez donc plein de NULL et votre base sera contre performante.
    Si vous voulez historiser les données, mieux vaut vous tourner vers des solutions intégrées à la base. Tournez-vous vers les tables temporelles, qui font partie de la norme SQL et qui sont implémentées notamment dans IBM DB2 ou MS SQL Server :
    http://mssqlserver.fr/wp-content/upl...mmentaires.pdf
    L'historique étant stocké en mode compressé avec des opérateurs de recherches temporelles spécialisés et donc optimisés...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. requête pour grouper des enregistrements
    Par grassel dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/04/2009, 18h37
  2. [MySQL] Requête pour éliminer les enregistrements NULL
    Par gtraxx dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 12/03/2009, 09h09
  3. Réponses: 3
    Dernier message: 07/10/2008, 11h23
  4. Réponses: 4
    Dernier message: 29/11/2007, 10h56
  5. Réponses: 7
    Dernier message: 22/08/2007, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo