pub struct RocksDbStorage { /* private fields */ }Expand description
Persistent hot-tier storage backed by RocksDB.
Key layout: ns:{namespace}:v:{vector_id} → bincode-serialized Vector
Namespace existence tracked via sentinel keys: ns:{namespace}:__meta__ → "1"
Implementations§
Source§impl RocksDbStorage
impl RocksDbStorage
Sourcepub fn new(config: RocksDbStorageConfig) -> Result<Self>
pub fn new(config: RocksDbStorageConfig) -> Result<Self>
Open (or create) a RocksDB-backed storage at the configured path.
Sourcepub fn open_at(path: &str, config: &RocksDbStorageConfig) -> Result<Self>
pub fn open_at(path: &str, config: &RocksDbStorageConfig) -> Result<Self>
Open a RocksDB instance at the given path with the supplied config.
Trait Implementations§
Source§impl VectorStorage for RocksDbStorage
impl VectorStorage for RocksDbStorage
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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
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,
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 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.
Auto Trait Implementations§
impl Freeze for RocksDbStorage
impl RefUnwindSafe for RocksDbStorage
impl Send for RocksDbStorage
impl Sync for RocksDbStorage
impl Unpin for RocksDbStorage
impl UnsafeUnpin for RocksDbStorage
impl UnwindSafe for RocksDbStorage
Blanket Implementations§
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
Mutably borrows from an owned value. Read more