pub struct PrefixProber<'a, D: DBAccess> { /* private fields */ }Expand description
A reusable prefix probe that avoids per-call iterator creation/destruction.
Use this when performing many prefix existence checks in a tight loop.
A prober reads the database as of the sequence number that was current when
it was created, and it pins the memtables and SST files that were current
then. Both are what refresh exists to move
forward. A prober that is only used for a single burst of probes and then
dropped needs neither.
Implementations§
Source§impl<D: DBAccess> PrefixProber<'_, D>
impl<D: DBAccess> PrefixProber<'_, D>
Sourcepub fn exists(&mut self, prefix: &[u8]) -> Result<bool, Error>
pub fn exists(&mut self, prefix: &[u8]) -> Result<bool, Error>
Returns true if any key exists with the given prefix. This performs a seek to the prefix and checks the current key.
§Errors
Returns the RocksDB error if the seek failed. A seek that hit an error leaves the iterator invalid, so the key check below cannot observe one.
Sourcepub fn refresh(&mut self) -> Result<(), Error>
pub fn refresh(&mut self) -> Result<(), Error>
Moves the probe to the latest committed state of the database.
Call this before reusing a prober that has been sitting idle. Writes that land after the prober was created or last refreshed are invisible to it until then.
This is cheap when RocksDB’s superversion has not changed, because the
existing merge tree over the memtables and SST files is kept and only
the read sequence moves. A flush or a compaction bumps the superversion
and forces that tree to be rebuilt, which costs roughly what building a
new prober costs. Refreshing a prober that has not probed yet is a
pessimisation, because it builds the tree that the first
exists call would otherwise build lazily.
Refreshing also releases the memtables and SST files the prober was pinning, which is what lets a flush or a compaction reclaim them. A cached prober that is never refreshed holds them for as long as it lives, so pool them on a timer rather than on request arrival.
§Errors
Returns the RocksDB error if the refresh failed.