63 votes

Mise en cache avec Hibernate + Spring - Quelques questions!

Im travaillant sur le développement d'une webapplication avec le Printemps, les 3 et Hibernate 3.6. Pour le moment j'essaie de comprendre comment la mise en Cache avec Spring et Hibernate œuvres. J'ai trouvé quelques sources sur la mise en Cache avec Hibernate et certains sur la de Printemps et j'essaie d'apporter mes informations. J'ai encore quelques questions à la fois les cadres et les Id être heureux si quelqu'un pouvait y répondre ou me dire si les faits énumérés ici sont correctes.

La plupart du temps, des réponses courtes (oui/non) serait suffisante. Je pense que cette liste peut être utile pour d'autres personnes, qui veulent comprendre comment la mise en cache avec spring et hibernate œuvres.

General

1) Hibernate supporte les Caches: 1er Niveau de Cache, 2ème Niveau de Cache, Cache de Requêtes

2) le Printemps lui-même prend en charge la suite de la mise en Cache des possibilités: il suffit de la Méthode de mise en Cache

1st Level Cache

3) Le 1er Niveau de Cache fait partie de TOUTES les applications Hibernate.

4) Le 1er Niveau de Cache est créé pour CHAQUE mise en veille prolongée-session.

5) Quel est enregistré dans le 1er Niveau de Cache? Des objets ou tout simplement les valeurs de leurs propriétés? les requêtes et leurs résultats?

2nd Level Cache

6) j'ai trouvé: le 2ème Niveau de Cache est utilisé une seule FOIS par l'application. n'est-ce pas faux? n'est-il pas utilisé une seule FOIS par sessionfactory? et: plusieurs sessionfactorys = multiple de 2e niveau caches possible?

7) quel est enregistré dans le 2ème Niveau du Cache: à mon avis juste des valeurs appartenant à un enregistrement, pas l'objet lui-même.

8) lors du stockage des valeurs à partir d'un enregistrement dans le 2ème Niveau de Cache, il est possible de stocker des valeurs relatives (à partir d'objets connectés via une clé étrangère) avec elle aussi?

9) lorsque vous mettez à jour les valeurs d'un objet dans le 2ème niveau de cache, il est possible de mettre à jour les valeurs des objets connectés dans le cache de trop?

10) lorsque les valeurs d'un objet sont en train de changer, comment puis-je mettre à jour le 2ème cache de niveau? flush? puis-je mettre à jour une partie de la mémoire cache ou doit l'ensemble de la cache d'être mis à jour?

11) d'où vient le 2ème niveau de cache du sens, et où il ne marche pas?

12) le Mode de Cache: est-ce que chaque mode cache une autre stratégie de mise en cache? par exemple avec le cache en mode "lecture seule", pas de synchronisation de base de données et le cache est toujours nécessaire? faire d'autres modes de mise en cache fournir la synchronisation? Je pensais que la synchronisation doit être effectuée par le développeur lui-même?

Query Cache

13) quelle est la différence entre le Cache de Requête et le 2ème Niveau de Cache? à mon avis: dans le Cache de Requête d'ensembles de résultats sont enregistrés, mais pas avec leurs valeurs, avec leurs papiers d'identité. lorsque la requête est de nouveau utilisé et le résultat est toujours "bonne", des valeurs appartenant à l'id sont interrogées à partir de la 2ème Cache de Niveau

14) Pour la Requête Cache de Niveau 2 mémoire Cache DOIT être utilisé?

15) d'où vient le Cache de Requête du sens, et où il ne marche pas?

Spring

16) Ne Ressort fournir plus de possibilités de mise en Cache que la méthode de la mise en cache?

17) la méthode de la mise en cache n'est pas lié à la mise en cache hibernate

18) , mais: pour la méthode de la mise en cache de niveau 2 est nécessaire, comme d'ehcache (qui peut être utilisé par hibernate trop)

19) peut-méthode de mise en cache être utilisé sans requêtes de base de données?

Getting mixed up

