OVH Cloud OVH Cloud

[Hibernate] l'opposé du cache

2 réponses
Avatar
Pif
Bonjour, peut etre ai-je mal compris tout les propos que ma question
précédente, mais j'ai l'impression que tout le monde s'est attaché à
répondre sur comment charger des données mais pas trop (gerer la
profondeur, le cache, etc.).

Ma question, c'est l'inverse : comment libérer des données autrement
qu'avec une affectation de null qui peut poser des dangers en cas d'update.

Autrement dit, je vais parcourir mon graphe plusieurs fois totalement.
Il ne peut en aucun cas être chargé en mémoire, et je ne souhaite pas
forcément le modifier.

Je veux pouvoir en charger une partie puis au fur et a mesur du parcours
qu'hibernate gere la libération de la mémoire pour autoriser le
chargement de nouvelle parties. Le chargement ne pose en effet aucun
problème.

La question c'est comment libérer de la mémoire automatiquement ???

Merci !

2 réponses

Avatar
Lionel
Pif wrote:
Bonjour, peut etre ai-je mal compris tout les propos que ma question
précédente, mais j'ai l'impression que tout le monde s'est attaché à
répondre sur comment charger des données mais pas trop (gerer la
profondeur, le cache, etc.).


c'est un peu le principe d'une base de données: on fait une requete qui
remonte uniquement certaines données.
On ne charge pas tout en mémoire pour ensuite parcourir ce qui a été chargé.
As tu rééllement besoin de faire cela ?

Autrement dit, je vais parcourir mon graphe plusieurs fois totalement.
Parcourir l'intégralité de l'arbre dans quel objectif ?

Atteindre une donnée ?
Faire un traitement particulier sur tous les noeuds ?

La question c'est comment libérer de la mémoire automatiquement ???


La solution à mon avis c'est plutot de ne pas charger ce dont tu n'as pas
besoin.

Avatar
Pif
le principe d'une BD : la requette renvoie une réponse indépendante de
tout autre contexte. Du coup, un ptit "= null" ou rs.close() et le tour
est joué...

La persistence : c'est obj.getAutreObjet() qui charge dans la BD... mais
nulle part on a un obj.pasBesoinPendantUnBoutDeTemps(); pour qui vide un
peu la mémoire, qui a relancer la chargement une autre fois...

Je ne veux pas tout charger en mémoire...
je veux charge des ptits bouts comme dans une bd, mais avec un outil de
persistence parceque c'est bien pratique...
je veux parcourir mon graphe, ce sera en général une partie du graphe
qui sera bien supérieur à la capacité de la mémoire...

mais JE NE VEUX PAS CHARGER TOUT LE GRAPHE SIMULTANEMENT... au fur et a
mesure de l'exécution, du chargement de données, d'autres données sont
libérée, quitte à etre rechargées...

Il s'agit d'une sorte de garbage collector que je recherche, sauf la la
donnée est encore référencées, il faudra simplement la recharger...