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

Requêtes et SQL. Discussion :

Aide sur un algorithme de système linéaire


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut Aide sur un algorithme de système linéaire
    Bonjour à tous, je viens vers vous pour vous demander une aide sur la résolution d'un grand système linéaire par une méthode itérative
    J'ai un programme fonctionnel, tout est calé théoriquement, et l’algorithme converge vers le résultat souhaité

    J'aimerais accroître la taille des données et je fais face à un pb de performance. Aussi je voulais voir avec vous quelles possibilités il y aurait de réécrire l'algorithme de façon plus performante.

    Je dispose d'une base principale dont la taille idéale serait d'un million de lignes et de petites base cibles dont le total cumulé des lignes est d'environ 1000.

    l'opération élémentaire dans l'algorithme se déroule en 2 étapes
    - CALCUL de L'ERREUR (dans les petites bases)
    - CORRECTION (dans la grande base)

    après analyse des temps l'étape de correction est beaucoup plus longue que l'étape de calcul (dont le temps est négligeable en fait)


    L'étape de calcul de l'erreur est la suivante, rien d'extraordinaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Cible6.Académie, Cible6.Degré, ([Cible6].[Effectifs]-[CALCUL])/[COHORTE] AS Erreur, Cible6.Effectifs, Sum(Table1_en_cours_de_convergence.Effectif_temp) AS CALCUL, Count(Table1_en_cours_de_convergence.sexe) AS COHORTE INTO ErreurCible6
    FROM Cible6 LEFT JOIN Table1_en_cours_de_convergence ON (Cible6.Degré = Table1_en_cours_de_convergence.Degré) AND (Cible6.Académie = Table1_en_cours_de_convergence.Académie)
    GROUP BY Cible6.Académie, Cible6.Degré, Cible6.Effectifs;
    L'étape de correction est la suivante (requête UPDATE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ErreurCible6 RIGHT JOIN Table1_en_cours_de_convergence ON (ErreurCible6.Degré = Table1_en_cours_de_convergence.Degré) AND (ErreurCible6.Académie = Table1_en_cours_de_convergence.Académie) SET Table1_en_cours_de_convergence.Effectif_temp = IIf([Effectif_temp]+[ErreurCible6].[Erreur]/10<0,0,[Effectif_temp]+[ErreurCible6].[Erreur]/25);
    la requête est toute bête mais en terme de temps de calcul
    pour une grande table de 50 000 lignes je suis à 200s
    pour une grande table de 500 000 lignes je suis à 5000s

    au vu du nombre d'itérations nécessaire pour faire converger l'algorithme, les 5000s paraissent trop mais après plus j'ai de ligne mieux c'est par rapport à la précision souhaitée, 50 000 c'est un peu décevant...


    mis à part des optimisations théoriques consistant à enlever les lignes inutiles de la grande base au fur et à mesure avec une requête suppression (ce qui est prévu) je chercherais donc un moyen d'effectuer cette opération de mise à jour de façon plus efficace, si jamais c'est possible.

    est ce qu'éventuellement ça serait plus rapide de juste écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Effectif_temp]+[ErreurCible6].[Erreur]/25
    et de virer les valeurs négatives dans un second temps ?



    éventuellement, est ce que passer sous SAS permettrait d'être plus efficace ?
    Merci beaucoup pour votre aide

  2. #2
    Membre éprouvé
    Inscrit en
    août 2008
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : août 2008
    Messages : 710
    Points : 1 024
    Points
    1 024
    Par défaut
    Bonjour,

    a priori, Access n'est pas idéal pour gérer de tels volumes
    il faudrait penser à passer sur SQL Server, et c'est gratuit

  3. #3
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut
    est ce que SAS enterprise guide ferait l'affaire ? il est installé sur le même poste...
    si je reste sur Access, est ce qu'il y a des pistes d'amélioration ? travailler sur des champs indexés ?

  4. #4
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut
    ok bon je suis passé sous SAS pour monter en performance
    par contre j'ai remarqué que le SQL n'était pas écrit tout à fait pareil entre ACCESS et SAS, ça parle à quelqu'un cette histoire ?
    est ce qu'on peut trouver une table de correspondance entre les deux ?

    exemple dans access j'ai un select...group by, en SAS je suis obligé de mettre select distinct, enfin c'est bizarre...

Discussions similaires

  1. Aide sur un algorithme récursif
    Par christianf dans le forum Débuter
    Réponses: 2
    Dernier message: 20/08/2010, 05h35
  2. Aide sur les algorithmes genetique
    Par Djilou_15 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/01/2010, 18h44
  3. aide sur les Algorithmes Génétiques
    Par amineyamane dans le forum Intelligence artificielle
    Réponses: 8
    Dernier message: 30/06/2008, 02h52
  4. aide sur un algorithme glouton
    Par simplexieum dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 24/03/2008, 00h12
  5. Demande Aide sur un algorithme
    Par bouba69 dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 27/03/2007, 19h05

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