20) si vous utilisez ehcache pour hiberner comme 2ème cache de niveau et de ehcache pour le printemps pour la méthode de mise en cache, puis-je utiliser le même ehcache-exemple? est-il une chance que quelque chose se mélange?

21) lors de l'utilisation de 1er niveau et de cache de 2ème niveau de cache, peuvent-ils se mêler? lors de l'interrogation de la base de données, d'où le résultat, alors venez, le 1er ou le 2ème cache de niveau? le 1er niveau de cache de travail avec le 2e niveau de cache?

22) de toute autre chose qui peuvent être mélangées en utilisant les caches que j'ai citées? :-)

Merci pour la réponse, n'importe quelle question! :-)

74voto

Tomasz Nurkiewicz Points 140462

Hibernate supporte les Caches: 1er Niveau de Cache, 2ème Niveau de Cache, Cache de Requêtes

Oui.

Le printemps lui-même prend en charge la suite de la mise en Cache des possibilités: il suffit de la Méthode de mise en Cache

Printemps 3.1 présente la nouvelle mise en cache de l'abstraction basée sur les annotations autour des méthodes, oui.

Le 1er Niveau de Cache fait partie de TOUTES les applications Hibernate.

Oui.

Le 1er Niveau de Cache est créé pour CHAQUE mise en veille prolongée-session.

Oui, bien que vous pouvez effacer manuellement à tout moment.

Ce qui est enregistré dans le 1er Niveau de Cache? Des objets ou tout simplement les valeurs de leurs propriétés? les requêtes et leurs résultats?

C'est une carte de tous les objets récupérés au cours de la durée de vie d'une session, si vous chargez le même objet par id pour la deuxième fois, il sera chargé de L1.

J'ai trouvé: le 2ème Niveau de Cache est utilisé une seule FOIS par l'application. n'est-ce pas faux? n'est-il pas utilisé une seule FOIS par sessionfactory? et: plusieurs sessionfactorys = multiple de 2e niveau caches possible?

Vous avez raison, il y a généralement une seule séance d'usine par application (base de données), d'où le raccourci.

ce qui est enregistré dans le 2ème Niveau du Cache: à mon avis juste des valeurs appartenant à un enregistrement, pas l'objet lui-même.

Les mêmes choses qu'en L1, mais ils vivent plus longtemps. L2 est généralement soutenue par certains industriels, la force de cache, tandis que L1 est juste une carte (il n'a même pas à être thread-safe). Il stocke plein entités, y compris les paresseusement chargé de relations.

lors du stockage des valeurs à partir d'un enregistrement dans le 2ème Niveau de Cache, il est possible de stocker des valeurs relatives (à partir d'objets connectés via une clé étrangère) avec elle aussi?

Vous n'avez pas à gérer L2 manuellement, cela se fait automatiquement.

lorsque vous mettez à jour les valeurs d'un objet dans le 2ème niveau de cache, il est possible de mettre à jour les valeurs des objets connectés dans le cache de trop?

Voir ci-dessus.

lorsque les valeurs d'un objet sont en train de changer, comment puis-je mettre à jour le 2ème cache de niveau? flush? puis-je mettre à jour une partie de la mémoire cache ou doit l'ensemble de la cache d'être mis à jour?

Voir ci - dessus- Hibernate va comprendre cela pour vous. Vous n'avez jamais interagir avec L2 directement.

d'où vient le 2ème niveau de cache du sens, et où il ne marche pas?

Mesure. En application de lire un grand nombre de données par clé primaire et de lecture-écriture facteur est très élevé, L2 a un impact significatif sur votre performance.

le Mode Cache: est-ce que chaque mode cache une autre stratégie de mise en cache? par exemple avec le cache en mode "lecture seule", pas de synchronisation de base de données et le cache est toujours nécessaire? faire d'autres modes de mise en cache fournir la synchronisation? Je pensais que la synchronisation doit être effectuée par le développeur lui-même?

