hyprstream_core::storage

Trait StorageBackend

Source
pub trait StorageBackend:
    Send
    + Sync
    + 'static {
Show 17 methods // Required methods fn init<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn insert_metrics<'life0, 'async_trait>( &'life0 self, metrics: Vec<MetricRecord>, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn query_metrics<'life0, 'async_trait>( &'life0 self, from_timestamp: i64, ) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn prepare_sql<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn query_sql<'life0, 'life1, 'async_trait>( &'life0 self, statement_handle: &'life1 [u8], ) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn aggregate_metrics<'life0, 'life1, 'async_trait>( &'life0 self, function: AggregateFunction, group_by: &'life1 GroupBy, from_timestamp: i64, to_timestamp: Option<i64>, ) -> Pin<Box<dyn Future<Output = Result<Vec<AggregateResult>, Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn new_with_options( connection_string: &str, options: &HashMap<String, String>, credentials: Option<&Credentials>, ) -> Result<Self, Status> where Self: Sized; fn create_table<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, table_name: &'life1 str, schema: &'life2 Schema, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn insert_into_table<'life0, 'life1, 'async_trait>( &'life0 self, table_name: &'life1 str, batch: RecordBatch, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn query_table<'life0, 'life1, 'async_trait>( &'life0 self, table_name: &'life1 str, projection: Option<Vec<String>>, ) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn create_aggregation_view<'life0, 'life1, 'async_trait>( &'life0 self, view: &'life1 AggregationView, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn query_aggregation_view<'life0, 'life1, 'async_trait>( &'life0 self, view_name: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn drop_table<'life0, 'life1, 'async_trait>( &'life0 self, table_name: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn drop_aggregation_view<'life0, 'life1, 'async_trait>( &'life0 self, view_name: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn table_manager(&self) -> &TableManager; // Provided methods fn update_batch_aggregations<'life0, 'life1, 'async_trait>( &'life0 self, batch: &'life1 [MetricRecord], window: TimeWindow, ) -> Pin<Box<dyn Future<Output = Result<Vec<BatchAggregation>, Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait { ... } fn insert_batch_aggregations<'life0, 'async_trait>( &'life0 self, aggregations: Vec<BatchAggregation>, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait { ... }
}
Expand description

Storage backend trait for metric data persistence.

This trait defines the interface that all storage backends must implement. It provides methods for:

  • Initialization and configuration
  • Metric data insertion
  • Metric data querying
  • SQL query preparation and execution
  • Aggregation of metrics
  • Table and view management

Required Methods§

Source

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

Initialize the storage backend.

Source

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

Insert metrics into storage.

Source

fn query_metrics<'life0, 'async_trait>( &'life0 self, from_timestamp: i64, ) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Query metrics from storage.

Source

fn prepare_sql<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Prepare a SQL query and return a handle. The handle is backend-specific and opaque to the caller.

Source

fn query_sql<'life0, 'life1, 'async_trait>( &'life0 self, statement_handle: &'life1 [u8], ) -> Pin<Box<dyn Future<Output = Result<Vec<MetricRecord>, Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Execute a prepared SQL query using its handle. The handle must have been obtained from prepare_sql.

Source

fn aggregate_metrics<'life0, 'life1, 'async_trait>( &'life0 self, function: AggregateFunction, group_by: &'life1 GroupBy, from_timestamp: i64, to_timestamp: Option<i64>, ) -> Pin<Box<dyn Future<Output = Result<Vec<AggregateResult>, Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Aggregate metrics using the specified function and grouping.

Source

fn new_with_options( connection_string: &str, options: &HashMap<String, String>, credentials: Option<&Credentials>, ) -> Result<Self, Status>
where Self: Sized,

Create a new instance with the given options. The connection string and options are backend-specific.

Source

fn create_table<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, table_name: &'life1 str, schema: &'life2 Schema, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Create a new table with the given schema

Source

fn insert_into_table<'life0, 'life1, 'async_trait>( &'life0 self, table_name: &'life1 str, batch: RecordBatch, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Insert data into a table

Source

fn query_table<'life0, 'life1, 'async_trait>( &'life0 self, table_name: &'life1 str, projection: Option<Vec<String>>, ) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Query data from a table

Source

fn create_aggregation_view<'life0, 'life1, 'async_trait>( &'life0 self, view: &'life1 AggregationView, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Create an aggregation view

Source

fn query_aggregation_view<'life0, 'life1, 'async_trait>( &'life0 self, view_name: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<RecordBatch, Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Query data from an aggregation view

Source

fn drop_table<'life0, 'life1, 'async_trait>( &'life0 self, table_name: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Drop a table

Source

fn drop_aggregation_view<'life0, 'life1, 'async_trait>( &'life0 self, view_name: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Drop an aggregation view

Source

fn table_manager(&self) -> &TableManager

Get the table manager instance

Provided Methods§

Source

fn update_batch_aggregations<'life0, 'life1, 'async_trait>( &'life0 self, batch: &'life1 [MetricRecord], window: TimeWindow, ) -> Pin<Box<dyn Future<Output = Result<Vec<BatchAggregation>, Status>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Update batch-level aggregations. This is called during batch writes to maintain running aggregations.

Source

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

Insert batch-level aggregations. This is called after update_batch_aggregations to persist the aggregations.

Implementors§