pub trait AsyncStorageBackend: Send + Sync {
Show 15 methods
// Required methods
fn store_node<'life0, 'life1, 'async_trait>(
&'life0 self,
node: &'life1 Node,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn get_node<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<Option<Node>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete_node<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn store_edge<'life0, 'life1, 'async_trait>(
&'life0 self,
edge: &'life1 Edge,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn get_edge<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 EdgeId,
) -> Pin<Box<dyn Future<Output = Result<Option<Edge>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete_edge<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 EdgeId,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn get_session_nodes<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Node>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn get_outgoing_edges<'life0, 'life1, 'async_trait>(
&'life0 self,
node_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Edge>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn get_incoming_edges<'life0, 'life1, 'async_trait>(
&'life0 self,
node_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Edge>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn flush<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn stats<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<StorageStats>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
// Provided methods
fn store_nodes_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
nodes: &'life1 [Node],
) -> Pin<Box<dyn Future<Output = Result<Vec<NodeId>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn store_edges_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
edges: &'life1 [Edge],
) -> Pin<Box<dyn Future<Output = Result<Vec<EdgeId>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn get_session_nodes_stream(
&self,
session_id: &SessionId,
) -> Pin<Box<dyn Stream<Item = Result<Node>> + Send + '_>> { ... }
fn count_session_nodes<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
}Expand description
Async trait defining storage backend operations
This trait provides async versions of all storage operations for use with Tokio runtime. It enables high-performance concurrent operations and non-blocking I/O.
Required Methods§
Sourcefn store_node<'life0, 'life1, 'async_trait>(
&'life0 self,
node: &'life1 Node,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn store_node<'life0, 'life1, 'async_trait>(
&'life0 self,
node: &'life1 Node,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Store a node in the backend asynchronously
Sourcefn get_node<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<Option<Node>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_node<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<Option<Node>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Retrieve a node by ID asynchronously
Sourcefn delete_node<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_node<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Delete a node asynchronously
Sourcefn store_edge<'life0, 'life1, 'async_trait>(
&'life0 self,
edge: &'life1 Edge,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn store_edge<'life0, 'life1, 'async_trait>(
&'life0 self,
edge: &'life1 Edge,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Store an edge asynchronously
Sourcefn get_edge<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 EdgeId,
) -> Pin<Box<dyn Future<Output = Result<Option<Edge>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_edge<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 EdgeId,
) -> Pin<Box<dyn Future<Output = Result<Option<Edge>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Retrieve an edge by ID asynchronously
Sourcefn delete_edge<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 EdgeId,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_edge<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 EdgeId,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Delete an edge asynchronously
Sourcefn get_session_nodes<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Node>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_session_nodes<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Node>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Get all nodes in a session asynchronously
Sourcefn get_outgoing_edges<'life0, 'life1, 'async_trait>(
&'life0 self,
node_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Edge>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_outgoing_edges<'life0, 'life1, 'async_trait>(
&'life0 self,
node_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Edge>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Get all edges from a node asynchronously
Sourcefn get_incoming_edges<'life0, 'life1, 'async_trait>(
&'life0 self,
node_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Edge>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_incoming_edges<'life0, 'life1, 'async_trait>(
&'life0 self,
node_id: &'life1 NodeId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Edge>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Get all edges to a node asynchronously
Provided Methods§
Sourcefn store_nodes_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
nodes: &'life1 [Node],
) -> Pin<Box<dyn Future<Output = Result<Vec<NodeId>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn store_nodes_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
nodes: &'life1 [Node],
) -> Pin<Box<dyn Future<Output = Result<Vec<NodeId>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Batch store multiple nodes asynchronously for improved performance
Sourcefn store_edges_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
edges: &'life1 [Edge],
) -> Pin<Box<dyn Future<Output = Result<Vec<EdgeId>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn store_edges_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
edges: &'life1 [Edge],
) -> Pin<Box<dyn Future<Output = Result<Vec<EdgeId>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Batch store multiple edges asynchronously for improved performance
Sourcefn get_session_nodes_stream(
&self,
session_id: &SessionId,
) -> Pin<Box<dyn Stream<Item = Result<Node>> + Send + '_>>
fn get_session_nodes_stream( &self, session_id: &SessionId, ) -> Pin<Box<dyn Stream<Item = Result<Node>> + Send + '_>>
Stream nodes from a session for memory-efficient iteration over large result sets
This method returns a stream that yields nodes one at a time, avoiding the need to load all nodes into memory at once. This is particularly useful for sessions with thousands of nodes.
§Examples
use llm_memory_graph::storage::AsyncSledBackend;
use llm_memory_graph::storage::AsyncStorageBackend;
use llm_memory_graph::types::SessionId;
use futures::stream::StreamExt;
let backend = AsyncSledBackend::open("./data/graph.db").await?;
let session_id = SessionId::new();
let mut stream = backend.get_session_nodes_stream(&session_id);
let mut count = 0;
while let Some(node) = stream.next().await {
let node = node?;
// Process node without loading all into memory
count += 1;
}
println!("Processed {} nodes", count);Sourcefn count_session_nodes<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn count_session_nodes<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Count nodes in a session without loading them into memory
This is more efficient than get_session_nodes().await?.len() for large sessions
as it only counts without deserializing node data.
§Examples
use llm_memory_graph::storage::AsyncSledBackend;
use llm_memory_graph::storage::AsyncStorageBackend;
use llm_memory_graph::types::SessionId;
let backend = AsyncSledBackend::open("./data/graph.db").await?;
let session_id = SessionId::new();
let count = backend.count_session_nodes(&session_id).await?;
println!("Session has {} nodes", count);