Le Cache permet de mode Hibernation pour choisir la meilleure stratégie pour la mise en cache et invalidant. Par exemple, si le cache est en lecture seule, Hibernate ne dérange pas l'invalider (ou de ne pas le faire souvent). Mais en lecture seule cache (lecture seule entité) sera bien sûr l'interdiction de toutes les mises à jour.

quelle est la différence entre le Cache de Requête et le 2ème Niveau de Cache? à mon avis: dans le Cache de Requête d'ensembles de résultats sont enregistrés, mais pas avec leurs valeurs, avec leurs papiers d'identité. lorsque la requête est de nouveau utilisé et le résultat est toujours "bonne", des valeurs appartenant à l'id sont interrogées à partir de la 2ème Niveau de Cache.

Exactement, mais c'est un sujet très vaste. En particulier, le résultat est toujours "bonne" partie.

Pour la Requête Cache de Niveau 2 mémoire Cache DOIT être utilisé?

Oui, sans L2 cache de requête n'a pas de sens et permettra de ralentir l'application de façon spectaculaire.

d'où vient le Cache de Requête du sens, et où il ne marche pas?

Question difficile, en général, lorsque vous exécutez la même requête beaucoup de temps et de l'univers de paramètres de requête est faible (pour chaque ensemble de paramètres de requête requête cache est créé avec tous les id des enregistrements (les résultats).

N'Printemps fournir plus de possibilités de mise en Cache que la méthode de la mise en cache?

Non, le Printemps est plus ou moins juste de la colle pour votre propre code.

la méthode de la mise en cache n'est pas lié à hibernate de mise en cache.

Le printemps n'est pas liée à la mise en veille prolongée, donc...

mais: pour la méthode de la mise en cache de niveau 2 est nécessaire, comme d'ehcache (qui peut être utilisé par hibernate trop)

L2 est Hibernate concept. Si vous voulez cache méthodes, vous avez besoin de quelques sous-jacente de cache. Laisser EhCache, jamais l'esprit. bien sûr, il doit être thread-safe.

peut-méthode de mise en cache être utilisé sans requêtes de base de données?

Le printemps n'a rien à voir avec la veille prolongée. Vous pouvez cache des calculs qui n'ont rien à voir avec la base de données.

si vous utilisez ehcache pour hiberner comme 2ème cache de niveau et de ehcache pour le printemps pour la méthode de mise en cache, puis-je utiliser le même ehcache-exemple? est-il une chance que quelque chose se mélange?

Vous pouvez utiliser le même CacheManager et de configuration du cache que la mise en veille à la facilité de déploiement. Tant que le cache de noms ne se chevauchent pas, ils sont complètement indépendants, même pensé que travailler dans le même responsable.

lors de l'utilisation de 1er niveau et de cache de 2ème niveau de cache, peuvent-ils se mêler? lors de l'interrogation de la base de données, d'où le résultat, alors venez, le 1er ou le 2ème cache de niveau? le 1er niveau de cache de travail avec le 2e niveau de cache?

Ils ont juste le travail, aussi longtemps que l'abstraction ne fuit pas :-). Lorsque vous effectuez une requête en clé primaire, premier L1 est examiné (c'est plus rapide), puis L2.

autre chose qui peut être mélangé en utilisant les caches que j'ai citées? :-)

Voir ci-dessus, les prélèvements ont tendance à fuir. Mais le pire, les problèmes viennent quand vous modifiez la base de données et mise en veille prolongée n'est pas sans sujet. Aussi clustering sans réplication va vous causer des maux de tête. Et le plus gros problème - très souvent incorrecte de la mise en cache en fait ralentit l'application (mise en cache de requêtes est la plus dangereuse ici).

2voto

danny.lesnik Points 9526

En ce qui concerne le cache Spring et de second niveau, il existe un projet Open Source intéressant qui peut fonctionner avec le cache 2L:

Par exemple: http://code.google.com/p/ehcache-spring-annotations/

Nous l'utilisons dans un environnement de production et cela facilite beaucoup notre vie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X