CACHING in
Hibernate
Michael Plöd
Principal Architect @ innoQ
@bitboss
michael.ploed@innoq.com
Wichtige
Themen
1st Level Cache 2nd Level Cache
Query Cache Interfaces
Weitere
Themen
Flush Verhalten Isolation Levels
Cache

Infrastruktur
Best

Practices
Aufbau 

des mehrschichtigen 

Caching-Systems
Anwendung
1st level cache
2nd level cache
DB
Die Anwendung interagiert mit der Session
Jede Session ist ein 1st level cach...
LOOKUP
Lifecyle
Wie werden Entitäten geladen?
Befindet sich die 

Entität
in der Session
Befindet sich die 

Entität
im 2nd Level Cache
Date...
1st level
Cache
1st level
Cache
Der 1st Level Cache entspricht der Session / dem Entity
Manager und wird auch Persistenz Context genannt.
...
ACHTUNG!
Der Persistenz Kontext wird im Laufe der Zeit immer größer
Diät Tips?


Grundregeln:
ORMs sind keine guten Batch-Tools

Regelmässiges Flush & Clear

JDBC-Batch Size
Code
DEMO
2nd level
Cache
2nd level
Cache
Der 2nd Level Cache ist nicht auf die Session / den Entity
Manager gescoped sondern auf die jeweiligen Fac...
Persistenz Kontext A
First Level Cache
Persistenz Kontext B Persistenz Kontext C
Second Level Cache
Cache Concurrency Stra...


Unterhalb der

Spitze des 

Eisbergs
Der 2nd Level Cache ist
optional
Muss via Config und
Annotations aktiviert werden
An...
Konfiguration


<property name="cache.provider_class">

org.hibernate.cache.internal.NoCacheProvider

</property>


<proper...
Entitieswerden von Hibernate
nicht automatisch
gecached
javax.persistence.sharedCache.mode
ENABLE_SELECTIVE
Entitäten werden nicht gecached, ausser sie
werden als cachable markie...
Mapping
@Entity
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Person { ... }
@OneT...
Concurrency Strategies
Read Only Für rein lesenden Zugriff
Read / Write
•Read Committed Isolation Level
•In JTA Umgebung m...
Cache API
sessionFactory.evict(Person.class, id);


sessionFactory.evict(Person.class);

sessionFactory.evictCollection("P...
Cache Modes
NORMAL
Die Session liest und Schreibt Daten aus / in
den 2nd Level Cache
GET
Die Session liest aus dem 2nd Lev...
Code
DEMO
Query
Cache
Query
Cache
Der Query Cache gehört zum 2nd Level Cache und zielt
nicht auf Entitäten sondern auf Ergebnisse von HQL /
Crit...
Konfiguration


<property name=„cache.use_query_cache">

true

</property>
session.createQuery(…)

.setCacheable(true)
.set...
Michael Plöd
Principal Architect @ innoQ
@bitboss
michael.ploed@innoq.com
Vielen Dank
Nächste SlideShare
Wird geladen in …5
×

Caching in Hibernate

1.128 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.128
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
8
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

×