pub trait VectorStorage: Send + Sync {
Show 15 methods
// Required methods
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
// Provided methods
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 { ... }
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 { ... }
fn reclaim_derived_caches<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait { ... }
}Expand description
Core storage abstraction - implementations can be in-memory, S3, etc.
Required Methods§
Sourcefn 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,
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
Sourcefn 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,
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
Sourcefn 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,
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)
Sourcefn 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,
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
Sourcefn 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,
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
Sourcefn 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,
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
Sourcefn 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,
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
Sourcefn 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,
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)
Sourcefn 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,
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
Sourcefn 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,
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
Sourcefn 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,
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
Provided Methods§
Sourcefn 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,
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).
Metadata-only projection for scan paths (e.g. batch recall) that filter on
metadata and never read values — skipping the per-vector embedding clone.
Returned vectors are identical to VectorStorage::get_all except values
is empty. The default implementation falls back to get_all and drops the
values, so wrapper/remote backends stay correct; in-process backends should
override to avoid cloning embeddings at all.
Sourcefn 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,
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).
Default implementation loads the entire namespace and slices — override in storage backends that support native cursor-based pagination for O(page) memory.
Sourcefn reclaim_derived_caches<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn reclaim_derived_caches<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Best-effort release of derived cache layers held by this storage stack (e.g. the Moka L1 vector cache), called under memory pressure before new work is shed (DAK-7337). Durable data MUST NOT be dropped — only layers that can be transparently repopulated from the source of truth. Default: no-op for backends with no derived layers.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl<T: VectorStorage + ?Sized> VectorStorage for Arc<T>
Blanket implementation for Arc to enable dynamic dispatch
impl<T: VectorStorage + ?Sized> VectorStorage for Arc<T>
Blanket implementation for Arc