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

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

Hi hoss, thanks for bringing this up!

 - {{put}} should return the previous value instead of returning the value that 
has been put into the cache.
 - I don't like the {{evictDecay}} option, I assume it is here to prevent the 
most frequently used entry from being evicted in case all entries have a 
frequency >= maxFreq but on the other hand it makes every put operation run in 
O( n ) so maybe we should just remove it and add a message in the class 
javadocs to warn users that entries that have a frequency >= maxFreq are 
evicted according to a LRU policy.
 - Maybe we should remove warmDecay as well, I understand it is here to try to 
prevent cache pollution but it makes the cache behave differently in case there 
are commits: if an entry is retrieved 5 times before a commit and 5 times 
after, it will be considered less frequently used than an entry that has been 
retrieved 8 times after the commit, this is counterintuitive.
 - I think Entry.value and Entry.frequency don't need to be volatile?
 - maxCacheSize - 1 is probably a too high default value for maxFreq. It can 
make doEviction (and consequently put) run in O( n ). Maybe we should make it 
configurable with something like log( n ) or 10 as a default value? Moreover, 
lower values of maxFreq are less prone to cache pollution.

Regarding your (2), I personally don't mind if it is a little slower on 
average. I would expect the get method to be slower with this impl but on the 
other hand ConcurrentLFUCache seems to provide no warranty that it will be able 
to evict entries as fast as they get inserted into the cache  so I think this 
new impl is better.
                
> 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-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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to