[ 
https://issues.apache.org/jira/browse/SOLR-3393?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13450494#comment-13450494
 ] 

Adrien Grand commented on SOLR-3393:
------------------------------------

bq. I agreed with his reasons. I wonder if there might be a way to have the 
decay happen much less often – say after a configurable number of commits 
rather than for every commit.

I not comfortable with applying evictDecay based on the commit rate while cache 
usage depends on the query rate: a read-only index would never benefit from it.

bq. I don't understand your first note about the put

The SolrCache.put(key, value) method should return the previous value 
associated with key or null if key was not in the cache. Instead, LFUCache.put 
returned the value that has just been added to the cache.

bq. On whether things should be volatile or not – I based all that on 
SOLR-2906, and I based SOLR-2906 on existing stuff. I don't completely 
understand what the implications are. If you do, awesome.

http://en.wikipedia.org/wiki/Volatile_variable#In_Java

One of the use-cases of the volatile keyword is to make sure that you are 
actually reading the most up-to-date value of a variable. By not using this 
keyword, it could happen that two CPUs don't think that a variable has the same 
value (because of their caches). Brian Goetz has written a nice article on the 
volatile keyword in case you are interested in the features of volatile 
variables http://www.ibm.com/developerworks/java/library/j-jtp06197/index.html.

We don't need it here because everything happens in synchronized blocks, which 
already ensure that you are reading the most up-to-date value.


                
> Implement an optimized LFUCache
> -------------------------------
>
>                 Key: SOLR-3393
>                 URL: https://issues.apache.org/jira/browse/SOLR-3393
>             Project: Solr
>          Issue Type: Improvement
>          Components: search
>    Affects Versions: 3.6, 4.0-ALPHA
>            Reporter: Shawn Heisey
>            Priority: Minor
>             Fix For: 4.0
>
>         Attachments: SOLR-3393.patch, SOLR-3393.patch, SOLR-3393.patch, 
> SOLR-3393.patch, SOLR-3393.patch, SOLR-3393.patch
>
>
> SOLR-2906 gave us an inefficient LFU cache modeled on 
> FastLRUCache/ConcurrentLRUCache.  It could use some serious improvement.  The 
> following project includes an Apache 2.0 licensed O(1) implementation.  The 
> second link is the paper (PDF warning) it was based on:
> https://github.com/chirino/hawtdb
> http://dhruvbird.com/lfu.pdf
> Using this project and paper, I will attempt to make a new O(1) cache called 
> FastLFUCache that is modeled on LRUCache.java.  This will (for now) leave the 
> existing LFUCache/ConcurrentLFUCache implementation in place.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to