I don't think we need an actual multi threaded cache. the flush operation in Hibernate
is not multi threaded, neither is the session.
A simple Map (or a better append only structure) will suffice, I think.
On 25 avr. 2012, at 09:32, Guillaume SCHEIBEL wrote:
What do you think about using the Ehcache module to store the data between 2 flushes ?
I will open a JIRA about this point if it has not already been done.
2012/4/25 Emmanuel Bernard <emmanuel(a)hibernate.org>
Hi Alan and all,
I have been researching the spikes issue you encounter in the stress test from a
theoretical point of view.
You were trying a different associations storage approach (splitting associations as one
row per document rather than the whole association per document). Does that return better
I am skeptical for a few reasons. MongoDB has a global write lock per mongod process
(they are working on a more fine grained solution). So if the spikes are due to lock
contention, shuffling data won't help much. Also make sure you use MongoDB 2.0 instead
of 1.8 as they yield lock on page fault which should solve a lot of these spikes
I have found this blog entry to be quite insightful
Generally speaking, if all data can stay in memory, MongoDB should behave wonderfully.
Which leads to my demo and the time difference between Infinispan 5s and Mongodb 20s. I
can see several reasons:
- we don't really batch operations in the mongodb dialect and we should.
We should accumulate operations and apply them at the end of the flush operation in one
batch. That will require some new infrastructure from OGM's engine though
to tell the dialect when to "flush".
- my VM might swap memory on disk which would explain the difference
- or it could be that Infinispan is simply 4 times faster which would not be too
surprising as Infinispan is in-process.
hibernate-dev mailing list