pub struct WorkloadAnalyzer { /* private fields */ }Expand description
Tracks historical query logs and exposes heuristics for deciding which predicates warrant a dedicated SIEVE subindex.
Implementations§
Source§impl WorkloadAnalyzer
impl WorkloadAnalyzer
Sourcepub fn new(stable_fraction_threshold: f32) -> Self
pub fn new(stable_fraction_threshold: f32) -> Self
Create a new analyzer. stable_fraction_threshold is the minimum
fraction of total queries a predicate must represent to be considered
stable.
Sourcepub fn record(&mut self, signature: PredicateSignature, timestamp_secs: u64)
pub fn record(&mut self, signature: PredicateSignature, timestamp_secs: u64)
Record a query that used the given predicate signature.
Sourcepub fn stable_predicates(&self) -> Vec<(PredicateSignature, f32)>
pub fn stable_predicates(&self) -> Vec<(PredicateSignature, f32)>
Returns (signature, frequency) pairs sorted by frequency descending,
filtered to those whose frequency exceeds stable_fraction_threshold.
Frequency is the fraction of total log entries contributed by that predicate. Returns an empty Vec if the log is empty.
Sourcepub fn estimate_subindex_cost(
&self,
vectors_in_subindex: usize,
dim: usize,
) -> (usize, f32, f32)
pub fn estimate_subindex_cost( &self, vectors_in_subindex: usize, dim: usize, ) -> (usize, f32, f32)
Rough 3D cost model for a candidate subindex.
Returns (memory_bytes, latency_ms, recall) estimates:
memory_bytes≈n * (dim * 4 + sub_m * 4 * avg_layers)whereavg_layers ≈ 2.latency_ms≈log2(n) * 0.01.recall=0.95(assumed for a correctly built HNSW index).
These are intentionally coarse: they guide the build/no-build decision for a planner, not a precision benchmark.
Auto Trait Implementations§
impl Freeze for WorkloadAnalyzer
impl RefUnwindSafe for WorkloadAnalyzer
impl Send for WorkloadAnalyzer
impl Sync for WorkloadAnalyzer
impl Unpin for WorkloadAnalyzer
impl UnsafeUnpin for WorkloadAnalyzer
impl UnwindSafe for WorkloadAnalyzer
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.