Package org.rocksdb

Class HyperClockCache

All Implemented Interfaces:
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 Details

    • 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
  • Method Details