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 :

TreeMap comme clef d'une TreeMap


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 24
    Par défaut TreeMap comme clef d'une TreeMap
    Bonjour,

    dans un contexte de scoring, je précalcule un score attribué à un profil que je stocke dans une TreeMap<mesCaracteristiquesProfil, monScore>.

    monScore est un Double.
    Pour facilement reconstruire une clef identique quelque soit l'ordre de lecture des caractéristique de chaque profil à l'insertion dans la TreeMap ou plus tard à la lecture, mesCaracteristiquesProfil est en fait une TreeMap, ce qui donne comme structure de données :

    TreeMap<TreeMap<String,Integer>, Double>

    Or dans ma TreeMap de plus haut niveau, je veux insérer plusieurs dizaines de milliers de clef, donc plusieurs dizaines de milliers de TreeMap qui contiennent chacun 5 à 10 clefs (sous forme de String) au max et un Integer associé sous cette forme :
    clef = "Caractéristique A", valeur = 1
    clef = "Caractéristique B", valeur = 2
    clef = "Caractéristique C", valeur = 3
    ...

    Je sature la mémoire avec mes milliers de TreeMap qui me servent de clef, y'aurait-il un moyen de faire des clefs aussi simplement mais qui ne sature pas la mémoire ?
    Par exemple, si je convertissais mes TreeMap en String, l'effet sur la mémoire pourrait-il être notable ?

    Merci de m'avoir lu !

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Il serait peut-être temps de passer par une base de données ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 24
    Par défaut
    En fait, je crée ces TreeMap de TreeMap à la volée, je fais environ un million de requêtes dessus en quelques secondes et l'efface. Je répète ce processus quelques milliers de fois à chaque exécution de mon programme.

    Je ne suis pas un expert, très loin de là, mais de cette manière j'ai l'impression que tous mes scores restent en mémoire. Je souhaiterais réduire l'empreinte mémoire de cette TreeMap qui contient mes scores pour éviter de swapper ce qui entraine un effondrement des perfs.

    Si je passe par une base de données, cela risque de fortement réduire les performances comme pour le swap, non ?

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Neilime Voir le message
    En fait, je crée ces TreeMap de TreeMap à la volée, je fais environ un million de requêtes dessus en quelques secondes et l'efface. Je répète ce processus quelques milliers de fois à chaque exécution de mon programme.
    Est-il nécessaire de tout stocker en mémoire ? Fais-tu des calculs entre les différents scores ?

    Si je passe par une base de données, cela risque de fortement réduire les performances comme pour le swap, non ?
    Ca dépend de pleins de paramètres : machine, choix du SGBD, efficacité du code...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 24
    Par défaut
    Merci de ton aide !

    Citation Envoyé par dinobogan Voir le message
    Est-il nécessaire de tout stocker en mémoire ? Fais-tu des calculs entre les différents scores ?
    Lors de la phase de requêtes à mon TreeMap, chaque score est appelé au moins une fois au minimum et plusieurs milliers de fois au maximum

    En fait, j'ai opté pour utiliser un TreeMap car je recois les caractéristiques de mes profils dans le désordre et les donner à manger à une TreeMap permet d'être sûr d'avoir toujours le même ordre de rangement à l'intérieur quelque soit l'ordre d'ajout des paramètres à la TreeMap et donc une bonne clef pour mon TreeMap du dessus.

    Mais peut-être pourrais-je juste faire un toString() de cette TreeMap. J'imagine qu'un String de mettons 30 caractères prend toujours moins de place qu'une TreeMap avec 4 clefs String et 4 Integer associés. C'est bien le cas ?

    C'est du bidouillage, mais au moins, je garde mes clefs sous la forme de plusieurs dizaines de milliers de String au lieu de plusieurs dizaines de milliers de TreeMap.

    Citation Envoyé par dinobogan Voir le message
    Ca dépend de pleins de paramètres : machine, choix du SGBD, efficacité du code...
    Bon, en parallèle je suis aussi cette piste, elle sera sans doute utile quand je voudrais encore augmenter la taille des TreeMap qui me servent de clef ou leur nombre !
    Mes codes tournent sous une machine Linux 8 cœurs Xeon @2,67GHz avec 8 Go de mémoire vive. Un indice sur les différentes solutions qui pourraient me convenir ?

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Neilime Voir le message
    Lors de la phase de requêtes à mon TreeMap, chaque score est appelé au moins une fois au minimum et plusieurs milliers de fois au maximum

    En fait, j'ai opté pour utiliser un TreeMap car je recois les caractéristiques de mes profils dans le désordre et les donner à manger à une TreeMap permet d'être sûr d'avoir toujours le même ordre de rangement à l'intérieur quelque soit l'ordre d'ajout des paramètres à la TreeMap et donc une bonne clef pour mon TreeMap du dessus.
    Tu devrais détailler un peu plus ton architecture ainsi que l'algo de traitement de tes scores. Je ne sais toujours pas ce que tu veux faire...

    Mais peut-être pourrais-je juste faire un toString() de cette TreeMap. J'imagine qu'un String de mettons 30 caractères prend toujours moins de place qu'une TreeMap avec 4 clefs String et 4 Integer associés. C'est bien le cas ?
    Un int est sur 4 octets, un char sur un octet.
    Si ta volumétrie de score augmente, tu vas retrouver le problème de mémoire.
    Trouve un moyen de ne pas mettre tout en mémoire et de traiter au fur et à mesure. Mais sans plus d'info sur ce que tu fais, impossible de te guider.

    C'est du bidouillage, mais au moins, je garde mes clefs sous la forme de plusieurs dizaines de milliers de String au lieu de plusieurs dizaines de milliers de TreeMap.
    Attention aussi aux opérations que tu souhaites faire sur les String. Cela peut être très couteux en temps.

    Mes codes tournent sous une machine Linux 8 cœurs Xeon @2,67GHz avec 8 Go de mémoire vive. Un indice sur les différentes solutions qui pourraient me convenir ?
    Aucune idée. Les caractéristiques techniques d'une machine ne suffisent pas. Je ne sais pas ce qui va tourner sur la machine à part ton programme et je ne connais rien de ton programme
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par Neilime Voir le message
    En fait, je crée ces TreeMap de TreeMap à la volée, je fais environ un million de requêtes dessus en quelques secondes et l'efface. Je répète ce processus quelques milliers de fois à chaque exécution de mon programme.

    Je ne suis pas un expert, très loin de là, mais de cette manière j'ai l'impression que tous mes scores restent en mémoire. Je souhaiterais réduire l'empreinte mémoire de cette TreeMap qui contient mes scores pour éviter de swapper ce qui entraine un effondrement des perfs.
    Est-ce que ce n'est pas plutôt ces créations / destructions d'objets volumineux qui te pourrissent tes perfs ? En fait, si tu as toujours les même objets, il vaudrait probablement mieux les garder en mémoire.

    Sinon, j'imagine que tu as un objet qui englobe ta TreeMap<String,Integer> ?
    Question bête annexe : pourquoi ne pas définir un objet Profil avec des membres caractéristiques de Profil ? (s'ils ne varient pas trop, mais tu dis qu'il y en a de 5 à 10, on peut espérer que ça soit les même).

Discussions similaires

  1. Tri ordre décroissant par valeur dans une TreeMap
    Par tifsa dans le forum Général Java
    Réponses: 5
    Dernier message: 10/12/2014, 16h51
  2. Problème inexplicable avec une TreeMap (containsKey)
    Par fabrisss dans le forum Langage
    Réponses: 4
    Dernier message: 10/06/2011, 10h18
  3. retourner une TreeMap avec webservice
    Par debutanteVB.NET dans le forum Services Web
    Réponses: 1
    Dernier message: 09/07/2008, 18h11
  4. Position des éléments dans une TreeMap
    Par freakfm dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 14/06/2007, 23h37
  5. [TreeMap] comparer et fusionner deux TreeMap
    Par LoLoSS dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 06/09/2004, 11h49

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