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

Hibernate Java Discussion :

[Performance] Recuperation de grosses données


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut [Performance] Recuperation de grosses données
    Bonjour,

    J'ai une requête qui récupère 100.000 lignes d'un coup qui prend beaucoup de temps pour s'exécuter.

    Pour gagner en performance, je voudrais faire un programme qui me permet de récupérer 1000 lignes par 1000 par exemple et les mettre dans un tampon pour les utilisées à la volée.

    Pourriez vous me donner un exemple ou un fil à suivre. Car je sais pas comment indiquer dans une requête SQL (HQL dans mon cas) le faite de récupérer 1000 lignes à partir d'un index donné.

    Toute idée est la bienvenue. Merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Dans l'objet session de hibernate, tu va trouver une méthode createQuery(), où tu passe ta requête hql habituelle. L'objet Query retourné présente deux méthodes: setFirstResult(int indexDebut) et setMaxResults(taille). Ensuite tu fait un query.list() et t'as une liste de taille limitée, comme demandé

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Merci bq c'est ce que je cherchais

  4. #4
    Membre éclairé Avatar de spoklo
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 67
    Par défaut
    Bonjour;
    Pour SQL :
    il faut utiliser : SELECT ..... LIMIT ... OFFSET...
    dans ton cas : SELECT ... LIMIT 1000 OFFSET offset.
    il faut faire de la pagination pour le offeset, offeset = (pageNum-1)*1000

    voir la doc ici : http://dev.mysql.com/doc/refman/5.0/fr/select.html

    Pour HQL, il existe des fonctions pour org.hibernate.Query;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    queryLength=1000;
    queryOffset=(pageNum-1)*1000;
    query.setFirstResult(queryOffset);
    query.setMaxResults(queryLength);
    Bon courage

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Merci bien

  6. #6
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Citation Envoyé par spoklo Voir le message
    Pour SQL :
    il faut utiliser : SELECT ..... LIMIT ... OFFSET...
    dans ton cas : SELECT ... LIMIT 1000 OFFSET offset.
    Tu voulais dire pour MySQL ?
    Je ne suis pas sur que ce code SQL fonctionne sur d'autres SGBD

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    c'est du sql standardn et meme si ca ne l'était pas le driver se chargerait du dialecte spécifique au sgbd

  8. #8
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Citation Envoyé par *alexandre* Voir le message
    c'est du sql standardn et meme si ca ne l'était pas le driver se chargerait du dialecte spécifique au sgbd
    Ce n'est pas le driver qui va se charger du dialecte spécifique, mais en l'occurrence, avec Hibernate, c'est le choix du Dialect spécifique de la base de données.

    Et ce n'est pas du SQL standard, mais la version 2008 du langage devrait standardiser les mots clés de pagination. Pour s'en convaincre, il suffit de regarder les implémentations de dialect sur la gestion de la pagination, au choix : OracleDialect, DB2Dialect

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

Discussions similaires

  1. [Performance]Recuperer une liste important de données
    Par Shivan dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/02/2009, 20h57
  2. Réponses: 2
    Dernier message: 27/03/2006, 21h17
  3. Recuperation d'une donnée dans ma popup
    Par leloup84 dans le forum Langage
    Réponses: 2
    Dernier message: 09/02/2006, 14h59
  4. recuperation d'une donnée
    Par BernardT dans le forum Langage
    Réponses: 2
    Dernier message: 11/12/2005, 15h12
  5. Problème de performance sur une "grosse" BD
    Par frechy dans le forum Installation
    Réponses: 9
    Dernier message: 19/09/2005, 16h52

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