Quelles sont les caches de premier et de deuxième niveau en hibernation?

est-ce que quelqu'un peut expliquer en termes simples ce que sont la mise en cache de premier et deuxième niveaux en hibernation?

215
demandé sur Vlad Mihalcea 2008-12-03 16:21:19

7 réponses

1.1) cache de premier niveau

cache de premier niveau toujours associé à objet Session . Hibernate utilise ce cache par défaut. Ici, il traite un transaction après une autre, signifie traiter une transaction plusieurs temps. Principalement il réduit le nombre de requêtes SQL dont il a besoin pour générer dans le cadre d'une transaction donnée. C'est plutôt de la mise à jour après chaque modification faite dans le transaction, il met à jour la transaction seulement à la fin de la transaction.

1.2) cache de deuxième niveau

cache de deuxième niveau toujours associé à Session Factory object . Lors de l'exécution des transactions, entre elle charge le objets au niveau de L'usine de Session, de sorte que ces objets seront disponible pour l'ensemble de l'application, non lié à un seul utilisateur. Depuis les objets sont déjà chargés dans le cache, chaque fois qu'un objet est retournées par la requête, à l'époque, pas besoin d'aller pour une base de données transaction. De cette façon, le cache de deuxième niveau fonctionne. Ici, nous pouvons utiliser le cache de niveau de requête aussi.

Cité de: http://javabeat.net/introduction-to-hibernate-caching /

265
répondu Dennis C 2017-05-09 15:19:37

il y a une assez bonne explication de la mise en cache de premier niveau sur le blog Streamline Logic .

fondamentalement, la mise en cache de premier niveau se produit sur une base par session où la mise en cache de deuxième niveau peut être partagée entre plusieurs sessions.

110
répondu lomaxx 2018-10-04 01:29:54

voici une explication de base de la cache d'hibernation...

cache de premier niveau est associé à l'objet" session". La portée des objets cache est de session. Une fois la session terminée, les objets mis en cache ont disparu pour toujours. Premier niveau de cache est activé par défaut et vous ne pouvez pas le désactiver. Lorsque nous interrogeons une entité pour la première fois, elle est extraite de la base de données et stockée dans le cache de premier niveau associé à la session d'hibernation. Si nous interrogeons à nouveau le même objet avec la même session objet, il sera chargé à partir du cache et aucune requête sql ne sera exécutée. L'entité chargée peut être retirée de la session en utilisant la méthode evict() . Le chargement suivant de cette entity fera à nouveau un appel de base de données si elle a été retirée en utilisant la méthode evict() . La totalité du cache de session peut être retirée en utilisant la méthode clear() . Il supprimera toutes les entités stockées dans le cache.

cache de deuxième niveau est à part du cache de premier niveau qui est disponible pour être utilisé globalement dans session de l'usine de portée. le cache de deuxième niveau est créé dans session factory scope et est disponible pour être utilisé dans toutes les sessions qui sont créées en utilisant cette session factory particulière. Cela signifie également qu'une fois session factory fermée, tous les cache associés à It die et cache manager sont également fermés. Chaque fois que la session hibernate essaie de charger une entité, le premier endroit où elle cherche une copie en cache de l'entité dans le cache de premier niveau (associé à une session hibernate particulière). Si une copie de l'entité est mise en cache est présent dans le cache de premier niveau, il est retourné à la suite de la méthode load. S'il n'y a pas d'entité mise en cache dans le cache de premier niveau, alors le cache de deuxième niveau est recherché pour l'entité mise en cache. Si le cache de deuxième niveau a une entité mise en cache, il est retourné comme résultat de la méthode load. Mais, avant de retourner l'entity, il est stocké dans le premier niveau de cache aussi de sorte que la prochaine invocation de la méthode load for entity retournera l'entity à partir du premier niveau de cache lui-même, et il ne sera pas nécessaire d'aller dans le deuxième niveau de cache encore. Si entity n'est pas trouvé dans le cache de premier niveau et le cache de deuxième niveau aussi, alors la requête de base de données est exécutée et entity est stockée dans les deux niveaux de cache, avant de retourner comme réponse de la méthode load() .

82
répondu Creditto 2016-06-07 10:57:56

cache de premier niveau

Hibernate tente de reporter le débordement du contexte de persistance jusqu'au dernier moment possible. Comme je l'ai expliqué dans cet article , cette stratégie a été traditionnellement connu sous le nom de transactional write-behind.

L'écriture est plus liée à Hibernate de rinçage plutôt que de toute logique ou physique de la transaction. Au cours d'une transaction, le rinçage peut se produire plusieurs fois.

enter image description here

les changements de couleur ne sont visibles que pour la transaction courante de la base de données. Tant que la transaction courante n'est pas engagée, aucun changement n'est visible par d'autres transactions simultanées.

grâce au cache de premier niveau, Hibernate peut faire plusieurs optimisations:

cache de deuxième niveau

une bonne solution de mise en cache devrait s'étendre sur plusieurs sessions D'hibernation et C'est la raison pour laquelle Hibernate supporte également une mise en cache de deuxième niveau supplémentaire.

le cache de deuxième niveau est lié au cycle de vie de SessionFactory, il est donc détruit uniquement lorsque le SessionFactory est fermé (généralement lorsque l'application est en train de s'arrêter). Le le cache de deuxième niveau est principalement axé sur les entités, bien qu'il supporte également une solution optionnelle de mise en cache des requêtes.

pour plus de détails, consultez cet article .

4
répondu Vlad Mihalcea 2018-07-12 13:23:07

par défaut, NHibernate utilise la mise en cache de premier niveau qui est basée sur les objets de Session. mais si vous exécutez dans un environnement multi-serveur, alors le premier niveau de cache peut ne pas être très évolutif avec certains problèmes de performance. il se produit en raison du fait qu'il doit faire des voyages très fréquents à la base de données que les données sont distribuées sur plusieurs serveurs. en d'autres termes, NHibernate fournit une base, pas-si-sophistiqué en-processus L1 cache hors de la boîte. Cependant, il ne fournit pas de fonctionnalités d'une solution de mise en cache doit avoir un impact notable sur les performances de l'application.

donc les questions de tous ces problèmes sont l'utilisation d'un cache L2 qui est associé aux objets session factory. il réduit les déplacements de temps à la base de données donc augmente finalement le temps de réponse de l'application.

3
répondu Ravian 2011-07-29 00:48:48

Cache De Premier Niveau

L'objet Session contient les données du premier niveau du cache. Il est activé par défaut. Les données du premier niveau de cache ne seront pas disponibles pour l'ensemble de l'application. Une application peut utiliser plusieurs objets de session.

Cache De Deuxième Niveau

L'objet SessionFactory contient les données du cache de deuxième niveau. Les données stockées dans le cache de second niveau sera disponible pour toute demande. Mais nous avons besoin de l'activer explicitement.

1
répondu MD RAHIM 2017-10-31 17:42:49

dans un cache de deuxième niveau, les fichiers hbm de domaine peuvent être de clé mutable et de valeur false. Exemple, Dans cette classe de domaine une partie de la durée dans un jour reste constante comme la vérité universelle. Donc, il peut être marqué comme immuable à travers l'application.

-3
répondu Prakash Bayas 2014-05-16 06:11:07