15
Structure Three cache 1st level cache - Session cache Hibernate supported cache. Ensures the entities are returnd always on the same reference 1/session (entitymanager) - Not thread safe Query cache Not supported by default. (Ehcache) Stores the queries and their results. 1/sessionfacory (entitymanagerfactory) 2nd level cache Not supported by default (Ehcache) Stores the entities (dehydrated - not as objects) 1/sessionfactory (entitymanager)

Hibernate caching

  • Upload
    bsudy

  • View
    1.103

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Hibernate caching

Structure

Three cache

1st level cache - Session cacheHibernate supported cache.

Ensures the entities are returnd always on the same reference

1/session (entitymanager) - Not thread safe

Query cache

Not supported by default. (Ehcache)

Stores the queries and their results.

1/sessionfacory (entitymanagerfactory)

2nd level cacheNot supported by default (Ehcache)

Stores the entities (dehydrated - not as objects)

1/sessionfactory (entitymanager)

Page 2: Hibernate caching

Default behavior

Questions: What piece of data should be cached? Hibernate has to know which piece of

data valid in the cache.

Hibernate does not run queries (at all) Query cache can store the

(Query, List<PrimaryKey>) pairs. 2nd level cache stores the entities.

Page 3: Hibernate caching

Read phenomena

Phantom readsOther transaction modifies the data

Non Repeatable readsOther transaction adds new data

Dirty dataNot committed data in the result.

Page 4: Hibernate caching

Isolation levels

Serializable

--- Phantom reads ---

Repeatable read

--- Non repeatable reads ---

Committed read

--- Dirty data ---

Uncommitted read

Page 5: Hibernate caching

2nd level cache

To optimise the performance Hibernate introduced the Cache strategies:

Read only Read-Write NonStrict Read-Write Transactional

Page 6: Hibernate caching

2nd level cache

To optimise the performance Hibernate introduced the Cache strategies:

Read only Read-Write NonStrict Read-Write Transactional

Page 7: Hibernate caching

Read only strategy

A read-only cache is good for data that needs to be read often but not modified.

Simple Safe to use in a clustered environment. The data has to never ever modify. Best performance.

Page 8: Hibernate caching

NonStrict Read-Write

Rarely need to modify data. This is the case if two transactions are unlikely to try to update the

same item simultaneously.

No strict transaction isolation Ensure Session.close() or

Session.disconnect() is called at the end of transaction. (except JTA)

hibernate.transaction.manager_lookup_class to use in JTA environment.

Page 9: Hibernate caching

Read-Write

Appropriate for an application which needs to update data regularly. (not exacly true)

Do not use a if serializable isolation needed.

Ensure Session.close() or Session.disconnect() is called at the end of transaction. (except JTA)

hibernate.transaction.manager_lookup_class to use in JTA environment.

Page 10: Hibernate caching

How is works - Read-only

The modification is disabled. No 2nd level cache update needed.

Page 11: Hibernate caching

How is works - NonStrict Read-Write

The entities are evicted from the 2nd level cache by their life timeout. Until the eviction they are in use.

Repeatable reads problem is not solved. The queries are not forwarded to the database.

Page 12: Hibernate caching

How it works - Read-write

Transaction and entity timestamp. If transaction timestamp is older than the

entity timestamp the entity has to be pulled out from the database.

The responsibility is deflected to the database.

Page 13: Hibernate caching

How it works - Read-write

Let's take a look our test code.

Page 14: Hibernate caching

Good to know

Be careful with query cache without 2nd level cache.

Be careful 2nd level cache without query cache.

Be careful query cache and read-write entity.

And again: 2nd level cache is not queryable only findable.

The first level cache keeps the entity references.

Page 15: Hibernate caching

A little bit configuration....

Persistence.xml Annotations Ehcache.xml Etc.