JPA Caches

Werbung
JPA Caches
Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim
www.oio.de
[email protected]
© 2014 Orientation
in Objects GmbH
Version:
1.0
JPA Caches
Der Sprecher
Erik Bamberg (OIO)
© 2014 Orientation in Objects GmbH
JPA Caches
2
1
Caches
Aufgaben des Cachings
Datenbank entlasten
Netzwerk Zugriffe Minimieren
Verbessert die Performance
Updates und dirty checks
Daten
• sicherstellen, das Session immer das
gleiche geänderte Objekt zurückliefert
• Managed Entities
© 2014 Orientation in Objects GmbH
JPA Caches
3
Anforderungen
Eigene Cache Implementierung – welche
Anforderungen sind zu berücksichtigen ?
© 2014 Orientation in Objects GmbH
JPA Caches
4
2
Möglichkeiten von Cache-Implementierungen
JTA
Transactional
Filesystem Cache
In Memory
Regions
Cache
Quelle
Netzwerk
Distributed
Cache
Instance
Off-Heap Cache
© 2014 Orientation in Objects GmbH
JPA Caches
5
Mehrstufige Caches in O/R-Mappern
Agenda für heute
Persistence Context
Cache
Second Level
Cache
Statement
Cache
Collection
Cache
(First Level Cache)
• Seit JPA 1.0
• Seit JPA 2.0
• Nicht spec
• Nicht spec
+ Details und Überlegung wie caching verwendet werden
sollte
© 2014 Orientation in Objects GmbH
JPA Caches
6
3
Caching First Level Cache Zugriff
entityManager
.find(…)
Datenbank
1Lvl Cache
© 2014 Orientation in Objects GmbH
JPA Caches
7
First Level Cache – Cache
© 2014 Orientation in Objects GmbH
JPA Caches
data storage
memory
find()
first level cache
find()
8
4
First Level Cache – Dirty Checks
find()
find()
memory
Ref @0001
© 2014 Orientation in Objects GmbH
data storage
change
first level cache
Ref @0001
JPA Caches
9
Caching – First Level Cache
•
•
•
•
•
Entity Manager Cached in der Session geladene Objekte
Die Entity Manager Instanzen bilden einen First Level Cache
Persistence Context = 1st Lvl Cache
Objekte werden nur einmal geladen
Immer aktiv
1Lvl Cache
•
Cache wird bei close() geleert !!!
EntityManager
EntityManagerFactory
EntityManager
1Lvl Cache
© 2014 Orientation in Objects GmbH
JPA Caches
10
5
EntityManagerFactory
•
•
•
•
•
Gibt EntityManager zurück
Wird über verschiedene Threads geshared (ist threadsafe)
Normalerweise eine EntityManagerFactory pro Anwendung
Pro DB eine EntityManagerFactory (bei mehreren Datenbanken)
Cache (providerabhängig)
– generierte SQL-Statements
– 2nd Level Cache
© 2014 Orientation in Objects GmbH
JPA Caches
11
EntityManager
•
•
•
•
•
EntityManager ist leichtgewichtig
kann beliebig erstellt und zerstört werden
ist nicht threadsave
Mischung zwischen Connection und Transaction
First-Level-Cache (Persistence Context)
© 2014 Orientation in Objects GmbH
JPA Caches
12
6
1Lvl lifecycle
entityManagerFactory
.createEntityManager()
entityManager
.close()
© 2014 Orientation in Objects GmbH
JPA Caches
13
Caching – First Level Cache
Object
Object
Memoryproblem bei
vielen Objekten
(bulk operations)
Object
Object
Persistence
Heap
Context (1Lvl)
Find()
Query
EntityManager
Object
Object
Object
Heap
© 2014 Orientation in Objects GmbH
JPA Caches
14
7
EntityManager clear()
•
Was passiert bei
EntityManager.clear() ?
EntityManager
• Objekte werden detached !
• nicht mehr managed.
-> Achtung bei Updates.
• kein flush() ! Änderungen gehen verloren
Detached
• Objekte müssen neu geladen werden
-> unterschiedliche Objektinstanz
© 2014 Orientation in Objects GmbH
JPA Caches
15
Fazit 1Level
Persistence Context Cache (1stLevel Cache)
•
Für die Dauer einer EntityManager Session/Transaction (z.B:
Request)
•
nicht shared zwischen EntityManager
•
VM-Heap
•
Immer verfügbar und aktiv
© 2014 Orientation in Objects GmbH
JPA Caches
16
8
Second Level Cache
Persistence Context
Cache
Second Level
Cache
Statement
Cache
Collection
Cache
(First Level Cache)
© 2014 Orientation in Objects GmbH
JPA Caches
17
Caching – Second Level Cache Zugriff
em.find()
1Lvl Cache
© 2014 Orientation in Objects GmbH
2nd Level Cache
JPA Caches
Datenbank
18
9
Caching – Second Level Cache
•
•
•
•
Applikationsweiter Cache (Persistence-Unit weit)
Provider spezifische Implementierung
Oft Clusterfähig
Evt. Dateiauslagerung
1Lvl Cache
EntityManager
2nd Level Cache
Datenbank
EntityManager
1Lvl Cache
© 2014 Orientation in Objects GmbH
Filesystem
JPA Caches
19
JTA
Transactional
Second Level Cache bietet die klassischen Cache
Funktionen
Filesystem Cache
In Memory
Regions
Cache
Off-Heap Cache
© 2014 Orientation in Objects GmbH
JPA Caches
Quelle
Netzwerk
Distributed
Cache
Instance
20
10
Second Level Cache bietet die klassischen Cache
Funktionen
JTA
Transactional
Filesystem Cache
Quelle
In Memory
Regions
Cache
Distributed
Cache
Instance
Off-Heap Cache
© 2014 Orientation in Objects GmbH
Netzwerk
JPA Caches
21
2Lvl lifecycle
Persistence.
createEntityManagerFactory(„myUnit");
EntityManager
© 2014 Orientation in Objects GmbH
EntityManager
entityManagerFactory
.close()
EntityManager
JPA Caches
22
11
Shared Cache Mode einschalten
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1 >
<persistence-unit name="JDBPERF">
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
</persistence-unit>
</persistence>
Werte:
• ALL
• ENABLE_SELECTIVE
• DISABLE_SELECTIVE
• NONE
• UNSPECIFIED
© 2014 Orientation in Objects GmbH
JPA Caches
23
Selectiver Second Level Cache verwenden
@Entity
@Cacheable(true)
public class Country {
…
}
Zusammen mit:
• ENABLE_SELECTIVE
• DISABLE_SELECTIVE
© 2014 Orientation in Objects GmbH
JPA Caches
24
12
Eine kleine Beispiel Entität
@Entity
@Cacheable
public class Person {
@Id
2 EntityManager
private long- id;
- Calls nacheinander
@OneToMany - Second Level Cache Aktiv
(cascade=CascadeType.ALL,
,fetch=FetchType.LAZY)
private List<Child> children;
……
}
© 2014 Orientation in Objects GmbH
JPA Caches
25
Quizstunde
Person p=entityManager.find(Person.class, 1L);
Person p2=entityManager2.find(Person.class, 1L);
Wieviele SQL Queries ?
3
2
© 2014 Orientation in Objects GmbH
1
Was ist SQL ?
JPA Caches
26
13
Quizstunde
entityManager.createQuery("select p from Person p
where p.id=1",Person.class).getSingleResult();
entityManager2.find(Person.class, 1L);
Wieviele SQL Queries ?
3
1
2
Keine Ahnung
© 2014 Orientation in Objects GmbH
JPA Caches
27
Quizstunde
entityManager.createQuery("select p from Person p
where p.id=1",Person.class).getSingleResult();
entityManager2.createQuery("select p from Person p
where p.id=1",Person.class).getSingleResult();
Wieviele SQL Queries ?
4
2
© 2014 Orientation in Objects GmbH
1
Bei Hardwarepreisen egal
JPA Caches
28
14
Quizstunde
Person p=entityManager.find(Person.class, 1L);
p.getChildren().size();
Person p2=entityManager2.find(Person.class, 1L);
p2.getChildren().size();
Wieviele SQL Queries ?
3
1
2
4
© 2014 Orientation in Objects GmbH
JPA Caches
29
Statementcache
Persistence Context
Cache
Second Level
Cache
Statement
Cache
Collection
Cache
(First Level Cache)
© 2014 Orientation in Objects GmbH
JPA Caches
30
15
Caching – Query Cache
•
•
•
•
Das Ergebnis von Queries wird gecached
Queries werden nur einmalig ausgeführt
Key ist Statement+Parameter
Nur ID‘s werden gecachted
2nd Level Cache
Application /EntityManager
© 2014 Orientation in Objects GmbH
ResultSet
(ID’s)
Query Cache
„Select o from Order where ordernr=:nr“
:nr=‚4711‘
Datenbank
JPA Caches
31
Query Cache aktivieren
Query query=em.
createQuery("from Country c where c.iso='DE'");
query.setHint("org.hibernate.cacheable", true);
Country germany=query.getSingleResult();
© 2014 Orientation in Objects GmbH
JPA Caches
32
16
Collection Cache
Persistence Context
Cache
Second Level
Cache
Statement
Cache
Collection
Cache
(First Level Cache)
© 2014 Orientation in Objects GmbH
JPA Caches
33
Collection Caches
Hibernate stellt zusätzlich Collection Cache zur Verfügung
@Cache (usage=CacheConcurrencyStrategy.TRANSACTIONAL)
@OneToMany(mappedBy="customer", fetch=FetchType.EAGER,
cascade=CascadeType.ALL)
private Set members;
• Relationships Caching
• Caching im Second Level Cache
• Ähnlich dem Query cache werden nur ID‘s gecachted
© 2014 Orientation in Objects GmbH
JPA Caches
34
17
Cache
nochmal zurück…. Noch ein paar Details
Persistence Context
Cache
Second Level
Cache
Statement
Cache
Collection
Cache
(First Level Cache)
+ Details und Überlegung wie caching verwendet
werden sollte
© 2014 Orientation in Objects GmbH
JPA Caches
35
Möglichst alles Cachen ?
Möglichst alle Objekte Cachen
für beste Performance ?
© 2014 Orientation in Objects GmbH
JPA Caches
36
18
Probleme beim Cachen
•
Probleme mit Heap-Speicher/Garbage Collector bei großen Caches
•
Verwaltungsaufwand der Caches
•
nachschlagen im Cache für Objekte die sowieso meist veraltert sind.
•
Stale Object Gefahr
•
Synchronisationsoverhead im Clusterbetrieb
•
Höhere Software Fehlerrate bei verteilten Systemen
Fazit: Cache-Verwendung sollte geplant sein !!
© 2014 Orientation in Objects GmbH
JPA Caches
37
Caching – Second Level Cache – Was cachen ?
sollte ich nicht
cachen
sollte ich cachen
Land
Order
orderStatus
• Daten welche sich häufig ändern
• Entitäten welche von unterschiedlichen
Knoten geschrieben werden
•Konstante Werte
•Selten veränderliche
Werte
•Werte welche regelmäßig
gelesen werden
Daten welche nur von dieser
Applikation geändert werden
Invoice (1999-2011)
•Daten welche nur sehr selten gelesen werden
© 2014 Orientation in Objects GmbH
JPA Caches
38
19
Cache Query Hints
•
javax.persistence.cache.retrieveMode
– Steuert den Zugriff auf die Objekte im Cache
• BYPASS
– Ignoriere Objekte im Shared Cache
• USE
– Benutze Objekte im Shared Cache, ignoriere Daten aus DB ResultSet
•
javax.persistence.cache.storeMode
– Steuert wie der Cache nach Query modifiziert wird
• BYPASS
– Aus DB geladenes Objekt nicht in den Cache
• REFRESH
– Aus DB geladenes Objekt ersetzt das Object im Cache
• USE
– Wenn Object nicht im Cache, dann lade von DB und setze in Cache
Query query=em.createQuery("from Country c where c.iso='DE'");
query.setHint(QueryHints.CACHE_RETRIEVE_MODE, CacheRetrieveMode.BYPASS);
query.getResultList();
© 2014 Orientation in Objects GmbH
JPA Caches
39
Was brauche ich zum Cachen ?
•1st Lvl.
• integriert in JPA Provider
•2nd Lvl
• evt. Cache Implementierung
(ehcache,infinispan ect.)
• Konfiguration in
persistence.xml/Cache
Annotations
•Query Cache
• 2nd LvlCache
•Implementierung bei Query
© 2014 Orientation in Objects GmbH
JPA Caches
40
20
Mission erfüllt
© 2014 Orientation in Objects GmbH
JPA Caches
41
? ?
?
?
?
? ?
?
Fragen ?
Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim
www.oio.de
[email protected]
© 2014 Orientation in Objects GmbH
JPA Caches
21
Vielen Dank für ihre
Aufmerksamkeit !
Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim
www.oio.de
[email protected]
© 2014 Orientation in Objects GmbH
JPA Caches
Manuelle Cache-Controlle
Cache cache=entityManagerFactory.getCache();
cache.contains(myClass.class,myObject);
cache.evict(myClass.class,myObject);
cache.evict(myClass.class);
cache.evictAll();
© 2014 Orientation in Objects GmbH
JPA Caches
44
22
Herunterladen