Question

T1:Suis-je en droit que seul ce vendeurs de soutien Hibernate cache L2 sur le cluster?

  • En terre cuite pour la mise en veille prolongée (comercial)
  • SwarmCache (non publié depuis 2003)
  • JBoss Cache 1.x
  • JBoss Cache 2

Q2:Y a t-il des solutions de rechange à Hibernate de cache L2?(Peut-être quelques DB de mise en cache?)

Était-ce utile?

La solution

Q1. Ehcache fonctionne très bien que la mise en veille prolongée L2 Cache, distribué. Nous utilisons cela pour notre projet.


Q2. Plusieurs caches sont possibles.

  • Toutes les bases de données font déjà beaucoup de la mise en cache en interne, donc ne vous inquiétez pas cette partie.
  

Cependant, le problème avec la base de données   cache est qu'il est physiquement sur le   le serveur de base de données, de sorte que chaque requête   implique un appel réseau (latence,   .. bandwith). Exactement   des caches sur l'application   serveur.


  • Le cache L2 Mise en veille prolongée a quelques spécificités:
    • très facile à travailler (pas de code, peu de configuration)
    • conceptuel au niveau de l'entité (qui est à peu besoin à grains fins, nous avons parfois des grains plus gros cache, à faire des demandes de base de données moins),
    • travail par id ou d'une collection (par exemple, la mise en cache d'un résultat de la requête est désactivée par défaut, car il est impossible de le rendre utile dans le cas général).

  • Lorsque la mise en veille prolongée L2 est inappropriée, nous utilisons la même bibliothèque ehcache aux données du cache (qui est pas exactement les entités). Des exemples de cas d'utilisation:
    • lorsqu'une table est grande (longueur d'enregistrement et numéro) , utilisation de la mémoire ne permettent de mettre en cache complètement, mais la mise en cache seulement trois champs pour tous les dossiers est correct. Il se pourrait que ces champs sont ceux accessibles souvent, ou immuable ...
    • quand nous avons beaucoup de lecture accède au cache, et chacun déclencherait un calcul (sur le cache L2) étant donné les entités que nous avons: le résultat du calcul peut être stocké dans le cache. (Typique où l'exemple de calcul nécessite les détails des autres tables, mais les détails ne sont pas utilisés dans le résultat final, de sorte que le cache ne stocke pas ces détails)
    • lorsque des entités dans un tableau sont logiquement regroupés par catégories , et nous voulons demander et cache une catégorie à la fois, au lieu de la politique régulière de cache L2 qui serait une entité à la fois.
  

Dans un contexte distribué, ce souvent   se traduit par une invalidant   catégorie à un moment où l'un de leurs   entités est modifiée, ce qui est fonctionnellement   logique pour nous (et essentiel pour   performance, comme nous le ferions autrement   doivent invalider toutes ces   entités; ce parce que le cache   invalide une région entière ou un   objet spécifique, mais   entre vous devez boucle qui est mauvais pour la performance)

Et d'autres, je suis sûr ...

Ce cas est donc pas, il étroitement lié base de données ne stocke pas habituellement nos entités Hibernate. Nous l'avons mis dans la catégorie des entreprises (et non l'accès aux données ou taos), rendent directement aux codes d'entreprise. Notez que pour nous, ce n'est pas un cache transparent, mais un appel à un service d'affaires explicite (responsable de ce cache: le charger si les données ne sont pas présentes, invalidant au besoin). Qui effectue des opérations ou fournir des valeurs

  

Un amusant problème Threading dans ce cache: parce que ce cache est accessible par nos centaines de threads web, il doit être thread-safe. Vous savez sans doute pourquoi une valeur de thread-safe est soit immuable ou cloné à chaque appel (ce qui est souvent un problème de performance). Donc, tous nos caches d'affaires utilisent des objets immuables, et la performance est grande.

Autres conseils

Vous pouvez également utiliser [Infinispan (évolution de JBoss Cache) en tant que fournisseur 2 cache de niveau!] [1]

[1]: Voir http: // Infinispan. blogspot.com/2009/10/infinispan-based-hibernate-cache.html

ehcache a un mode distribué, mais je ne suis pas sûr si cela est pris en charge avec Hibernate. Je ne vois pas pourquoi il ne devrait pas fonctionner, cependant.

Avez-vous omettez JBossCache 3 pour une raison spécifique?

hibernate-redis lib serait le choix parfait.C'est un Redis cache.

Pourquoi Redis?c'est ultra-rapide, fonctionne dans le cloud et a prêt-solution de cloud comme AWS Elasticache, de sorte que vous n'avez pas besoin de le gérer par vous-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top