[ 
https://issues.apache.org/jira/browse/SOLR-667?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Noble Paul updated SOLR-667:
----------------------------

    Attachment: ConcurrentLRUCache.java

my findings on a simple perf test with no contention (single thread)

The code is there in the _main()_

cache size 1 million

with Hashmap
* time taken  for 1 million inserts = 2019ms
* time taken for 1 million gets = 625
* time taken  for cleanup  = 345ms

with ConcurrenthashHashMap

* time taken  for 1 million inserts  = 2437(roughly 20% slower than hashmap but 
small in absolute numbers) 
* time taken for 1 million gets  = 393ms (actually faster than simple HashMap )
* time taken  for cleanup = 298ms (actually faster)

other observations 
The extra thread may not be be necessary . The unlucky put() may take around 
.25 secs to .5secs for a cache size of 1 million .
If we keep the value of (highHaterMark -lowWaterMark) value very high cleanups 
will be infrequent





> Alternate LRUCache implementation
> ---------------------------------
>
>                 Key: SOLR-667
>                 URL: https://issues.apache.org/jira/browse/SOLR-667
>             Project: Solr
>          Issue Type: New Feature
>          Components: search
>    Affects Versions: 1.3
>            Reporter: Noble Paul
>         Attachments: ConcurrentLRUCache.java, ConcurrentLRUCache.java
>
>
> The only available SolrCache i.e LRUCache is based on _LinkedHashMap_ which 
> has _get()_ also synchronized. This can cause severe bottlenecks for faceted 
> search. Any alternate implementation which can be faster/better must be 
> considered. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to