-->
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.  [ 6 posts ] 
Author Message
 Post subject: Performance du cache de requête et du cache de second nivea
PostPosted: Thu Jun 16, 2005 6:41 am 
Newbie

Joined: Thu May 13, 2004 5:22 am
Posts: 5
Salut à tous,

J'essaye d'optimiser mon application web de vente en ligne de séjour. Cette application fait la plus part du temps des accès en lecture seule. De temps en temps des écritures pour fermer des dates qui ne sont plus disponibles ou mettre à jour des tarifs.

Compte tenu de ce contexte, il me semble judicieux de mettre en oeuvre les mécanismes de cache de requêtes et de cache de second niveau.

J'ai fixé le cache à nonstrict-read-write et configuré hibernate pour qu'il utilise le cache de second niveau avec ehcache et le cache de requête.

Prenons l'exemple d'une requête qui retourne les 6 premiers produits qui ont une promotion la plus élevée :
Query query = session.createQuery("from Product as pdt where " +
"pdt.maximumDiscountPrice.discount = ? and " +
"pdt.maximumDiscountPrice.open = ? and " +
"pdt.maximumDiscountPrice.departureDate >= ? " +
"order by pdt.maximumDiscountPrice.discountPercentage desc");
query.setBoolean(0, true);
query.setBoolean(1, true);
query.setDate(2, DateUtil.getBegin(new Date()));
query.setMaxResults(6);
query.setCacheable(true);
query.list();

La première exécution prend 4s, les traces sql montrent que les produits son chargés de la base de données.
La deuxième et les suivantes prennent 0,5s ce qui semble étonnant étant donné qu'aucune requête n'est envoyée à la base prouvant que le cache de second niveau joue son rôle.

Si je modifie le code pour utiliser query.iterate(), la première requête se comporte de façon identique. En revanche une requête sql est envoyée pour la deuxième exécution et les suivantes : select product0_.idProduct as col_0_0_ from Product product0_, Price price1_ where product0_.idMaximumDiscountPrice=price1_.idPrice and price1_.discount=? and price1_.open=? and price1_.departureDate>=? order by price1_.discountPercentage desc limit ?
Ceci dit, le temps d'exécution ne varie guère par rapport à l'utilisation de query.list();

Je ne comprends pas pourquoi sans appel à la base de données, le temps d'exécution reste aussi élevé de l'ordre d'1/2s ?
Mon autre interrogation concerne l'utilisation de query.iterate() qui déclenche une requête sql et pas query.list().

Merci,

Ludovic Bailly
ECOTOUR.com


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 16, 2005 8:43 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
seul list interacte avec le cache.
N'oublie pas de cacher les entités (et eventuelles collections associées à ces entités) qui sont retournées par ta requete.
Le cache de requete en lui même ne cache que les ids.

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jun 17, 2005 2:20 am 
Newbie

Joined: Thu May 13, 2004 5:22 am
Posts: 5
Ok pour la méthode list c'est le comportement que j'ai remarqué.
Toutes mes entités et collections sont déclarées comme "cachées" dans mon hbm.xml.
Compte tenu qu'aucune trace sql n'est affichée à partir du 2ème appel et plus, j'en déduis que le cache joue correctement son rôle.
Ce que je ne comprends pas c'est pourquoi le temps de réponse est de l'ordre d'1/2 s ?

Merci,

Ludo.

[quote="emmanuel"]seul list interacte avec le cache.
N'oublie pas de cacher les entités (et eventuelles collections associées à ces entités) qui sont retournées par ta requete.
Le cache de requete en lui même ne cache que les ids.[/quote]


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jun 17, 2005 5:16 am 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
utilise les logs a debug ou ton debugger pour trouver la cause de ce temps perdu.

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jun 17, 2005 7:26 am 
Hibernate Team
Hibernate Team

Joined: Thu Dec 18, 2003 9:55 am
Posts: 1977
Location: France
tu utilises EHCache ? tu n'ecris pas sur disque?

_________________
Anthony,
Get value thanks to your skills: http://www.redhat.com/certification


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jun 19, 2005 3:08 pm 
Newbie

Joined: Thu May 13, 2004 5:22 am
Posts: 5
Oui j'utilise EHCache avec hibernate 3.04, en revanche le cache est configuré pour ne pas accéder au disque dur.
Je vais faire tourner la web-app monitoré par un profiler et je vous tiens informé des résultats.

Merci,

Ludo.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 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.