GitHub user ben-manes opened a pull request:

    https://github.com/apache/cassandra/pull/59

    CASSANDRA-10855: Use Caffeine for on-heap caches

    [Caffeine](https://github.com/ben-manes/caffeine) is a Java 8 cache by the 
author of ConcurrentLinkedHashMap and Guava's cache, which is what was 
previously used. For the key and counter caches, the CLHM-based cache remains 
as a fallback if needed, but is deprecated and scheduled for removal.
    
    CLHM and Guava uses the LRU policy due to its simplicity, decent hit rate, 
and known characteristics. Caffeine uses a near optimal policy, 
[W-TinyLFU](http://arxiv.org/pdf/1512.00727.pdf), which has a significantly 
[higher hit rate](https://github.com/ben-manes/caffeine/wiki/Efficiency). In 
particular the hit rate in the paper shows a substantial gain on database and 
search workloads.
    
    The performance between CLHM and Caffeine caches should be similar, with 
some possible gains in write throughput. Significant gains may be observed from 
Guava, due to it never porting over some optimizations that improve read 
throughput and avoid creating garbage as a side effect.
    
    For a brief overview, see this 
[article](https://www.voxxed.com/blog/2015/12/add-a-boost-of-caffeine-to-your-java).
 This pull request is being tracked in 
[CASSANDRA-10855](https://issues.apache.org/jira/browse/CASSANDRA-10855).
    
    @jbellis @snazy 

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/ben-manes/cassandra caffeine

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/cassandra/pull/59.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #59
    
----
commit 3435a5a2b6eee30210350d5dfe1f76203d9d0f35
Author: Ben Manes <ben.ma...@gmail.com>
Date:   2015-12-14T06:22:04Z

    Use Caffeine for key and counter on-heap caches
    
    Caffeine is a Java 8 cache by the author of ConcurrentLinkedHashMap,
    which is what was previously used. That cache remains as a fallback
    if needed, but is deprecated and scheduled for removal.
    
    CLHM uses the LRU policy due to its simplicity, decent hit rate, and
    known characteristics. Caffeine uses a near optimal policy, W-TinyLFU,
    which has a significantly higher hit rate. In particular the hit rate
    in the paper shows a substantial gain on database and search workloads.
    
    The performance between the two caches should be similar, with some
    possible gains in write throughput.
    
    Caffeine: https://github.com/ben-manes/caffeine
    W-TinyLFU: http://arxiv.org/pdf/1512.00727.pdf
    Overview: 
https://www.voxxed.com/blog/2015/12/add-a-boost-of-caffeine-to-your-java

commit 91ac1fbf6e38704597befce9c280c516d61fb07a
Author: Ben Manes <ben.ma...@gmail.com>
Date:   2015-12-14T06:44:17Z

    Switch usage of Guava caches to Caffeine

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to