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

JDBC Java Discussion :

[ResultSet] temps de traitement


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 8
    Points
    8
    Par défaut [ResultSet] temps de traitement
    Bonjour a tous,
    J'ai un problème de temps de traitement d'un Resultset. Le résultat de la requete fait environ 100.000 lignes, l'éxecution de la requete est rapide (~1sec), le problème vient du fait que le traitement du ResultSet, copie des résultats dans un tableau, prend plusieurs minutes. Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (rs.next()){
        m_tabEntries[id] = rs.getString(1);
        m_tabIds[id] = rs.getInt(2);
        id++;
    }
    Quelqu'un a-t-il une idée?
    merci
    "L'experience est le nom que l'homme donne à ses erreurs" O.Wilde

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Tu n'a rien d'autre dans ton traitement
    Parce qu'il n'y a rien de bien méchant dans ton code... à moins que les chaines de caractères que tu récupère ne soit vraiment énorme...

    a++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    non, je n'ai que ca et les chaines de caractères font entre 2 et 20 caractères. Ca peut venir du nombre de lignes?
    "L'experience est le nom que l'homme donne à ses erreurs" O.Wilde

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2002
    Messages : 125
    Points : 150
    Points
    150
    Par défaut
    c'est quoi ta base de données ?
    ne ré-inventez pas la roue, allez chercher dans les Commons de Jakarta

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Mon SGBD? SQL server.
    "L'experience est le nom que l'homme donne à ses erreurs" O.Wilde

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    J'ai fait quelques expériences, et je me suis rendu compte que quand j'effectuais des tests sur un serveur local, ca fonctionnait correctement. C'est quand j'effectue les requetes sur le serveur (relié par le réseau) que les requetes mettent beaucoup de temps à être exécutés. Des idées?
    "L'experience est le nom que l'homme donne à ses erreurs" O.Wilde

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Il faudrait voir si tu as les mêmes problèmes réseaux avec d'autres applications...

    Sinon quel est la version de ta JVM ?
    Si tu as une JVM 5.0 inférieur à l'update 6, tu peux avoir des problèmes de latence sur un réseau Windows avec le protocole NetBIOS...

    a++

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Pour la JVM, j'ai la dernière version.

    En ce qui concerne les autres applications ce n'est pas le cas (mais les données sont beaucoup moins nombreuses et les requetes comportent beaucoup de jointures, ce qui n'est pas le cas la [select * from ma_table]).
    "L'experience est le nom que l'homme donne à ses erreurs" O.Wilde

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Points : 11 101
    Points
    11 101
    Par défaut
    Si je comprends bien, tu as une table avec 100.000 records.
    Et tu récupères les 2 premiers éléments de chaque records.
    Apparemment tu fais un select * from table.

    1) Est-ce que la connection est ouverte en READ-ONLY ?
    Ca va déjà accélérer les performances.
    2) N'y a-t-il que 2 champs dans la table ?
    Sinon, le select * from table va te ramener plus que 200.000 elements, alors que tu en utilises que 200.000

    Aussi, si la connection réseau est lente, tu peux toujours augmenter le # de records à ramener en cache. En effet, tous les 100.000 records ne sont ramené en 1 secondes. Seuls X records sont ramenés et quand la cache est vide, le driver JDBC refait une transaction réseau avec la DB pour obtenir les X records suivants. Plus X est petis, plus il y a de transactions réseaux. Si tu sais à l'avance que tu auras un grand nombre, et que tu as la place mémoire, tu peux monter le nombre de records à ramener en cache.

    Voilà quelques un de mes conseils.

    Vincent
    Vincent Brabant

    Ne pas me contacter par MP ni par mail pour des questions techniques. Ma liste d'amis restera vide.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  10. #10
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Pour compléter les conseils de vbrabant.

    Voici un article (en anglais) sur les bonnes pratiques avec jdbc
    Bien le bonjour chez vous
    Jowo

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    J'ai trouvé! il m'a suffit de remplacer cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
    																   ResultSet.CONCUR_READ_ONLY);
    Par celle ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,
    																   ResultSet.CONCUR_READ_ONLY);
    Résultat, requete + traitement 2m30s -> 15s. Merci de votre aide.
    "L'experience est le nom que l'homme donne à ses erreurs" O.Wilde

Discussions similaires

  1. Utilisation JProgressBar & temps de traitement incconu
    Par greg1602 dans le forum Composants
    Réponses: 22
    Dernier message: 30/11/2005, 20h52
  2. [Tableaux] Temps de traitement ... affichage de page
    Par mathieu77186 dans le forum Langage
    Réponses: 37
    Dernier message: 25/10/2005, 17h45
  3. [MySql] temps de traitement interminable
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/07/2005, 15h14
  4. [Perf]Utilisation des Logger et temps de traitement ?
    Par elitost dans le forum Logging
    Réponses: 6
    Dernier message: 12/04/2005, 23h13
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

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