Skip to main content

CachedStorage

Struct CachedStorage 

Source
pub struct CachedStorage<S> { /* private fields */ }
Expand description

Cached storage wrapper that adds L1 caching to any VectorStorage

Implementations§

Source§

impl<S> CachedStorage<S>

Source

pub fn new(inner: S, cache: VectorCache, redis: Option<RedisCache>) -> Self

Source

pub fn with_disk_cache(self, disk: Arc<DiskCache>) -> Self

Attach an L2 disk cache behind the L1 (Moka) and L1.5 (Redis) tiers.

Source

pub fn with_delta_history(self, delta: Arc<DeltaStoreManager>) -> Self

Attach a delta-encoded version-history store, recorded on every upsert.

Source

pub fn delta(&self) -> Option<&Arc<DeltaStoreManager>>

Access the delta version-history store, if enabled.

Source

pub fn with_default_cache(inner: S) -> Self

Source

pub fn cache(&self) -> &VectorCache

Source

pub fn inner(&self) -> &S

Source

pub fn redis(&self) -> Option<&RedisCache>

Trait Implementations§

Source§

impl<S: VectorStorage> VectorStorage for CachedStorage<S>

Source§

fn reclaim_derived_caches<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

DAK-7337: drop the entire Moka L1 (write-through over inner, so every entry is repopulatable on demand) and force moka’s deferred eviction to run so the freed entries are actually released now, then let the inner stack reclaim its own derived layers. Redis is intentionally untouched — it lives out-of-process and does not contribute to this process’s RSS.

Source§

fn upsert<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, vectors: Vec<Vector>, ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store or update vectors in a namespace
Source§

fn get<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ids: &'life2 [VectorId], ) -> Pin<Box<dyn Future<Output = Result<Vec<Vector>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Get vectors by IDs
Source§

fn get_all<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ) -> Pin<Box<dyn Future<Output = Result<Vec<Vector>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get all vectors in a namespace (for brute-force search)
Source§

fn get_all_meta<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ) -> Pin<Box<dyn Future<Output = Result<Vec<Vector>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get all vectors in a namespace WITHOUT their embedding values (DAK-7387). Read more
Source§

fn delete<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ids: &'life2 [VectorId], ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Delete vectors by IDs
Source§

fn namespace_exists<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Check if namespace exists
Source§

fn ensure_namespace<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Create namespace if it doesn’t exist
Source§

fn count<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get vector count in namespace
Source§

fn dimension<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ) -> Pin<Box<dyn Future<Output = Result<Option<usize>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get vector dimension for namespace (None if empty)
Source§

fn list_namespaces<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<NamespaceId>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List all namespaces
Source§

fn delete_namespace<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Delete a namespace and all its vectors
Source§

fn cleanup_expired<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Clean up expired vectors in a namespace Returns the number of vectors removed
Source§

fn cleanup_all_expired<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Clean up expired vectors in all namespaces Returns total number of vectors removed
Source§

fn get_page<'life0, 'life1, 'async_trait>( &'life0 self, namespace: &'life1 NamespaceId, offset: usize, limit: usize, ) -> Pin<Box<dyn Future<Output = Result<Vec<Vector>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Retrieve a page of vectors from a namespace for memory-bounded iteration (DAK-5716). Read more

Auto Trait Implementations§

§

impl<S> !RefUnwindSafe for CachedStorage<S>

§

impl<S> !UnwindSafe for CachedStorage<S>

§

impl<S> Freeze for CachedStorage<S>
where S: Freeze,

§

impl<S> Send for CachedStorage<S>
where S: Send,

§

impl<S> Sync for CachedStorage<S>
where S: Sync,

§

impl<S> Unpin for CachedStorage<S>
where S: Unpin,

§

impl<S> UnsafeUnpin for CachedStorage<S>
where S: UnsafeUnpin,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more