Caching in Hibernate

1.056 Aufrufe

Veröffentlicht am

Talk about Hibernate's multi-layered caching system covering:
- 1st level cache
- 2nd level cache
- Query Cache

Veröffentlicht in: Software
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.056
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
18
Aktionen
Geteilt
0
Downloads
8
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Caching in Hibernate

  1. 1. CACHING in Hibernate
  2. 2. Michael Plöd Principal Architect @ innoQ @bitboss michael.ploed@innoq.com
  3. 3. Wichtige Themen 1st Level Cache 2nd Level Cache Query Cache Interfaces
  4. 4. Weitere Themen Flush Verhalten Isolation Levels Cache
 Infrastruktur Best
 Practices
  5. 5. Aufbau 
 des mehrschichtigen 
 Caching-Systems
  6. 6. Anwendung 1st level cache 2nd level cache DB Die Anwendung interagiert mit der Session Jede Session ist ein 1st level cache Der 2nd level cache bedient alle Sessions
 einer SessionFactory Der Datenbank Cache hat nichts mit 
 Hibernate zu tun
  7. 7. LOOKUP Lifecyle
  8. 8. Wie werden Entitäten geladen? Befindet sich die 
 Entität in der Session Befindet sich die 
 Entität im 2nd Level Cache Datenbank
 Zugriff
  9. 9. 1st level Cache
  10. 10. 1st level Cache Der 1st Level Cache entspricht der Session / dem Entity Manager und wird auch Persistenz Context genannt. Es gibt keine Eviction Policy. Wir als Entwickler müssen uns um den 1st Level Cache kümmern
  11. 11. ACHTUNG! Der Persistenz Kontext wird im Laufe der Zeit immer größer Diät Tips?
  12. 12. 
 Grundregeln: ORMs sind keine guten Batch-Tools
 Regelmässiges Flush & Clear
 JDBC-Batch Size
  13. 13. Code DEMO
  14. 14. 2nd level Cache
  15. 15. 2nd level Cache Der 2nd Level Cache ist nicht auf die Session / den Entity Manager gescoped sondern auf die jeweiligen Factories Hibernate sieht für die Interaktion mit dem 2nd Level Cache lediglich Mappings, Konfiguration und Interfaces vor
  16. 16. Persistenz Kontext A First Level Cache Persistenz Kontext B Persistenz Kontext C Second Level Cache Cache Concurrency Strategy Query Cache Cache Implementierung Klassen Cache
 Region Collection Cache
 Region Query Cache
 Region Update Timestamps Cache Region Details
  17. 17. 
 Unterhalb der
 Spitze des 
 Eisbergs Der 2nd Level Cache ist optional Muss via Config und Annotations aktiviert werden Anbindung von Cache Providern via SPI
  18. 18. Konfiguration 
 <property name="cache.provider_class">
 org.hibernate.cache.internal.NoCacheProvider
 </property> 
 <property name="cache.provider_class">
 org.hibernate.cache.ehcache.EhCacheRegionFactory 
 </property>
  19. 19. Entitieswerden von Hibernate nicht automatisch gecached
  20. 20. javax.persistence.sharedCache.mode ENABLE_SELECTIVE Entitäten werden nicht gecached, ausser sie werden als cachable markiert DISABLE_SELECTIVE Entitäten werden gecached, ausser sie werden als nicht-cachable markiert ALL Alle Entitäten werden immer gecached NONE Entitäten werden niemals gecached
  21. 21. Mapping @Entity @Cacheable @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Person { ... } @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public Set<Person> getPersons() { return persons; }
  22. 22. Concurrency Strategies Read Only Für rein lesenden Zugriff Read / Write •Read Committed Isolation Level •In JTA Umgebung muss Transaktions-Manager Lookup konfiguriert sein •Im Cluster muss die Cache Implementierung Locking unterstützen Nonstrict Read / Write •Keine Konsistenz Garantie •Geeignet für Daten die sich wenig ändern •In JTA Umgebung muss Transaktions-Manager Lookup konfiguriert sein • Transactional •Repeatable Read Isolation Level •In JTA Umgebung muss Transaktions-Manager Lookup konfiguriert sein
  23. 23. Cache API sessionFactory.evict(Person.class, id); 
 sessionFactory.evict(Person.class);
 sessionFactory.evictCollection("Person.adressen", personId);
 sessionFactory.evictCollection(„Person.adressen");
 
 session.setCacheMode(CacheMode.PUT)

  24. 24. Cache Modes NORMAL Die Session liest und Schreibt Daten aus / in den 2nd Level Cache GET Die Session liest aus dem 2nd Level Cache und führt nur Updates (keine Puts) aus PUT Die Session liest nicht aus dem 2nd Level Cache, schreibt aber Daten hinein REFRESH Die Session liest nicht aus dem 2nd Level Cache, schreibt nur Updates hinein
  25. 25. Code DEMO
  26. 26. Query Cache
  27. 27. Query Cache Der Query Cache gehört zum 2nd Level Cache und zielt nicht auf Entitäten sondern auf Ergebnisse von HQL / Criteria Abfragen ab Der Query Cache muss neben dem 2nd Level Cache zusätzlich in der globalen Konfiguration und auf jeder zu cachenden Query aktiviert werden
  28. 28. Konfiguration 
 <property name=„cache.use_query_cache">
 true
 </property> session.createQuery(…)
 .setCacheable(true) .setCacheRegion(…)
  29. 29. Michael Plöd Principal Architect @ innoQ @bitboss michael.ploed@innoq.com Vielen Dank

×