Skip to main content

VectorStorage

Trait VectorStorage 

Source
pub trait VectorStorage: Send + Sync {
    // 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;
}
Expand description

Core storage abstraction - implementations can be in-memory, S3, etc.

Required Methods§

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 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

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

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

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,

Implementors§