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

XSL/XSLT/XPATH XML Discussion :

Temps de lecture d'un "gros" fichier XML [XPATH 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 39
    Points
    39
    Par défaut Temps de lecture d'un "gros" fichier XML
    Bonjour,

    Je développe une appli qui lit des infos dans un fichier XML.
    Ce fichier XML risque de grossir de manière exponentielle au fil du temps, mais ne devrait jamais dépasser les 10.000 ou 15.000 lignes.

    Je souhaiterais savoir si les requêtes XPath que je lance sur ce fichier vont devenir vraiment lentes lorsque ce dernier aura atteint plusieurs milliers de lignes ?

    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Cela dépend de la complexité de tes requêtes xPath et de la profondeur des imbrications.
    Des xPath complexes peuvent rendre ça infiniment lent, oui.
    Une faible profondeur d'imbrication en réduit beaucoup les risques.

    Forcément, plus c'est gros, plus c'est long. Mais 10.000 ou 15.000 lignes c'est pas énorme.

    Accessoirement, comme le signale souvent Erwy, c'est l'occasion de se débarrasser des //truc ou machin//truc ou des descendant::machin

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    A vrai dire, j'ai découvert XPath il y a une dizaine de jours (en faisant ce projet justement), donc j'aurai du mal à dire si mes requêtes sont si complexes que ça.

    Exemple :
    //Event[SaveDate[contains(., '{0}')] and Finished='{1}']
    ou encore
    //Event[SaveDate[starts-with(., '{0}')] or SaveDate[starts-with(., '{1}')]

    Aucune ne me semble plus "complexe" que cela, a part une qui a 6 "or" à la suite...


    A propos de ta dernière phrase... "se débarrasser des //truc" ... Peut-tu préciser comment améliorer ça ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Citation Envoyé par Ikki_2504 Voir le message
    A propos de ta dernière phrase... "se débarrasser des //truc" ... Peut-tu préciser comment améliorer ça ?
    Remplacer par /le/chemin/clair/et/precis/vers/le/truc et tu seras ok. Pas de //, c'est cher sur les gros fichiers.

  5. #5
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Accessoirement, comme le signale souvent Erwy, c'est l'occasion de se débarrasser des //truc ou machin//truc ou des descendant::machin


    Je dirais qu'en ordre de coût général croissant on a :
    1. child/parent
    2. following-sibling/preceding-sibling
    3. following/preceding
    4. descendant/descendant-or-self
    5. Xpath avec un prédicat contenant lui même un xpath de type 2 à 4


    Si on est dans du XSLT deux autres conseils
    • quand c'est possible utilisez des algo utilisant des xsl:key
    • privilégiez toujours les XPath relatif au noeud courant


    je plussoie thelvin 10000 ou 15000 lignes ce n'est pas forcemment énorme.
    La problématique , comme pour un sgbdr , est moins le nombre d'enregistrement ou de "lignes" que :
    - la complexité de la requête
    - la complexité de la structure de donnée
    - la "taille" d'une ligne

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Merci des réponses

    Donc si j'ai bien compris (ce qui n'est pas certain )

    Mon document XML étant structuré de manière très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="utf-8"?>
    <EventList>
      <Event ID="0">
        <A>valeurA</A>
        <B>valeurB</B>
        <C>valeurC</C>
        <D>valeurD</D>
        <E>valeurE</E>
      </Event>
      <Event ID="1">
        ...
      </Event>
    <EventList>
    ... Ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Event[C[contains(., '{0}')] and D='{1}']
    doit être remplacée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //EventList/Event[C[contains(., '{0}')] and D='{1}']
    histoire d'être plus efficace ?

  7. #7
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par Ikki_2504 Voir le message
    ... Ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Event[C[contains(., '{0}')] and D='{1}']
    doit être remplacée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //EventList/Event[C[contains(., '{0}')] and D='{1}']
    histoire d'être plus efficace ?

    NON, c'est la même chose c'est par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /EventList/Event[C[contains(., '{0}')] and D='{1}']
    thelvin >> j'espère que tu ne l'as pas trop mal pris hier mais tu peux constater l'ampleur du problème

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    C'est la même chose c'est bien ce qu'il me semblait ...

    Donc c'est la réponse de thelvin que je n'ai pas compris

    "Remplacer par /le/chemin/clair/et/precis/vers/le/truc et tu seras ok. Pas de //, c'est cher sur les gros fichiers. "
    => Ça ne s'applique donc pas sur MON fichier ?

  9. #9
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par Ikki_2504 Voir le message
    /truc et tu seras ok. Pas de //, c'est cher sur les gros fichiers. "
    => Ça ne s'applique donc pas sur MON fichier ?
    si mais le code XPath que tu viens de donner comprenait un // relis toi

    //EventList/Event[C[contains(., '{0}')] and D='{1}']
    alors que c'est
    /EventList/Event[C[contains(., '{0}')] and D='{1}']

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Citation Envoyé par Ikki_2504 Voir le message
    "Remplacer par /le/chemin/clair/et/precis/vers/le/truc et tu seras ok. Pas de //, c'est cher sur les gros fichiers. "
    => Ça ne s'applique donc pas sur MON fichier ?
    Ben non... Tu me l'avais pas montré ton fichier, je pouvais pas deviner le chemin.

    Citation Envoyé par Erwy
    thelvin >> j'espère que tu ne l'as pas trop mal pris hier mais tu peux constater l'ampleur du problème
    Je ne l'ai pas pris mal ni ne laisse s'installer un quelconque mauvais sentiment, mais je ne suis pas d'accord avec l'idée que j'aurais dû tourner mon message autrement. En revanche, je trouve bénéfique que ça ait été abordé après, par quelqu'un d'autre, après que le cœur de la question ait été abordé.
    Mais ça va être long si je dois dire pourquoi.

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Ah oui exact, faute d'inattention.

    Bon ok maintenant j'ai compris, merci à vous deux

+ Répondre à la discussion
Cette discussion est résolue.

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