[jbosscache-dev] REPEATABLE_READ in JBC as Hibernate 2nd Level Cache
Galder Zamarreno
galder.zamarreno at redhat.com
Fri Jul 18 11:04:33 EDT 2008
Paul Ferraro wrote:
> refresh() always goes to the db, and only potentially triggers a 2LC
> update - not a read.
>
> Perhaps we should revisit whether the scenario below warrants the cost
> of repeatable_read, given that entity eviction from session cache is
> typically used only to minimize memory usage when iterating through
> large results, i.e. when an entity is not likely to be re-read within
> the current transaction.
Hmmmm, this sounds like a bad practice to me or at least not very
performant. Evict/clear something within a transaction and then re-get it.
Brian, did you use 2nd level cache in your previous use case?
>
> On Thu, 2008-07-17 at 16:59 -0500, Brian Stansberry wrote:
>> Hmm, good point. Potentially also Session.refresh(...), although I'm not
>> sure if the implementation of that method skips the 2LC and goes right
>> to the db.
>>
>> Paul Ferraro wrote:
>>
>>> After thinking this through, the only scenario I can think of where the
>>> 2LC would be subject to a repeated read is after a session cache
>>> eviction (i.e. via Session.clear() or Session.evict(...)). Without
>>> REPEATABLE_READ isolation on the 2LC, any subsequent request withing the
>>> same transaction for an evicted entity could return an updated value, if
>>> the cache was updated by a concurrent request.
>>>
>>> Paul
>>>
>>> On Thu, 2008-07-17 at 12:59 -0500, Brian Stansberry wrote:
>>>> Can anyone see a reason to use REPEATABLE_READ as the JBoss Cache
>>>> isolation level in the 2nd level cache use case? I'm not seeing one, and
>>>> it certainly hurts performance by forcing cache writes to block waiting
>>>> for an earlier tx that did a read to commit.
>>>>
>>>> There are 4 types of data cached:
>>>>
>>>> 1) Entities
>>>>
>>>> If an entity is read from the 2LC, for the life of the tx it will be
>>>> cached in the Session, so AIUI there should be no second read during the
>>>> tx. So no benefit to RR.
>>>>
>>>> 2) Collections
>>>>
>>>> Same as entities.
>>>>
>>>> 3) Queries
>>>>
>>>> If an application executes a query twice in the same tx, I wouldn't
>>>> think they'd expect the same result. In any case, if an update to the
>>>> query cache is blocking waiting for a tx that previously read the query
>>>> result to release, the existence of the update that means the
>>>> underlying entities and their timestamps have changed. So a repeated
>>>> read of the cached query will just result in it being discarded as out
>>>> of date anyway.
>>>>
>>>> 4) Timestamps
>>>>
>>>> Here you don't want an RR semantic. You always want to get the most
>>>> up-to-date data.
>>>>
>>>>
>>>> Anyone see any holes in my thinking?
>>>>
>>>> --
>>>> Brian Stansberry
>>>> Lead, JBoss AS Clustering
>>>> JBoss, a division of Red Hat
>>>> _______________________________________________
>>>> jbosscache-dev mailing list
>>>> jbosscache-dev at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/jbosscache-dev
>>
>
> _______________________________________________
> jbosscache-dev mailing list
> jbosscache-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jbosscache-dev
--
Galder Zamarreño
Sr. Software Maintenance Engineer
JBoss, a division of Red Hat
More information about the jbosscache-dev
mailing list