Package org.rocksdb

Class HyperClockCache

  • All Implemented Interfaces:
    java.lang.AutoCloseable

    @Experimental("HyperClockCache is still experimental and this API may change in future.")
    public class HyperClockCache
    extends Cache
    HyperClockCache - A lock-free Cache alternative for RocksDB block cache that offers much improved CPU efficiency vs. LRUCache under high parallel load or high contention, with some caveats:
    • Not a general Cache implementation: can only be used for BlockBasedTableOptions::block_cache, which RocksDB uses in a way that is compatible with HyperClockCache.
    • Requires an extra tuning parameter: see estimated_entry_charge below. Similarly, substantially changing the capacity with SetCapacity could harm efficiency. -> EXPERIMENTAL: the tuning parameter can be set to 0 to find the appropriate balance automatically.
    • Cache priorities are less aggressively enforced, which could cause cache dilution from long range scans (unless they use fill_cache=false).
    • Can be worse for small caches, because if almost all of a cache shard is pinned (more likely with non-partitioned filters), then CLOCK eviction becomes very CPU intensive.
    • Constructor Detail

      • HyperClockCache

        public HyperClockCache​(long capacity,
                               long estimatedEntryCharge,
                               int numShardBits,
                               boolean strictCapacityLimit)
        Parameters:
        capacity - The fixed size capacity of the cache
        estimatedEntryCharge - EXPERIMENTAL: the field can be set to 0 to size the table dynamically and automatically. See C++ Api for more info.
        numShardBits - The cache is sharded to 2^numShardBits shards, by hash of the key
        strictCapacityLimit - insert to the cache will fail when cache is full