[
https://issues.apache.org/jira/browse/SOLR-1082?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12688634#action_12688634
]
Kaktu Chakarabati commented on SOLR-1082:
-----------------------------------------
So:
1. The suggestion for complying with jcache in itself is not in address of a
pending critical problem as much as it is a suggestion for moving forward with
the caching infrastructure to an implementation that will be more pluggable and
transparent than the current one - in specific the possibility of allowing
swapping in any 3rd-party implementation that can offer better
performance/functionality than the basic caches available in solr currently.
Moreover, the architecture of the caching layer as described
(https://jsr-107-interest.dev.java.net/javadoc/javax/cache/package-summary.html)
seems to be pretty well-rounded, including treatment of cache statistics,
event listeners, and an application-wide access pattern to the caches
(CacheManager). I think this is just a solid standard to go with for
formalizing a caching layer that will work well and wont require too much
tinkering with/refactoring in the long run.
2. Ehcache is just one such implementation that seems to be already available,
well-maintained and offer good performance and functionality out of the box -
supporting among other things distributed caching/replication which i think is
big, numerous eviction policies out of the box (LRU, LFU, FIFO), JMX and a
highly pluggable framework. Its also heavily tested and has been used in major
production environments as well some high-profile projects (Spring, Hibernate,
Maven among others). Delegating implementation to such a project would probably
do solr good in terms of both codebase maintenance as well as performance, and
again, doing it right via the API standard wont tie us down to it either.
3. As I see it, the current caching is pretty basic, and does not scale well to
the kind of production-usage scenarios i have in mind. in specific: Supporting
only LRU eviction policy, lack of a thorough benchmarking/unit-testing
framework such as the one EHcache has alongside publicly available benchmark
data and metrics, lack of a well-defined access pattern across the application
( internal caches are defined very differently than user/generic caches in the
SolrIndexSearcher, e.g generic caches are doubly referenced by both a Map and a
List inside the searcher, much of this implementation logic should probably be
abstracted away to a CacheManager kind of object).
Also, some of the more serious issues (OOM's) I see with the current behavior
when committing index updates while serving requests and having two searcher
instances running concurrently, requiring up to twice the space needed in terms
of cached objects, might very well be addressed with an implementation such as
ehcache that supports Cache/Element-based expiry policies, disk flushing, and
cache event listeners.
> Refactor caching layer to be JCache compliant (jsr-107). In particular,
> consider using ehcache implementation
> -------------------------------------------------------------------------------------------------------------
>
> Key: SOLR-1082
> URL: https://issues.apache.org/jira/browse/SOLR-1082
> Project: Solr
> Issue Type: New Feature
> Components: search
> Affects Versions: 1.5
> Reporter: Kaktu Chakarabati
>
> overhaul the caching layer to be compliant
> with the upcoming Jcache api (jsr-107).
> In specific, I've been experimenting some with ehcache
> (http://ehcache.sourceforge.net/ , Apache OS license) and it seems to be a
> very comprehensive implementation, as well as fully compliant with the jcache
> API.
> I think the benefits are numerous: in respect to ehcache itself, it seems to
> be a very mature implementation, supporting most classical cache schemes as
> well as some interesting distributed cache options (and of course,
> performance-wise its very lucrative in terms of reported multi-cpu scaling
> performance and some of the benchmark figures they show).
> Further, abstracting away the caches to use the jcache api would probably
> make it easier in the future to make the whole caching layer more easily
> swappable with some other implementations that will probably crop up.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.