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

Langage Java Discussion :

[Stratégie] Manipulation d'un grand nombre d'objet


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [Stratégie] Manipulation d'un grand nombre d'objet
    Bonjour à tous,

    Je dois maintenir une application JAVA/JDBC. Après l'avoir testée j'ai rencontré deux gros problèmes :
    1/ L'appli est longue à réagir aux évènements générés par l'utilisateur (elle rame en gros),
    2/ Le temps de sauvegarde (suivant le nombre de données à sauvegardée) peut durer jusqu'à 2 heures.

    La cause principale donc est le nombre de données donc d'objet à gérer. En effet j'ai en moyenne 120 000 objets en mémoire et chacun de ces objets est dans une HashMap. Chacun de ces objets peut être en relation avec tous les autres donc on arrive à la fin à un graphe énorme.

    Tous ces objets sont affichés dans l'application sous forme de liste et en cliquant sur un objet on peut obtenir toutes les relations de cet objet.
    Pour la sauvegarde en base de données l'application prend chaque objet et pour chaque objet regarde ces relations puis envoie ces relations à la base de données.

    Pour la sauvegarde, une des solutions envisagées serait de mettre dans une liste toute les requêtes et ensuite de tout envoyé en bloc à la base.
    Est-ce que ça serait plus efficace que d'envoyer petit bout par petit bout.

    Ensuite je pense que la structure de données actuelle n'est pas adapté. Il faudrait peut être passer par une matrice ou autres.

    Voila donc en fait j'aimerai savoir si vous aviez déjà rencontré ce genre de situation et si oui quel stratégie vous avez adopté.

    Merci d'avance

  2. #2
    Membre régulier Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 103
    Points
    103
    Par défaut
    Salut,

    Si j'ai bien compris, en gros, lorsque tu lance ton prog, tu charge toute ta base de donnée dans ton prog ?
    Si c'est bien ça, je pense que le mieux est d'extraire et de sauvegarder en temps réel les informations dont tu a besoin afin d'étaller la charge du programme sur la durée d'utilisation de celui-ci.

    A+

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci

    En gros c'est ça.

    Le problème avec cette solution c'est que ça ne changera pas le fait que la navigation dans l'application rame. Je pense plutôt faire tomber l'architecture de l'appli pour pouvoir mettre un structure de données pouvant modéliser un graphe.

  4. #4
    Membre régulier Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 103
    Points
    103
    Par défaut
    Aprés c'est sur que si ton appli est trés gourmande en ressources, il faut adapté la machine

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ben en fait j'ai poussé la mémoire utilisé de l'application jusqu'à 1024 MO, et ça change pas grand chose.

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 67
    Points : 55
    Points
    55
    Par défaut
    Salut
    Personnellement, pour ton problème de sauvegarde, je te conseille de jeter un conseil vers les fonctions addBatch() et executeBAtch() de java.sql.Statement qui vont te permettre de faire du traitement par lot.
    C'est à mon avis beaucoupl plus efficace que de faire des traitements unitaires....

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Citation Envoyé par zoullou
    Salut,

    Si j'ai bien compris, en gros, lorsque tu lance ton prog, tu charge toute ta base de donnée dans ton prog ?
    Si c'est bien ça, je pense que le mieux est d'extraire et de sauvegarder en temps réel les informations dont tu a besoin afin d'étaller la charge du programme sur la durée d'utilisation de celui-ci.

    A+
    +1

    Et si, ça devrait aussi accélérer la navigation puisque la mémoire virtuelle ne sera plus utilisée.

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Aldouille31
    La cause principale donc est le nombre de données donc d'objet à gérer. En effet j'ai en moyenne 120 000 objets en mémoire et chacun de ces objets est dans une HashMap. Chacun de ces objets peut être en relation avec tous les autres donc on arrive à la fin à un graphe énorme.
    Je ne connais pas ta structure actuelle et donc ce que je propose n'est pas adapté, mais est-ce que un systéme de cache ne serait pas plus adapté que d'avoir le tout en mémoire. Ceci est un exemple simple d'un manager de cache http://www.developer.com/java/other/article.php/630481 sinon il existe des lib comme ehCache http://ehcache.sourceforge.net/

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci à tous de vos réponses

    Je vais essayer en effet de mettre toutes les requêtes dans un batch et de l'exécuter ensuite. A mon avis ça devrait déjà améliorer le temps de sauvegarde.

Discussions similaires

  1. Affichage d'un grand nombre d'objets
    Par Shindo dans le forum GLUT
    Réponses: 6
    Dernier message: 04/10/2011, 16h51
  2. Stratégie pour afficher un grand nombre de données
    Par oneagaindoguys dans le forum Général Java
    Réponses: 50
    Dernier message: 09/12/2010, 10h22
  3. Réponses: 10
    Dernier message: 25/05/2010, 14h25
  4. [ADO.NET] grand nombre d'objets de connexions
    Par barnet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 06/06/2007, 01h39
  5. Manipulation de très grands nombres
    Par BernardT dans le forum Langage
    Réponses: 6
    Dernier message: 07/07/2006, 16h26

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