For Hibernate Search, I did introduce the IndexReaders caching.
My tests shows for:
- a search intensive application,
- low update ratio
- in-memory database
- filesystem based index
a speed increase of 25 to 30%.
It is not the default yet (use 'hibernate.search.reader.strategy
shared' to enable), but once it's tested, it will be.
It was not a piece of cake (to say the least), I would appreciate a
couple of pairs of eyes on the code, as it involves locking and JMM
understanding.
I think I reduced the lock windows as much as possible but if
someone's got ideas (or think it's unsafe), fell free to share.
The code is here
http://fisheye.jboss.org/browse/Hibernate/trunk/HibernateExt/search/
src/java/org/hibernate/search/reader/SharedReaderProvider.java?r=11576