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

JPA Java Discussion :

Pour palier à un problème de taille disque je tombe sur un problème de HashMap


Sujet :

JPA Java

  1. #1
    Membre habitué Avatar de zolive
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 152
    Points : 137
    Points
    137
    Par défaut Pour palier à un problème de taille disque je tombe sur un problème de HashMap
    J'ai un très très grand nombre de donnée, d'où un problème massif de taille disque et de mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Class A {
    Map<String,B> map;
    }
    Class B {
    long id;
    A monParent;
    String nom;
    }
    Coté BDD :
    Une Table A represente les objects A
    Une Table B represente les objects B

    J'ai environ 500 000 Object A
    Un Object A est lié à environ 1000 object B representant ses parametres

    Cette Table B possède donc des Millions d'enregistrements
    cette table a un champ NOM de type String de longueur max 256

    Cela me pose le problème de place car des Millions de B * 256 ça commence à faire beaucoup sur le disque ;-)

    Si je regarde attentivement l'ensemble des NOM possibles pour B, ils peuvent être contenue dans une table de reference NOM_REF qui elle ne contient du coup qu'environ 1000 à 2000 valeurs.

    Table NOM_REF
    int id
    String name

    et B devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Class B {
    long id;
    A monParent;
    NomRef refDunNom;
    }
    Ca a le mérite de permettre de remplacer dans B le NOM par un NOM_REF
    d'ou un gain de place énorme puisque chaque B me coute 254 octets de moins en base

    Jusque là je suis content ;-)

    Par contre le problème arrive avec la classe A :
    Map<String,B> devient Map<NomRef,B>

    Le hashCode de NomRef n'est pas invariant comme pour une string :-(
    ce qui me pose d'enorme problème pour retrouver l'objet B

    Meme si je m'amuse à redefinir le hashcode et le equal de NomRef (en se basant par exemple sur l'Id) comme c'est Hibernate qui me les remontent depuis la BDD je suis dans l'incapacité de le rendre invariant (hibernate fait les set sur les attributs ce qui change le hashcode)

    Je bloque un peu sur les solutions possibles l'ideal je pense serais d'arriver à ce que les
    la Map re devienne une Map<String,B> mais comment faire pour qu'hibernate utilise le champ ou l'id de NomRef pour faire sa clé...

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Points : 167
    Points
    167
    Par défaut
    Je ne sais pas s'il est possible de faire ce que tu souhaites, par contre as tu cherché à faire hériter B de NomRef ?
    Mon site : TKT-Web =)

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/05/2015, 09h52
  2. [XL-2010] Besoin d'aide sur un problème de taille
    Par Jb_One36 dans le forum Excel
    Réponses: 2
    Dernier message: 12/01/2012, 20h52
  3. Réponses: 6
    Dernier message: 01/04/2008, 15h42
  4. Réponses: 4
    Dernier message: 05/12/2006, 15h50
  5. taille disque pour type de donnée char (vide)
    Par aeled dans le forum Oracle
    Réponses: 8
    Dernier message: 16/08/2006, 11h46

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