+ All Categories
Home > Documents > JPACaches Vortrag Public - oio.de · entityManager.createQuery("select p from Person p where...

JPACaches Vortrag Public - oio.de · entityManager.createQuery("select p from Person p where...

Date post: 19-Oct-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
22
1 JPA Caches © 2014 Orientation in Objects GmbH Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de [email protected] Version: JPA Caches 1.0 JPA Caches © 2014 Orientation in Objects GmbH Der Sprecher Erik Bamberg (OIO) 2
Transcript
  • 1

    JPA Caches© 2014 Orientation in Objects GmbH

    Orientation in Objects GmbH

    Weinheimer Str. 6868309 Mannheim

    [email protected]

    Version:

    JPA Caches

    1.0

    JPA Caches© 2014 Orientation in Objects GmbH

    Der Sprecher

    Erik Bamberg (OIO)

    2

  • 2

    JPA Caches© 2014 Orientation in Objects GmbH

    Caches

    3

    Aufgaben des Cachings

    Datenbank entlastenNetzwerk Zugriffe Minimieren

    Verbessert die Performance

    Updates und dirty checks

    • sicherstellen, das Session immer das gleiche geänderte Objekt zurückliefert• Managed Entities

    DatenDaten

    JPA Caches© 2014 Orientation in Objects GmbH

    Anforderungen

    4

    Eigene Cache Implementierung – welche Anforderungen sind zu berücksichtigen ?

  • 3

    JPA Caches© 2014 Orientation in Objects GmbH

    Möglichkeiten von Cache-Implementierungen

    5

    Quelle

    In Memory Cache

    Filesystem Cache

    Off-Heap Cache

    NetzwerkNetzwerkRegionsDistributed

    CacheInstance

    JTA

    Tra

    nsac

    tiona

    l

    JPA Caches© 2014 Orientation in Objects GmbH

    Mehrstufige Caches in O/R-MappernAgenda für heute

    6

    Persistence ContextCache(First Level Cache)

    Second Level Cache

    Statement Cache

    CollectionCache

    • Seit JPA 1.0 • Seit JPA 2.0 • Nicht spec • Nicht spec

    + Details und Überlegung wie caching verwendet werden sollte

  • 4

    JPA Caches© 2014 Orientation in Objects GmbH

    Caching First Level Cache Zugriff

    7

    1Lvl Cache Datenbank

    entityManager.find(…)

    JPA Caches© 2014 Orientation in Objects GmbH

    mem

    ory

    First Level Cache – Cache

    8

    data

    stor

    age

    first

    leve

    lcac

    he

    find()

    find()

  • 5

    JPA Caches© 2014 Orientation in Objects GmbH

    mem

    ory

    First Level Cache – Dirty Checks

    9

    data

    stor

    age

    first

    leve

    lcac

    he

    find()

    change

    find()

    Ref @0001

    Ref @0001

    JPA Caches© 2014 Orientation in Objects GmbH

    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

    • Cache wird bei close() geleert !!!

    10

    EntityM

    anagerFactory

    EntityManager

    EntityManager

    1Lvl Cache

    1Lvl Cache

  • 6

    JPA Caches© 2014 Orientation in Objects GmbH

    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

    11

    JPA Caches© 2014 Orientation in Objects GmbH

    EntityManager

    • EntityManager ist leichtgewichtig• kann beliebig erstellt und zerstört werden

    • ist nicht threadsave• Mischung zwischen Connection und Transaction

    • First-Level-Cache (Persistence Context)

    12

  • 7

    JPA Caches© 2014 Orientation in Objects GmbH

    1Lvl lifecycle

    13

    entityManagerFactory.createEntityManager()

    entityManager.close()

    JPA Caches© 2014 Orientation in Objects GmbH

    Caching – First Level Cache

    14

    EntityManagerHeapHeap

    Object

    Object

    Object

    Object

    Object

    Object

    Object

    Heap

    PersistenceContext (1Lvl)

    Find()Query

    Memoryproblem bei vielen Objekten(bulk operations)

  • 8

    JPA Caches© 2014 Orientation in Objects GmbH

    EntityManager clear()

    • Was passiert bei EntityManager.clear() ?

    15

    EntityManager

    Detached

    • Objekte werden detached !• nicht mehr managed.

    -> Achtung bei Updates.• kein flush() ! Änderungen gehen verloren

    • Objekte müssen neu geladen werden-> unterschiedliche Objektinstanz

    JPA Caches© 2014 Orientation in Objects GmbH

    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

    16

  • 9

    JPA Caches© 2014 Orientation in Objects GmbH

    Second Level Cache

    17

    Persistence ContextCache(First Level Cache)

    Second Level Cache

    Statement Cache

    CollectionCache

    JPA Caches© 2014 Orientation in Objects GmbH

    Caching – Second Level Cache Zugriff

    18

    1Lvl Cache 2nd Level Cache Datenbank

    em.find()

  • 10

    JPA Caches© 2014 Orientation in Objects GmbH

    Caching – Second Level Cache

    19

    EntityManager

    EntityManager

    1Lvl Cache

    1Lvl Cache

    • Applikationsweiter Cache (Persistence-Unit weit)

    • Provider spezifische Implementierung

    • Oft Clusterfähig

    • Evt. Dateiauslagerung

    2nd Level Cache

    Datenbank

    Filesystem

    JPA Caches© 2014 Orientation in Objects GmbH

    Second Level Cache bietet die klassischen Cache Funktionen

    20

    Quelle

    In Memory Cache

    Filesystem Cache

    Off-Heap Cache

    NetzwerkNetzwerkRegionsDistributed

    CacheInstance

    JTA

    Tra

    nsac

    tiona

    l

  • 11

    JPA Caches© 2014 Orientation in Objects GmbH

    Second Level Cache bietet die klassischen Cache Funktionen

    21

    QuelleQuelle

    In Memory Cache

    In Memory Cache

    Filesystem Cache

    Off-Heap Cache

    NetzwerkNetzwerkRegionsDistributed

    CacheInstance

    DistributedCache

    Instance

    JTA

    Tra

    nsac

    tiona

    l

    JPA Caches© 2014 Orientation in Objects GmbH

    2Lvl lifecycle

    22

    Persistence.createEntityManagerFactory(„myUnit");

    entityManagerFactory.close()EntityManager EntityManager EntityManager

  • 12

    JPA Caches© 2014 Orientation in Objects GmbH

    Shared Cache Mode einschalten

    persistence.xml

  • 13

    JPA Caches© 2014 Orientation in Objects GmbH

    Eine kleine Beispiel Entität

    @Entity

    @Cacheable

    public class Person {

    @Id

    private long id;

    @OneToMany(cascade=CascadeType. ALL,,fetch=FetchType. LAZY)

    private List children;

    ……

    }

    25

    - 2 EntityManager- Calls nacheinander- Second Level Cache Aktiv

    - 2 EntityManager- Calls nacheinander- Second Level Cache Aktiv

    JPA Caches© 2014 Orientation in Objects GmbH

    Quizstunde

    26

    Wieviele SQL Queries ?

    3 1

    2 Was ist SQL ?

    Person p=entityManager.find(Person.class, 1L);Person p2=entityManager2.find(Person.class, 1L);

  • 14

    JPA Caches© 2014 Orientation in Objects GmbH

    Quizstunde

    27

    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

    JPA Caches© 2014 Orientation in Objects GmbH

    Quizstunde

    28

    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 1

    2 Bei Hardwarepreisen egal

  • 15

    JPA Caches© 2014 Orientation in Objects GmbH

    Quizstunde

    29

    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

    JPA Caches© 2014 Orientation in Objects GmbH

    Statementcache

    30

    Persistence ContextCache(First Level Cache)

    Second Level Cache

    Statement Cache

    CollectionCache

  • 16

    JPA Caches© 2014 Orientation in Objects GmbH

    Caching – Query Cache

    • Das Ergebnis von Queries wird gecached

    • Queries werden nur einmalig ausgeführt

    • Key ist Statement+Parameter

    • Nur ID‘s werden gecachted

    31

    Application /EntityManager

    „Select o from Order where ordernr=:nr“:nr=‚4711‘

    2nd Level Cache2nd Level Cache

    Datenbank

    Query C

    ache

    ResultSet(ID’s)

    JPA Caches© 2014 Orientation in Objects GmbH

    Query Cache aktivieren

    Query query=em.

    createQuery("from Country c where c.iso='DE'");

    query.setHint("org.hibernate.cacheable", true);

    Country germany=query.getSingleResult();

    32

  • 17

    JPA Caches© 2014 Orientation in Objects GmbH

    Collection Cache

    33

    Persistence ContextCache(First Level Cache)

    Second Level Cache

    Statement Cache

    CollectionCache

    JPA Caches© 2014 Orientation in Objects GmbH

    Collection Caches

    @Cache (usage=CacheConcurrencyStrategy.TRANSACTIONA L)

    @OneToMany(mappedBy="customer", fetch=FetchType.EAG ER, cascade=CascadeType.ALL)

    private Set members;

    34

    • Relationships Caching • Caching im Second Level Cache• Ähnlich dem Query cache werden nur ID‘s gecachted

    Hibernate stellt zusätzlich Collection Cache zur Verfügung

  • 18

    JPA Caches© 2014 Orientation in Objects GmbH

    Cache

    35

    Persistence ContextCache(First Level Cache)

    Second Level Cache

    Statement Cache

    CollectionCache

    nochmal zurück…. Noch ein paar Details

    + Details und Überlegung wie caching verwendet werden sollte

    JPA Caches© 2014 Orientation in Objects GmbH

    Möglichst alles Cachen ?

    36

    Möglichst alle Objekte Cachenfür beste Performance ?

  • 19

    JPA Caches© 2014 Orientation in Objects GmbH

    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

    37

    Fazit: Cache-Verwendung sollte geplant sein !!

    JPA Caches© 2014 Orientation in Objects GmbH

    Caching – Second Level Cache – Was cachen ?

    38

    LandOrder

    orderStatus

    Invoice (1999-2011)

    •Konstante Werte•Selten veränderliche Werte•Werte welche regelmäßig gelesen werden

    Daten welche nur von dieser Applikation geändert werden• Daten welche sich häufig ändern

    • Entitäten welche von unterschiedlichen Knoten geschrieben werden

    •Daten welche nur sehr selten gelesen werden

    sollte ich cachensollte ich nicht cachen

  • 20

    JPA Caches© 2014 Orientation in Objects GmbH

    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

    39

    Query query=em.createQuery("from Country c where c. iso='DE'");query.setHint( QueryHints.CACHE_RETRIEVE_MODE, CacheRetrieveMode.BYPASS);query.getResultList();

    JPA Caches© 2014 Orientation in Objects GmbH

    Was brauche ich zum Cachen ?

    40

    •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

  • 21

    JPA Caches© 2014 Orientation in Objects GmbH

    Mission erfüllt

    41

    JPA Caches© 2014 Orientation in Objects GmbH

    ?? ??

    ??Fragen ?Orientation in Objects GmbH

    Weinheimer Str. 6868309 Mannheim

    [email protected]

    ? ?

  • 22

    JPA Caches© 2014 Orientation in Objects GmbH

    Vielen Dank für ihre Aufmerksamkeit !

    Orientation in Objects GmbH

    Weinheimer Str. 6868309 Mannheim

    [email protected]

    JPA Caches© 2014 Orientation in Objects GmbH

    Manuelle Cache-Controlle

    Cache cache=entityManagerFactory.getCache();

    cache.contains(myClass.class,myObject);

    cache.evict(myClass.class,myObject);

    cache.evict(myClass.class);

    cache.evictAll();

    44


Recommended