-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Vérification du cache
PostPosted: Mon Oct 10, 2005 5:03 am 
Newbie

Joined: Fri Sep 23, 2005 12:13 pm
Posts: 4
Location: Lille - France
Juste une petite question car je suis pas sûr de tout comprendre : le cache sert bien à éviter les requêtes dans la base de données ?

J'utilise Hibernate avec MySQL5. Quand j'affiche les logs de MySQL je vois toutes les requêtes qui passent, comme si le cache n'était pas utilisé.

J'ai ça dans le hibernate.cfg.xml :

Code:
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="cache.use_structured_entries">true</property>


et ça dans le ehcache.xml :

Code:
<defaultCache
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="240"
        overflowToDisk="false"
        />


Ensuite j'affiche une page qui va chercher des éléments en base avec hibernate.Si je raffraichis cette page je revois les requêtes. Le cache ne devrait pas être utilisé dans ce cas ?


Top
 Profile  
 
 Post subject:
PostPosted: Wed Oct 12, 2005 2:58 am 
Expert
Expert

Joined: Thu Sep 04, 2003 8:23 am
Posts: 368
La gestion du cache est un sujet vaste et complexe :-)

Tu peux en savoir plus en allant regarder le chapitre qui y est dédié dans la doc : http://www.hibernate.org/hib_docs/v3/re ... ance-cache

Sinon pour résumer :
- Pour activer le cache il faut que tu ajoutes un tag pour chaque entité que tu veux mettre en cache.
- Lorsque tu mets une entité en cache, tu y mets l'assocation entre un id et une instance. Du coup, lorsque tu fais une requête hql, la requête est effectuée dans la base, hibernate ne fetche que l'id et récupère ensuite l'instance associée dans le cache. Tu gagnes le temps de fetch dans la base qui n'est pas négligeable
- Si tu veux être encore plus "aggressif" au niveau du cache, tu peux mettre en cache des requêtes hql. Hibernate va alors conserver l'association entre la requête et les ids des objets récupérés. Du coup, en association avec le cache de second niveau, tu peux arriver à ne pas invoquer la base lorsque tu fais une requête.

Au vu de ma petite expérience sur le sujet, il est préférable de se limiter au cache des entités dans un premier temps. Si ensuite tu as vraiment un problème de perf particulier tu peux te lancer dans le cache des requêtes mais j'ai l'impression que c'est beaucoup plus sensible.

_________________
Seb
(Please don't forget to give credits if you found this answer useful :)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.