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

Java Discussion :

Stratégie pour afficher un grand nombre de données


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut Stratégie pour afficher un grand nombre de données
    Bonjour, j'ai choisi de poster ce sujet ici, mais j'aurais très bien pu le faire ailleurs car il n'est pas propre à Java, ni un autre langage. Cela dit, c'est Java que j'utilise, moi.

    Comme expliqué dans le titre, je cherche une stratégie pour afficher un résultat de 200 000 lignes. J'ai une table de ma base de données sous MySQL pas mal indéxée. En fonction de certains critères, je fais une restriction sur un attribut bient précis (le client). Lorsque je travaille sur un gros client, le SQBD peut me renvoyer jusqu'à 200 000 lignes. Il faut les afficher de manière simple et rapide
    A l'heure actuelle, j'affiche les données sur une IG swing et plus particulièrement une JTable. La fenêtre s'ouvre en 20-25 secondes et c'est beaucoup trop !!! Je trouve ça honorable, me concernant mais pas du point de vue utilisateur. Parmi les 200 000 lignes très peu seront utiles mais on m'impose de tout afficher. J'avais penser placer un filtre avant l'affichage de la fenêtre mais ce ne serait pas simple à l'utilisation.
    J'ai aussi pensé découper les résultats en pages limités en nombre de lignes, mais c'est également pas simple à utiliser.
    Et pour couronner le tout, l'ancien programme le faisait en 4 secondes (il affichait d'abord la fenêtre puis remplissait au fur et à mesure la table. Et le remplissage se faisait en fonction de la position de la scroll de la table !

    Alors si vous aussi vous avez déjà eu ce problème, comment avez-vous fait ?

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il faudrait voir comment tu remplit la table ?
    Si tu récupères les 200000 lignes pour les mettre dans une JTable cela peut être long en effet...

    Maintenant en chargeant les données au fur et à mesure de l'affichage tu peux t'en sortir bien mieux. Ce doit être faisable via un TableModel perso et un Cursor scrollable...


    a++

  3. #3
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    Je vois au moins 2 solutions :
    - Paginer ta table. Comme ca, tu n'affiches que 100 resultats par exemple et c'est rapide.
    - Remplir ta table progressivement en ne bloquant pas l'UI. Pour cela, il existe une classe : SwingWorker.

    a+

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Par défaut
    Merci pour vos réponses.
    Pour afficher les données, j'ai une méthode qui balaye mon résultset et copie les données ans un tableau d'objet qui est donné au TableModel.
    "Ce doit être faisable via un TableModel perso et un Cursor scrollable". Quel est le principe ?

    Le fait de remplir au fur et à mesure ne va pas prendre plus de temps que ce qui est déjà fait ? Surtout si on fait une MAJ instantanée de l'IG. Par ailleurs, qu'en est-il concernant le rendu ? C'est à dire lors d'une mise à jour de la table, est-ce que la scrollBar peut rester au même endroit plutot que de revenir tout en haut ?

    J'avais proposé l'idée de la pagination tout en étant contre et le client l'est aussi, car il faut retrouver l'info dans les pages. Navigation ultra-lourde !

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par oneagaindoguys Voir le message
    Pour afficher les données, j'ai une méthode qui balaye mon résultset et copie les données ans un tableau d'objet qui est donné au TableModel.
    Et cela met combien de temps ? Je parie que c'est ce code qui te prend du temps.

    De manière générale il faudrait que tu arrives à déterminer l'origine de ces 25 secondes dans ton code...

    [QUOTE=oneagaindoguys;5616225]"Ce doit être faisable via un TableModel perso et un Cursor scrollable". Quel est le principe ?[/code]
    A créer le Statement comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    Du coup lorsque tu fait une requête, le ResultSet est scrollable, c'est à dire que tu peux accéder à n'importe quelle ligne directement (sans forcément tout lire), en utilisant la méthode absolute()

    Du coup tu n'as pas besoin de charger toutes les lignes, mais uniquement les lignes qu'il te faut. Il faudra pour cela implémenter ton propre TableModel, et surement gérer correctement les threads EDT/SQL...


    a++

  6. #6
    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
    le but du cursor Scrollable, c'est de ne charger en mémoire que les 50 données visible à l'écran. Il faut savoir qu'un JTable ne dessine QUE les lignes visibles à l'écran. D'ou l'intéret de créer un TableModel (que JTable utilise pour lire les rows) utilisant un cursosr SQL. Tu n'a alors besoin que de charger le 50 lignes à l'écran, c'est beaucoup plus rapide.

    JAMAIS tu n'affichera 200.000 "en même temps", ton écran ne fait pas 50m de haut

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

Discussions similaires

  1. [2000] Meilleure méthode pour insérer un grand nombre de lignes
    Par nicodev24 dans le forum Développement
    Réponses: 11
    Dernier message: 31/10/2016, 11h25
  2. Pb pour lire un grand nombre de données
    Par seb111983 dans le forum JDBC
    Réponses: 12
    Dernier message: 28/09/2010, 21h57
  3. Requête pour modifier un grand nombre d'entrée
    Par gatsu00 dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/11/2007, 09h47
  4. Type PostgreSQL pour stocker des grands nombres
    Par K-Kaï dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/06/2006, 20h26
  5. [Stratégie] Manipulation d'un grand nombre d'objet
    Par Aldouille31 dans le forum Langage
    Réponses: 8
    Dernier message: 10/05/2006, 13h01

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