Skip to content

HeliosDB API Reference

HeliosDB API Reference

Version 7.0

Table of Contents

  1. Introduction
  2. API Overview
  3. Authentication
  4. Storage APIs
  5. Vector Database APIs
  6. Graph Database APIs
  7. Document Store APIs
  8. Time-Series APIs
  9. Replication APIs
  10. Cache APIs
  11. Transaction APIs
  12. Protocol Compatibility
  13. Error Handling
  14. Best Practices

Introduction

The HeliosDB API provides a comprehensive set of interfaces for interacting with the database system. This reference covers all public APIs organized by functional area. Each API includes:

  • Function signatures with parameter and return types
  • Usage examples
  • Error conditions
  • Performance considerations

API Overview

HeliosDB provides multiple API interfaces to accommodate different use cases and integration patterns:

  • Rust Native APIs: For embedded use cases and maximum performance (documented below)
  • RESTful HTTP APIs: For web services, microservices, and cross-language integration
  • SQL Interface: ANSI SQL:2016 compliant with HeliosDB extensions - see SQL_API_REFERENCE.md
  • Wire Protocol Compatibility: PostgreSQL, MongoDB, Redis, Cassandra, ClickHouse, Oracle TNS

API Design Principles

  1. Consistency: All APIs follow consistent naming, error handling, and response patterns
  2. Performance: Zero-copy operations, async/await, connection pooling
  3. Security: Authentication, authorization, encryption, input validation
  4. Observability: Comprehensive logging, metrics, tracing
  5. Backward Compatibility: Semantic versioning, deprecation warnings

REST API Base URLs

Production: https://api.heliosdb.com
Development: http://localhost:8080

API Versioning

All HTTP APIs are versioned in the URL path:

/api/v1/... # Current stable version
/api/v2/... # Future version (when available)

For RESTful HTTP APIs, see these dedicated references:


Authentication

API Key Authentication

For REST API and service-to-service communication:

Terminal window
curl -H "Authorization: Bearer hdb_sk_abc123xyz..." \
https://api.heliosdb.com/api/v1/tenants

JWT Token Authentication

For user authentication with fine-grained permissions:

Terminal window
# Obtain token
curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "user", "password": "pass"}'
# Use token
curl -H "Authorization: Bearer eyJhbGc..." \
http://localhost:8080/api/v1/tables

Database Authentication

For PostgreSQL wire protocol connections:

Terminal window
psql "postgresql://username:password@localhost:5432/heliosdb"

Supported Methods:

  • Password (MD5, SCRAM-SHA-256)
  • Certificate-based (mTLS)
  • LDAP/Active Directory
  • OAuth 2.0 / OIDC

Import Conventions

// Storage
use heliosdb_storage::{LsmStorageEngine, StorageConfig};
// Vector
use heliosdb_vector::{VectorIndex, HnswIndex, DistanceMetric};
// Graph
use heliosdb_graph::{GraphEngine, GraphConfig, TraversalMode};
// Document
use heliosdb_document::{DocumentStore, Collection, DocumentId};
// Time-Series
use heliosdb_storage::timeseries::{TimeSeriesEngine, TimeSeriesPoint};
// Replication
use heliosdb_replication::{ReplicaManager, ReplicaConfig};
// Cache
use heliosdb_unified_cache::{UnifiedCacheManager, CacheConfig};

Storage APIs

The storage layer provides the foundational LSM-tree based storage engine with advanced features including HCC compression, temporal tables, and cloud tiering.

LsmStorageEngine

The core storage engine using Log-Structured Merge-trees.

Constructor

pub async fn new(path: impl AsRef<Path>, config: StorageConfig) -> Result<Self>

Parameters:

  • path: Directory path for storage data
  • config: Storage configuration options

Returns: Result<LsmStorageEngine>

Example:

use heliosdb_storage::{LsmStorageEngine, StorageConfig};
let config = StorageConfig::default();
let engine = LsmStorageEngine::new("/data/helios", config).await?;

get

pub async fn get(&self, key: &Key) -> Result<Option<Value>>

Retrieve a value by key from the storage engine.

Parameters:

  • key: The key to look up

Returns: Result<Option<Value>> - The value if found, None otherwise

Example:

use heliosdb_common::Key;
let key = Key::from("user:123");
if let Some(value) = engine.get(&key).await? {
println!("Found value: {:?}", value);
}

put

pub async fn put(&self, key: Key, value: Value) -> Result<()>

Insert or update a key-value pair.

Parameters:

  • key: The key to store
  • value: The value to store

Returns: Result<()>

Example:

use heliosdb_common::{Key, Value};
let key = Key::from("user:123");
let value = Value::from(b"user data".to_vec());
engine.put(key, value).await?;

delete

pub async fn delete(&self, key: &Key) -> Result<()>

Delete a key-value pair.

Parameters:

  • key: The key to delete

Returns: Result<()>

Example:

let key = Key::from("user:123");
engine.delete(&key).await?;

scan

pub async fn scan(&self, start: &Key, end: &Key) -> Result<Vec<(Key, Value)>>

Scan a range of keys.

Parameters:

  • start: Start of the key range (inclusive)
  • end: End of the key range (exclusive)

Returns: Result<Vec<(Key, Value)>> - All key-value pairs in range

Example:

let start = Key::from("user:000");
let end = Key::from("user:999");
let results = engine.scan(&start, &end).await?;

HCC Compression

Hybrid Columnar Compression for efficient data storage.

HccV2Compressor

pub struct HccV2Compressor {
config: HccV2Config,
}
impl HccV2Compressor {
pub fn new(config: HccV2Config) -> Self
pub fn compress(&self, data: &[ColumnData]) -> Result<Vec<CompressedColumn>>
}

Example:

use heliosdb_storage::{HccV2Compressor, HccV2Config};
let config = HccV2Config::default();
let compressor = HccV2Compressor::new(config);
let columns = vec![/* column data */];
let compressed = compressor.compress(&columns)?;

TimeSeriesEngine

Optimized storage and querying for time-series data.

Constructor

pub async fn new(path: impl AsRef<Path>, strategy: PartitionStrategy) -> Result<Self>

Parameters:

  • path: Storage directory
  • strategy: Partitioning strategy (Hourly, Daily, Monthly, Yearly)

Returns: Result<TimeSeriesEngine>

Example:

use heliosdb_storage::timeseries::{TimeSeriesEngine, PartitionStrategy};
let engine = TimeSeriesEngine::new(
"/data/timeseries",
PartitionStrategy::Daily
).await?;

write_point

pub async fn write_point(
&mut self,
metric: impl Into<String>,
value: f64,
timestamp: Option<u64>
) -> Result<()>

Write a single time-series data point.

Parameters:

  • metric: Name of the metric/series
  • value: Numerical value
  • timestamp: Unix timestamp in milliseconds (None = current time)

Returns: Result<()>

Example:

// Write current temperature
engine.write_point("sensor.temperature", 23.5, None).await?;
// Write historical data
let timestamp = 1635724800000; // 2021-11-01
engine.write_point("sensor.temperature", 21.3, Some(timestamp)).await?;

query_range

pub async fn query_range(
&self,
metric: &str,
start_time: u64,
end_time: u64
) -> Result<Vec<TimeSeriesPoint>>

Query data points within a time range.

Parameters:

  • metric: Metric name to query
  • start_time: Start timestamp (inclusive)
  • end_time: End timestamp (exclusive)

Returns: Result<Vec<TimeSeriesPoint>>

Example:

let start = 1635724800000; // 2021-11-01
let end = 1635811200000; // 2021-11-02
let points = engine.query_range("sensor.temperature", start, end).await?;
for point in points {
println!("{}: {}", point.timestamp, point.value);
}

set_retention_policy

pub fn set_retention_policy(&mut self, policy: RetentionPolicy)

Configure automatic data retention/expiration.

Parameters:

  • policy: Retention policy configuration

Example:

use heliosdb_storage::timeseries::RetentionPolicy;
use std::time::Duration;
// Keep data for 30 days
let policy = RetentionPolicy::new(Duration::from_secs(30 * 24 * 3600));
engine.set_retention_policy(policy);

Temporal Tables

Bi-temporal database support for tracking data history.

TemporalEngine

pub struct TemporalEngine {
// ...
}
impl TemporalEngine {
pub fn new(storage_path: impl AsRef<Path>) -> Result<Self>
pub async fn create_table(&mut self, name: String, columns: Vec<String>) -> Result<()>
pub async fn insert(&mut self, table: &str, row: TemporalRow) -> Result<()>
pub async fn query_as_of(
&self,
table: &str,
timestamp: u64
) -> Result<Vec<TemporalRow>>
}

Example:

use heliosdb_storage::temporal::{TemporalEngine, TemporalRow};
let mut engine = TemporalEngine::new("/data/temporal")?;
// Create table
engine.create_table(
"employees".to_string(),
vec!["id".to_string(), "name".to_string(), "salary".to_string()]
).await?;
// Insert data
let row = TemporalRow::new(vec![
("id", "123"),
("name", "Alice"),
("salary", "75000"),
]);
engine.insert("employees", row).await?;
// Query historical state
let timestamp = 1635724800000;
let history = engine.query_as_of("employees", timestamp).await?;

Vector Database APIs

HeliosDB provides high-performance vector similarity search with multiple indexing algorithms and distance metrics.

VectorIndex Trait

The base trait for all vector index implementations.

pub trait VectorIndex: Send + Sync {
async fn insert(&mut self, id: u64, vector: Vec<f32>) -> Result<()>;
async fn search(&self, query: &[f32], k: usize) -> Result<Vec<(u64, f32)>>;
async fn remove(&mut self, id: u64) -> Result<bool>;
}

HnswIndex

Hierarchical Navigable Small World graph index for fast approximate nearest neighbor search.

Constructor

pub fn new(
dimensions: usize,
m: usize,
ef_construction: usize,
metric: DistanceMetric
) -> Self

Parameters:

  • dimensions: Vector dimensionality
  • m: Number of bi-directional links per node (typically 16)
  • ef_construction: Size of dynamic candidate list during construction (typically 200)
  • metric: Distance metric (L2, Cosine, InnerProduct)

Returns: HnswIndex

Example:

use heliosdb_vector::{HnswIndex, DistanceMetric};
let index = HnswIndex::new(
768, // OpenAI embeddings dimension
16, // M parameter
200, // ef_construction
DistanceMetric::Cosine // Distance metric
);

insert

pub async fn insert(&mut self, id: u64, vector: Vec<f32>) -> Result<()>

Insert a vector into the index.

Parameters:

  • id: Unique identifier for the vector
  • vector: Dense vector of floats

Returns: Result<()>

Example:

let embedding = vec![0.1, 0.2, 0.3, /* ... 768 dimensions */];
index.insert(12345, embedding).await?;
pub async fn search(&self, query: &[f32], k: usize) -> Result<Vec<(u64, f32)>>

Search for the k nearest neighbors to a query vector.

Parameters:

  • query: Query vector
  • k: Number of nearest neighbors to return

Returns: Result<Vec<(u64, f32)>> - Vector of (id, distance) pairs sorted by distance

Example:

let query = vec![0.15, 0.25, 0.35, /* ... */];
let results = index.search(&query, 10).await?;
for (id, distance) in results {
println!("ID: {}, Distance: {}", id, distance);
}

set_ef

pub fn set_ef(&mut self, ef: usize)

Set the ef parameter for search-time quality/speed tradeoff.

Parameters:

  • ef: Size of dynamic candidate list during search (higher = better quality, slower)

Example:

// Higher quality search
index.set_ef(500);
// Faster search
index.set_ef(50);

IvfIndex

Inverted File Index with product quantization for memory-efficient vector search.

Constructor

pub fn new(
dimensions: usize,
num_clusters: usize,
quantization: QuantizationType,
metric: DistanceMetric
) -> Self

Parameters:

  • dimensions: Vector dimensionality
  • num_clusters: Number of clusters/partitions (typically sqrt(N))
  • quantization: None, ProductQuantization, or ScalarQuantization
  • metric: Distance metric

Returns: IvfIndex

Example:

use heliosdb_vector::{IvfIndex, QuantizationType, DistanceMetric};
let index = IvfIndex::new(
768,
256, // 256 clusters
QuantizationType::ProductQuantization,
DistanceMetric::L2
);

train

pub async fn train(&mut self, training_vectors: &[Vec<f32>]) -> Result<()>

Train the index using sample vectors (required before insertion).

Parameters:

  • training_vectors: Sample vectors for clustering

Returns: Result<()>

Example:

let training_data = vec![
vec![0.1, 0.2, /* ... */],
vec![0.3, 0.4, /* ... */],
// ... 10,000+ vectors recommended
];
index.train(&training_data).await?;

HybridSearchEngine

Combines vector search with metadata filtering and text search.

Constructor

pub fn new(config: SearchConfig) -> Result<Self>

Example:

use heliosdb_vector::hybrid::{HybridSearchEngine, HybridQuery, FilterOp};
let engine = HybridSearchEngine::new(config)?;
// Hybrid query with filters
let query = HybridQuery {
vector: Some(vec![0.1, 0.2, /* ... */]),
text: Some("machine learning".to_string()),
filters: vec![
FilterOp::Eq {
field: "category".to_string(),
value: "AI".into(),
},
],
limit: 10,
};
let results = engine.search(query).await?;

Distance Metrics

pub enum DistanceMetric {
L2, // Euclidean distance
Cosine, // Cosine similarity
InnerProduct, // Dot product
Manhattan, // L1 distance
Hamming, // Hamming distance (binary vectors)
Jaccard, // Jaccard similarity (sets)
}

Example:

use heliosdb_vector::distance::{
euclidean_distance,
cosine_distance,
dot_product,
};
let v1 = vec![1.0, 2.0, 3.0];
let v2 = vec![4.0, 5.0, 6.0];
let l2_dist = euclidean_distance(&v1, &v2);
let cos_dist = cosine_distance(&v1, &v2);
let dot = dot_product(&v1, &v2);

Graph Database APIs

HeliosDB provides comprehensive graph querying capabilities including traversal, pathfinding, and pattern matching.

GraphEngine

The main graph database engine.

Constructor

pub async fn new(config: GraphConfig) -> Result<Self>

Parameters:

  • config: Graph configuration

Returns: Result<GraphEngine>

Example:

use heliosdb_graph::{GraphEngine, GraphConfig};
let config = GraphConfig {
max_depth: 100,
max_paths: 1000,
enable_cycle_detection: true,
max_iterations: 10000,
cache_size: 10000,
enable_optimization: true,
};
let engine = GraphEngine::new(config).await?;

register_graph

pub async fn register_graph(&self, name: String) -> Result<()>

Create a new named graph.

Parameters:

  • name: Unique graph identifier

Returns: Result<()>

Example:

engine.register_graph("social_network".to_string()).await?;

add_node

pub async fn add_node(&self, graph: &str, node: Node) -> Result<()>

Add a node to the graph.

Parameters:

  • graph: Graph name
  • node: Node with id, label, and properties

Returns: Result<()>

Example:

use heliosdb_graph::Node;
use std::collections::HashMap;
let mut properties = HashMap::new();
properties.insert("name".to_string(), json!("Alice"));
properties.insert("age".to_string(), json!(30));
let node = Node {
id: 1,
label: "Person".to_string(),
properties,
};
engine.add_node("social_network", node).await?;

add_edge

pub async fn add_edge(&self, graph: &str, edge: Edge) -> Result<()>

Add an edge to the graph.

Parameters:

  • graph: Graph name
  • edge: Edge with id, source, target, label, weight, and properties

Returns: Result<()>

Example:

use heliosdb_graph::Edge;
let edge = Edge {
id: 1,
source: 1,
target: 2,
label: "KNOWS".to_string(),
weight: 1.0,
properties: HashMap::new(),
};
engine.add_edge("social_network", edge).await?;

traverse

pub async fn traverse(
&self,
start: NodeId,
mode: TraversalMode,
max_depth: usize
) -> Result<Vec<NodeId>>

Traverse the graph from a starting node.

Parameters:

  • start: Starting node ID
  • mode: BreadthFirst or DepthFirst
  • max_depth: Maximum traversal depth

Returns: Result<Vec<NodeId>> - Visited node IDs in traversal order

Example:

use heliosdb_graph::TraversalMode;
// Breadth-first traversal
let nodes = engine.traverse(1, TraversalMode::BreadthFirst, 5).await?;
// Depth-first traversal
let nodes = engine.traverse(1, TraversalMode::DepthFirst, 10).await?;

shortest_path

pub async fn shortest_path(
&self,
graph: &str,
source: NodeId,
target: NodeId
) -> Result<Option<Path>>

Find the shortest path between two nodes using Dijkstra’s algorithm.

Parameters:

  • graph: Graph name
  • source: Source node ID
  • target: Target node ID

Returns: Result<Option<Path>> - Path with nodes, edges, and total cost

Example:

if let Some(path) = engine.shortest_path("social_network", 1, 100).await? {
println!("Path length: {}", path.len());
println!("Total cost: {}", path.cost);
println!("Nodes: {:?}", path.nodes);
}

all_paths

pub async fn all_paths(
&self,
graph: &str,
source: NodeId,
target: NodeId,
max_length: usize
) -> Result<Vec<Path>>

Find all paths between two nodes up to a maximum length.

Parameters:

  • graph: Graph name
  • source: Source node ID
  • target: Target node ID
  • max_length: Maximum path length

Returns: Result<Vec<Path>>

Example:

let paths = engine.all_paths("social_network", 1, 100, 5).await?;
println!("Found {} paths", paths.len());

detect_cycles

pub async fn detect_cycles(&self, graph: &str) -> Result<Vec<Vec<NodeId>>>

Detect all cycles in the graph.

Parameters:

  • graph: Graph name

Returns: Result<Vec<Vec<NodeId>>> - List of cycles (each cycle is a list of node IDs)

Example:

let cycles = engine.detect_cycles("social_network").await?;
for cycle in cycles {
println!("Cycle: {:?}", cycle);
}

connected_components

pub async fn connected_components(&self, graph: &str) -> Result<Vec<Vec<NodeId>>>

Find strongly connected components.

Parameters:

  • graph: Graph name

Returns: Result<Vec<Vec<NodeId>>> - List of components

Example:

let components = engine.connected_components("social_network").await?;
println!("Found {} components", components.len());

Document Store APIs

JSON document storage with schema validation, indexing, and MongoDB-compatible queries.

DocumentStore

High-level API for document operations.

Constructor

pub fn new(path: impl AsRef<Path>) -> Result<Self>

Parameters:

  • path: Storage directory

Returns: Result<DocumentStore>

Example:

use heliosdb_document::DocumentStore;
let store = DocumentStore::new("/data/documents")?;

insert

pub fn insert(
&self,
collection: &Collection,
id: &DocumentId,
data: serde_json::Value
) -> Result<Document>

Insert a document into a collection.

Parameters:

  • collection: Collection name
  • id: Document ID
  • data: JSON document data

Returns: Result<Document>

Example:

use heliosdb_document::{Collection, DocumentId};
use serde_json::json;
let collection = Collection::new("users");
let id = DocumentId::new("user123");
let data = json!({
"name": "Alice",
"email": "alice@example.com",
"age": 30,
"tags": ["active", "premium"]
});
let doc = store.insert(&collection, &id, data)?;

get

pub fn get(&self, collection: &Collection, id: &DocumentId) -> Result<Option<Document>>

Retrieve a document by ID.

Parameters:

  • collection: Collection name
  • id: Document ID

Returns: Result<Option<Document>>

Example:

let collection = Collection::new("users");
let id = DocumentId::new("user123");
if let Some(doc) = store.get(&collection, &id)? {
println!("Document: {:?}", doc.data);
}

update

pub fn update(
&self,
collection: &Collection,
id: &DocumentId,
update: serde_json::Value
) -> Result<Option<Document>>

Update a document.

Parameters:

  • collection: Collection name
  • id: Document ID
  • update: Updated fields

Returns: Result<Option<Document>>

Example:

let update = json!({
"email": "alice.new@example.com",
"age": 31
});
if let Some(doc) = store.update(&collection, &id, update)? {
println!("Updated: {:?}", doc.data);
}

delete

pub fn delete(&self, collection: &Collection, id: &DocumentId) -> Result<bool>

Delete a document.

Parameters:

  • collection: Collection name
  • id: Document ID

Returns: Result<bool> - true if deleted, false if not found

Example:

let deleted = store.delete(&collection, &id)?;
if deleted {
println!("Document deleted");
}

find

pub fn find(&self, collection: &Collection, filter: Filter) -> Result<Vec<Document>>

Query documents with a filter.

Parameters:

  • collection: Collection name
  • filter: Query filter

Returns: Result<Vec<Document>>

Example:

use heliosdb_document::{Filter, FilterOp};
// Find all users older than 25
let filter = Filter {
op: FilterOp::Gt {
field: "age".to_string(),
value: json!(25),
},
};
let docs = store.find(&collection, filter)?;
println!("Found {} documents", docs.len());

aggregate

pub fn aggregate(
&self,
collection: &Collection,
pipeline: Vec<AggregationStage>
) -> Result<Vec<serde_json::Value>>

Execute an aggregation pipeline.

Parameters:

  • collection: Collection name
  • pipeline: Aggregation stages

Returns: Result<Vec<serde_json::Value>>

Example:

use heliosdb_document::AggregationStage;
let pipeline = vec![
AggregationStage::Match {
filter: Filter {
op: FilterOp::Gte {
field: "age".to_string(),
value: json!(18),
},
},
},
AggregationStage::Group {
by: "$age".to_string(),
accumulator: json!({
"count": { "$sum": 1 }
}),
},
];
let results = store.aggregate(&collection, pipeline)?;

register_schema

pub fn register_schema(
&self,
collection: &str,
schema: serde_json::Value
) -> Result<()>

Register a JSON Schema for validation.

Parameters:

  • collection: Collection name
  • schema: JSON Schema definition

Returns: Result<()>

Example:

use heliosdb_document::{SchemaBuilder, PropertyBuilder};
let schema = SchemaBuilder::new()
.property("name", PropertyBuilder::string()
.min_length(1)
.max_length(100)
.build())
.property("email", PropertyBuilder::string()
.pattern(r"^[^\s@]+@[^\s@]+\.[^\s@]+$")
.build())
.property("age", PropertyBuilder::integer()
.minimum(0)
.maximum(150)
.build())
.required(vec!["name", "email"])
.build();
store.register_schema("users", schema)?;

watch

pub fn watch(&self, collection: Collection) -> Result<ChangeStream>

Watch a collection for real-time changes.

Parameters:

  • collection: Collection to watch

Returns: Result<ChangeStream>

Example:

let collection = Collection::new("users");
let mut stream = store.watch(collection)?;
tokio::spawn(async move {
while let Some(event) = stream.next().await {
match event {
Ok(change) => println!("Change: {:?}", change.event_type),
Err(e) => eprintln!("Error: {}", e),
}
}
});

Time-Series APIs

Specialized APIs for time-series data with retention policies, downsampling, and forecasting.

TimeSeriesQueryEngine

Advanced time-series query engine with windowing and aggregations.

pub struct TimeSeriesQueryEngine {
// ...
}
impl TimeSeriesQueryEngine {
pub fn new(storage: Arc<TimeSeriesEngine>) -> Self
pub async fn query_with_window(
&self,
metric: &str,
start: u64,
end: u64,
window: Window
) -> Result<Vec<WindowedResult>>
}

Example:

use heliosdb_storage::timeseries::{
TimeSeriesQueryEngine,
Window,
WindowType,
};
use std::time::Duration;
let query_engine = TimeSeriesQueryEngine::new(engine_arc);
// Query with 5-minute tumbling windows
let window = Window {
window_type: WindowType::Tumbling,
size: Duration::from_secs(300),
aggregations: vec!["avg", "min", "max"],
};
let results = query_engine.query_with_window(
"cpu.usage",
start_time,
end_time,
window
).await?;
for result in results {
println!("Window: {} - Avg: {}", result.window_start, result.avg);
}

DownsamplingEngine

Reduce data granularity while preserving trends.

pub struct DownsamplingEngine {
// ...
}
impl DownsamplingEngine {
pub fn new(config: DownsamplingConfig) -> Self
pub async fn downsample(
&self,
points: Vec<TimeSeriesPoint>,
target_count: usize
) -> Result<Vec<TimeSeriesPoint>>
}

Example:

use heliosdb_storage::timeseries::{
DownsamplingEngine,
DownsamplingConfig,
AggregationFunction,
};
use std::time::Duration;
let config = DownsamplingConfig {
interval: Duration::from_secs(3600), // 1 hour
function: AggregationFunction::Avg,
};
let downsampler = DownsamplingEngine::new(config);
// Reduce 1 million points to 1000 points
let downsampled = downsampler.downsample(points, 1000).await?;

TagIndex

Multi-dimensional indexing for time-series tags.

pub struct TagIndex {
// ...
}
impl TagIndex {
pub fn new() -> Self
pub async fn insert_series(
&mut self,
series_id: u64,
tags: HashMap<String, String>
) -> Result<()>
pub async fn query(&self, query: TagQuery) -> Result<Vec<u64>>
}

Example:

use heliosdb_storage::timeseries::{TagIndex, TagQuery};
let mut index = TagIndex::new();
// Insert series with tags
let mut tags = HashMap::new();
tags.insert("host".to_string(), "server01".to_string());
tags.insert("region".to_string(), "us-west".to_string());
tags.insert("env".to_string(), "production".to_string());
index.insert_series(123, tags).await?;
// Query by tags
let query = TagQuery::and(vec![
TagQuery::equals("host", "server01"),
TagQuery::equals("region", "us-west"),
]);
let series_ids = index.query(query).await?;

Replication APIs

Read replica support with automatic failover and load balancing.

ReplicaManager

Manages read replicas and distributes read traffic.

Constructor

pub async fn new(config: ReplicaConfig) -> Result<Self>

Parameters:

  • config: Replica configuration

Returns: Result<ReplicaManager>

Example:

use heliosdb_replication::{ReplicaManager, ReplicaConfig, ReplicationMode};
use std::time::Duration;
let config = ReplicaConfig {
primary_address: "127.0.0.1:5432".to_string(),
replica_addresses: vec![
"127.0.0.1:5433".to_string(),
"127.0.0.1:5434".to_string(),
],
replication_mode: ReplicationMode::Async,
lag_threshold_ms: 1000,
health_check_interval: Duration::from_secs(5),
enable_failover: true,
session_affinity: false,
};
let manager = ReplicaManager::new(config).await?;

get_replica_for_read

pub async fn get_replica_for_read(
&self,
strategy: LoadBalancingStrategy
) -> Result<String>

Get a replica address for read operations.

Parameters:

  • strategy: Load balancing strategy

Returns: Result<String> - Replica address

Example:

use heliosdb_replication::LoadBalancingStrategy;
// Round-robin
let replica = manager.get_replica_for_read(
LoadBalancingStrategy::RoundRobin
).await?;
// Least connections
let replica = manager.get_replica_for_read(
LoadBalancingStrategy::LeastConnections
).await?;
// Lowest latency
let replica = manager.get_replica_for_read(
LoadBalancingStrategy::LatencyBased
).await?;

get_replication_stats

pub async fn get_replication_stats(&self) -> Result<Vec<ReplicationStats>>

Get replication lag and health statistics.

Returns: Result<Vec<ReplicationStats>>

Example:

let stats = manager.get_replication_stats().await?;
for stat in stats {
println!("Replica: {}", stat.replica_address);
println!(" Lag: {}ms", stat.lag_ms);
println!(" Status: {:?}", stat.status);
println!(" Bytes replicated: {}", stat.bytes_replicated);
}

WalSender

PostgreSQL-compatible WAL streaming for physical replication.

pub struct WalSender {
// ...
}
impl WalSender {
pub fn new(config: WalSenderConfig) -> Self
pub async fn create_replication_slot(
&self,
slot_name: String,
slot_type: SlotType,
output_plugin: Option<String>,
database: Option<String>
) -> Result<()>
pub async fn start_replication(
&self,
slot_name: String,
start_lsn: u64
) -> Result<()>
}

Example:

use heliosdb_replication::wal_sender::{WalSender, WalSenderConfig, SlotType};
let sender = WalSender::new(WalSenderConfig::default());
// Create physical replication slot
sender.create_replication_slot(
"replica_slot".to_string(),
SlotType::Physical,
None,
None
).await?;
// Start streaming from LSN
sender.start_replication("replica_slot".to_string(), 0).await?;

Cache APIs

Unified caching system with ML-based eviction and tiered storage.

UnifiedCacheManager

Comprehensive caching with multiple eviction strategies and compression.

Constructor

pub fn new(config: CacheConfig) -> Self

Parameters:

  • config: Cache configuration

Returns: UnifiedCacheManager

Example:

use heliosdb_unified_cache::{
UnifiedCacheManager,
CacheConfig,
EvictionPolicyType,
CompressionType,
};
let config = CacheConfig {
max_size: 1024 * 1024 * 1024, // 1GB
eviction_policy: EvictionPolicyType::Hybrid,
enable_ml: true,
enable_compression: true,
compression_type: CompressionType::Zstd,
compression_threshold: 1024,
enable_tiered: true,
l1_size: 256 * 1024 * 1024,
l2_size: Some(1024 * 1024 * 1024),
..Default::default()
};
let cache = UnifiedCacheManager::new(config);

insert

pub async fn insert(
&self,
key: CacheKey,
value: Vec<u8>,
ttl: Option<Duration>
) -> Result<()>

Insert a value into the cache.

Parameters:

  • key: Cache key
  • value: Value to cache (will be compressed if enabled)
  • ttl: Optional time-to-live

Returns: Result<()>

Example:

use heliosdb_unified_cache::CacheKey;
use std::time::Duration;
let key = CacheKey::new("user:123");
let value = vec![1, 2, 3, 4, 5];
// Insert with 1-hour TTL
cache.insert(key, value, Some(Duration::from_secs(3600))).await?;

get

pub async fn get(&self, key: &CacheKey) -> Result<Option<Vec<u8>>>

Retrieve a value from the cache.

Parameters:

  • key: Cache key

Returns: Result<Option<Vec<u8>>> - Decompressed value if found

Example:

let key = CacheKey::new("user:123");
if let Some(value) = cache.get(&key).await? {
println!("Cache hit! Value: {:?}", value);
} else {
println!("Cache miss");
}

invalidate

pub async fn invalidate(&self, key: &CacheKey) -> Result<bool>

Remove a value from the cache.

Parameters:

  • key: Cache key

Returns: Result<bool> - true if removed

Example:

let removed = cache.invalidate(&CacheKey::new("user:123")).await?;

get_stats

pub fn get_stats(&self) -> CacheStats

Get cache performance statistics.

Returns: CacheStats

Example:

let stats = cache.get_stats();
println!("Hit rate: {:.2}%", stats.hit_rate() * 100.0);
println!("Hits: {}", stats.hits);
println!("Misses: {}", stats.misses);
println!("Evictions: {}", stats.evictions);
println!("Current size: {} bytes", stats.current_size);
println!("Entries: {}", stats.current_entries);

Transaction APIs

ACID transactions with multiple isolation levels.

TransactionParticipant

Local transaction support with 2PC coordination.

pub struct TransactionParticipant {
// ...
}
impl TransactionParticipant {
pub fn new(storage: Arc<LsmStorageEngine>) -> Self
pub async fn begin_transaction(
&self,
isolation_level: IsolationLevel
) -> Result<TransactionId>
pub async fn read(
&self,
txn_id: TransactionId,
key: &Key
) -> Result<Option<Value>>
pub async fn write(
&self,
txn_id: TransactionId,
key: Key,
value: Value
) -> Result<()>
pub async fn commit(&self, txn_id: TransactionId) -> Result<()>
pub async fn rollback(&self, txn_id: TransactionId) -> Result<()>
}

Example:

use heliosdb_storage::{TransactionParticipant, IsolationLevel};
let participant = TransactionParticipant::new(storage_arc);
// Begin transaction
let txn_id = participant.begin_transaction(
IsolationLevel::Serializable
).await?;
// Perform operations
let key = Key::from("account:123");
let current = participant.read(txn_id, &key).await?;
let new_value = Value::from(b"updated".to_vec());
participant.write(txn_id, key, new_value).await?;
// Commit or rollback
match participant.commit(txn_id).await {
Ok(_) => println!("Transaction committed"),
Err(e) => {
participant.rollback(txn_id).await?;
eprintln!("Transaction failed: {}", e);
}
}

XaParticipant

Distributed transaction support with XA protocol.

pub struct XaParticipant {
// ...
}
impl XaParticipant {
pub fn new(config: XaParticipantConfig, storage: Arc<LsmStorageEngine>) -> Self
pub async fn xa_start(&mut self, xid: String) -> Result<LocalTransactionId>
pub async fn xa_end(&mut self, local_txn_id: LocalTransactionId) -> Result<()>
pub async fn xa_prepare(&mut self, local_txn_id: LocalTransactionId) -> Result<()>
pub async fn xa_commit(&mut self, local_txn_id: LocalTransactionId) -> Result<()>
pub async fn xa_rollback(&mut self, local_txn_id: LocalTransactionId) -> Result<()>
}

Example:

use heliosdb_storage::{XaParticipant, XaParticipantConfig};
let config = XaParticipantConfig::default();
let participant = XaParticipant::new(config, storage_arc);
// Two-phase commit
let xid = "global-txn-123".to_string();
// Phase 1: Start and execute
let local_id = participant.xa_start(xid.clone()).await?;
// ... perform operations ...
participant.xa_end(local_id).await?;
// Phase 2: Prepare
participant.xa_prepare(local_id).await?;
// Phase 3: Commit or rollback
match participant.xa_commit(local_id).await {
Ok(_) => println!("XA transaction committed"),
Err(e) => {
participant.xa_rollback(local_id).await?;
eprintln!("XA transaction rolled back: {}", e);
}
}

Protocol Compatibility

HeliosDB provides wire-protocol compatibility with multiple database systems, allowing you to use existing client libraries.

PostgreSQL Wire Protocol

Connect using any PostgreSQL client (port 5432):

Terminal window
psql -h localhost -p 5432 -U helios -d mydb
import psycopg2
conn = psycopg2.connect(
host="localhost",
port=5432,
database="mydb",
user="helios",
password="password"
)
cursor = conn.cursor()
cursor.execute("SELECT * FROM orders LIMIT 10")
results = cursor.fetchall()

MongoDB Wire Protocol

Connect using MongoDB drivers (port 27017):

const { MongoClient } = require('mongodb');
const client = new MongoClient('mongodb://localhost:27017');
await client.connect();
const db = client.db('mydb');
const collection = db.collection('orders');
const results = await collection.find({ status: 'pending' }).toArray();

Redis Protocol (RESP3)

Connect using Redis clients (port 6379):

Terminal window
redis-cli -h localhost -p 6379
import redis
r = redis.Redis(host='localhost', port=6379)
r.set('key1', 'value1')
value = r.get('key1')

Cassandra CQL

Connect using Cassandra drivers (port 9042):

Terminal window
cqlsh localhost 9042
from cassandra.cluster import Cluster
cluster = Cluster(['localhost'])
session = cluster.connect('mykeyspace')
rows = session.execute('SELECT * FROM orders WHERE user_id = 100')
for row in rows:
print(row)

Error Handling

All HeliosDB APIs return Result<T> types with specific error enums.

Common Error Types

// Storage errors
pub enum HeliosError {
Io(std::io::Error),
Serialization(String),
Corruption(String),
KeyNotFound(String),
TransactionConflict,
// ...
}
// Vector errors
pub enum VectorError {
DimensionMismatch { expected: usize, got: usize },
InvalidParameter(String),
IndexNotTrained,
// ...
}
// Graph errors
pub enum GraphError {
NodeNotFound(NodeId),
EdgeNotFound(EdgeId),
CycleDetected,
MaxDepthExceeded(usize),
PathNotFound(NodeId, NodeId),
// ...
}
// Document errors
pub enum DocumentError {
SchemaValidation(String),
InvalidQuery(String),
CollectionNotFound(String),
// ...
}
// Replication errors
pub enum ReplicationError {
NoHealthyReplicas,
ReplicationLagExceeded { lag_ms: u64, threshold_ms: u64 },
ConnectionFailed(String),
// ...
}

Error Handling Patterns

use heliosdb_common::HeliosError;
// Pattern 1: Match on specific errors
match engine.get(&key).await {
Ok(Some(value)) => println!("Found: {:?}", value),
Ok(None) => println!("Not found"),
Err(HeliosError::Io(e)) => eprintln!("IO error: {}", e),
Err(HeliosError::Corruption(msg)) => eprintln!("Corruption: {}", msg),
Err(e) => eprintln!("Other error: {}", e),
}
// Pattern 2: Use ? operator with anyhow
use anyhow::Result;
async fn my_function() -> Result<()> {
let value = engine.get(&key).await?;
// ...
Ok(())
}
// Pattern 3: Map errors
let result = engine.get(&key).await
.map_err(|e| format!("Failed to get key: {}", e))?;

Best Practices

1. Connection Management

// Use Arc for shared access
use std::sync::Arc;
let engine = Arc::new(LsmStorageEngine::new("/data", config).await?);
// Clone Arc for multiple tasks
let engine_clone = engine.clone();
tokio::spawn(async move {
engine_clone.get(&key).await
});

2. Batch Operations

// Bad: Individual operations
for i in 0..1000 {
engine.put(Key::from(format!("key{}", i)), value.clone()).await?;
}
// Good: Batch writes
let mut batch = Vec::new();
for i in 0..1000 {
batch.push((Key::from(format!("key{}", i)), value.clone()));
}
// Use batch write API when available

3. Resource Cleanup

// Always use RAII or explicit cleanup
{
let cache = UnifiedCacheManager::new(config);
// ... use cache ...
} // Automatically cleaned up
// Or explicit
let cache = UnifiedCacheManager::new(config);
// ... use cache ...
drop(cache);

4. Configuration Tuning

// Production settings
let config = StorageConfig {
memtable_size: 256 * 1024 * 1024, // 256MB
block_cache_size: 1024 * 1024 * 1024, // 1GB
compaction_threads: 4,
enable_compression: true,
max_open_files: 10000,
..Default::default()
};

5. Monitoring

// Regular metrics collection
tokio::spawn(async move {
let mut interval = tokio::time::interval(Duration::from_secs(60));
loop {
interval.tick().await;
let stats = cache.get_stats();
log::info!("Cache hit rate: {:.2}%", stats.hit_rate() * 100.0);
let repl_stats = manager.get_replication_stats().await?;
for stat in repl_stats {
log::info!("Replica {} lag: {}ms", stat.replica_address, stat.lag_ms);
}
}
});

6. Error Recovery

// Implement retry logic for transient failures
use tokio::time::{sleep, Duration};
async fn retry_operation<F, T>(
mut op: F,
max_retries: u32
) -> Result<T>
where
F: FnMut() -> Result<T>,
{
let mut attempts = 0;
loop {
match op() {
Ok(result) => return Ok(result),
Err(e) if attempts < max_retries => {
attempts += 1;
sleep(Duration::from_millis(100 * attempts as u64)).await;
}
Err(e) => return Err(e),
}
}
}

Conclusion

This API reference covers the core functionality of HeliosDB 6.0. For additional details:

  • See individual package documentation: cargo doc --open
  • Review examples in each package’s examples/ directory
  • Consult the User Guide for conceptual overviews
  • Check Quick Reference for common operations

For support, visit: https://github.com/your-org/heliosdb/issues


Advanced APIs

Self-Healing Database

The self-healing module provides automatic detection and repair of database issues.

SelfHealingManager

use heliosdb_self_healing::{SelfHealingManager, SelfHealingConfig};
pub struct SelfHealingManager {
// ...
}
impl SelfHealingManager {
pub fn new(config: SelfHealingConfig) -> Self
pub async fn start(&mut self) -> Result<()>
pub async fn check_health(&self) -> Result<HealthStatus>
pub async fn trigger_repair(&self, issue: Issue) -> Result<RepairResult>
}

Example:

use heliosdb_self_healing::{SelfHealingManager, SelfHealingConfig};
let config = SelfHealingConfig {
check_interval: Duration::from_secs(60),
auto_repair: true,
max_repair_attempts: 3,
enable_ml_predictions: true,
};
let mut manager = SelfHealingManager::new(config);
manager.start().await?;
// Check health status
let status = manager.check_health().await?;
if !status.is_healthy {
println!("Issues detected: {:?}", status.issues);
}

Materialized Views

Intelligent materialized views with automatic refresh and incremental updates.

MaterializedViewEngine

use heliosdb_materialized_views::{MaterializedViewEngine, ViewDefinition};
pub struct MaterializedViewEngine {
// ...
}
impl MaterializedViewEngine {
pub async fn new(storage: Arc<LsmStorageEngine>) -> Result<Self>
pub async fn create_view(&mut self, definition: ViewDefinition) -> Result<()>
pub async fn refresh_view(&self, view_name: &str) -> Result<()>
pub async fn query_view(&self, view_name: &str) -> Result<Vec<Row>>
}

Example:

use heliosdb_materialized_views::{MaterializedViewEngine, ViewDefinition};
let engine = MaterializedViewEngine::new(storage_arc).await?;
// Create materialized view
let definition = ViewDefinition {
name: "user_stats".to_string(),
query: "SELECT age, COUNT(*) as count FROM users GROUP BY age".to_string(),
refresh_interval: Some(Duration::from_secs(300)),
incremental: true,
};
engine.create_view(definition).await?;
// Query view (much faster than running the query)
let results = engine.query_view("user_stats").await?;

ETL Pipeline

Automated ETL with AI-powered transformations and data quality checks.

IngestionPipeline

use heliosdb_etl::{IngestionPipeline, IngestionConfig, TransformationRule};
pub struct IngestionPipeline {
// ...
}
impl IngestionPipeline {
pub fn new(config: IngestionConfig) -> Self
pub async fn ingest(&mut self, source: DataSource) -> Result<IngestionStats>
pub fn add_transformation(&mut self, rule: TransformationRule)
pub async fn start_streaming(&mut self) -> Result<()>
}

Example:

use heliosdb_etl::{
IngestionPipeline, IngestionConfig, DataSource,
TransformationRule, ValidationRule,
};
let config = IngestionConfig {
batch_size: 1000,
enable_cdc: true,
enable_quality_checks: true,
parallelism: 4,
};
let mut pipeline = IngestionPipeline::new(config);
// Add transformation rules
pipeline.add_transformation(TransformationRule::RenameColumn {
from: "old_name".to_string(),
to: "new_name".to_string(),
});
pipeline.add_transformation(TransformationRule::FilterRows {
condition: "age >= 18".to_string(),
});
// Ingest data
let source = DataSource::Csv {
path: "/data/input.csv".to_string(),
delimiter: ',',
has_header: true,
};
let stats = pipeline.ingest(source).await?;
println!("Ingested {} rows in {:.2}s",
stats.rows_processed,
stats.duration_secs
);

Multi-Master Replication

CRDT-based multi-master replication with conflict resolution.

MultiMasterReplicator

use heliosdb_multi_master::{MultiMasterReplicator, ReplicatorConfig, CrdtType};
pub struct MultiMasterReplicator {
// ...
}
impl MultiMasterReplicator {
pub fn new(config: ReplicatorConfig) -> Self
pub async fn add_master(&mut self, node_id: String, address: String) -> Result<()>
pub async fn write(&self, key: Key, value: Value, crdt_type: CrdtType) -> Result<()>
pub async fn read(&self, key: &Key) -> Result<Option<Value>>
pub async fn sync(&self) -> Result<SyncStats>
}

Example:

use heliosdb_multi_master::{
MultiMasterReplicator, ReplicatorConfig, CrdtType,
};
let config = ReplicatorConfig {
node_id: "node1".to_string(),
sync_interval: Duration::from_secs(10),
conflict_resolution: ConflictResolution::LastWriteWins,
};
let mut replicator = MultiMasterReplicator::new(config);
// Add other master nodes
replicator.add_master(
"node2".to_string(),
"192.168.1.2:5000".to_string()
).await?;
// Write using CRDT
replicator.write(
Key::from("counter:1"),
Value::from(vec![0, 0, 0, 1]), // counter value: 1
CrdtType::Counter
).await?;
// Sync with other masters
let stats = replicator.sync().await?;
println!("Synced {} operations", stats.operations_synced);

Distributed Query Optimizer

AI-powered query optimization for distributed execution.

DistributedQueryOptimizer

use heliosdb_distributed_optimizer::{
DistributedQueryOptimizer, QueryPlan, ExecutionStats,
};
pub struct DistributedQueryOptimizer {
// ...
}
impl DistributedQueryOptimizer {
pub fn new(config: OptimizerConfig) -> Self
pub async fn optimize(&self, query: &str) -> Result<QueryPlan>
pub async fn execute(&self, plan: QueryPlan) -> Result<Vec<Row>>
pub async fn explain(&self, query: &str) -> Result<String>
}

Example:

use heliosdb_distributed_optimizer::{
DistributedQueryOptimizer, OptimizerConfig,
};
let config = OptimizerConfig {
enable_ai: true,
cost_threshold: 1000.0,
max_parallel_shards: 16,
};
let optimizer = DistributedQueryOptimizer::new(config);
// Optimize query
let query = "SELECT * FROM users JOIN orders ON users.id = orders.user_id";
let plan = optimizer.optimize(query).await?;
println!("Execution plan:");
println!("{}", optimizer.explain(query).await?);
// Execute optimized plan
let results = optimizer.execute(plan).await?;

Global Distributed Cache

Multi-region cache with intelligent prefetching and hotspot detection.

GlobalCacheCoordinator

use heliosdb_global_cache::{
GlobalCacheCoordinator, CacheTopology, ReplicationStrategy,
};
pub struct GlobalCacheCoordinator {
// ...
}
impl GlobalCacheCoordinator {
pub async fn new(topology: CacheTopology) -> Result<Self>
pub async fn get(&self, key: &CacheKey) -> Result<Option<Vec<u8>>>
pub async fn set(
&self,
key: CacheKey,
value: Vec<u8>,
strategy: ReplicationStrategy
) -> Result<()>
pub async fn detect_hotspots(&self) -> Result<Vec<Hotspot>>
pub async fn prefetch(&self, patterns: Vec<AccessPattern>) -> Result<()>
}

Example:

use heliosdb_global_cache::{
GlobalCacheCoordinator, CacheTopology, ReplicationStrategy, Region,
};
let topology = CacheTopology {
regions: vec![
Region { name: "us-west".to_string(), nodes: 3 },
Region { name: "us-east".to_string(), nodes: 3 },
Region { name: "eu-west".to_string(), nodes: 3 },
],
replication_factor: 2,
};
let coordinator = GlobalCacheCoordinator::new(topology).await?;
// Set with regional replication
coordinator.set(
CacheKey::new("user:123"),
vec![1, 2, 3, 4],
ReplicationStrategy::Regional
).await?;
// Detect and optimize for hotspots
let hotspots = coordinator.detect_hotspots().await?;
for hotspot in hotspots {
println!("Hotspot: {} (access count: {})",
hotspot.key, hotspot.access_count
);
}

Deadlock Detection

Distributed deadlock detection with predictive capabilities.

DeadlockDetector

use heliosdb_deadlock_detection::{DeadlockDetector, DetectorConfig};
pub struct DeadlockDetector {
// ...
}
impl DeadlockDetector {
pub fn new(config: DetectorConfig) -> Self
pub async fn start_monitoring(&mut self) -> Result<()>
pub async fn detect_deadlocks(&self) -> Result<Vec<Deadlock>>
pub async fn resolve_deadlock(&self, deadlock: Deadlock) -> Result<()>
pub async fn predict_deadlocks(&self) -> Result<Vec<PotentialDeadlock>>
}

Example:

use heliosdb_deadlock_detection::{DeadlockDetector, DetectorConfig};
let config = DetectorConfig {
check_interval: Duration::from_secs(5),
enable_prediction: true,
auto_resolve: true,
resolution_strategy: ResolutionStrategy::VictimSelection,
};
let mut detector = DeadlockDetector::new(config);
detector.start_monitoring().await?;
// Detect deadlocks
let deadlocks = detector.detect_deadlocks().await?;
if !deadlocks.is_empty() {
println!("Found {} deadlocks", deadlocks.len());
for deadlock in deadlocks {
detector.resolve_deadlock(deadlock).await?;
}
}
// Predict potential deadlocks
let predictions = detector.predict_deadlocks().await?;
for prediction in predictions {
println!("Potential deadlock: probability={:.2}",
prediction.probability
);
}

Quantum Computing Integration

Quantum algorithms for optimization problems.

QuantumOptimizer

use heliosdb_quantum::{QuantumOptimizer, QuantumCircuit, QuantumConfig};
pub struct QuantumOptimizer {
// ...
}
impl QuantumOptimizer {
pub fn new(config: QuantumConfig) -> Result<Self>
pub async fn optimize_query(&self, query: &str) -> Result<OptimizedPlan>
pub async fn solve_tsp(&self, cities: Vec<City>) -> Result<Route>
pub fn create_circuit(&self, gates: Vec<Gate>) -> Result<QuantumCircuit>
pub async fn execute_circuit(&self, circuit: QuantumCircuit) -> Result<Vec<f64>>
}

Example:

use heliosdb_quantum::{QuantumOptimizer, QuantumConfig, Gate};
let config = QuantumConfig {
simulator_type: SimulatorType::StateVector,
num_qubits: 10,
optimization_level: 3,
};
let optimizer = QuantumOptimizer::new(config)?;
// Solve traveling salesman problem
let cities = vec![
City { x: 0.0, y: 0.0 },
City { x: 1.0, y: 2.0 },
City { x: 3.0, y: 1.0 },
// ... more cities
];
let route = optimizer.solve_tsp(cities).await?;
println!("Optimal route distance: {:.2}", route.total_distance);

Neuromorphic Computing

Spiking neural networks for pattern recognition and anomaly detection.

NeuromorphicEngine

use heliosdb_neuromorphic::{
NeuromorphicEngine, SpikingNeuralNetwork, NeuronConfig,
};
pub struct NeuromorphicEngine {
// ...
}
impl NeuromorphicEngine {
pub fn new(config: NeuronConfig) -> Self
pub async fn train(&mut self, data: Vec<Sample>) -> Result<TrainingStats>
pub async fn detect_anomaly(&self, input: Vec<f64>) -> Result<AnomalyScore>
pub async fn recognize_pattern(&self, pattern: Vec<u8>) -> Result<ClassificationResult>
}

Example:

use heliosdb_neuromorphic::{
NeuromorphicEngine, NeuronConfig, Sample,
};
let config = NeuronConfig {
num_neurons: 1000,
connection_probability: 0.1,
learning_rate: 0.01,
threshold: 1.0,
};
let mut engine = NeuromorphicEngine::new(config);
// Train on time-series data
let training_data: Vec<Sample> = load_training_data();
let stats = engine.train(training_data).await?;
// Detect anomalies in real-time
let input = vec![0.5, 0.6, 0.9, 1.2, 0.8]; // unusual spike
let score = engine.detect_anomaly(input).await?;
if score.is_anomaly {
println!("Anomaly detected! Score: {:.2}", score.score);
}

Energy-Aware Optimization

Power management and carbon footprint optimization.

EnergyOptimizer

use heliosdb_energy_optimizer::{
EnergyOptimizer, EnergyConfig, PowerGovernor,
};
pub struct EnergyOptimizer {
// ...
}
impl EnergyOptimizer {
pub fn new(config: EnergyConfig) -> Self
pub async fn optimize_workload(&self, workload: Workload) -> Result<OptimizedWorkload>
pub async fn get_power_usage(&self) -> Result<PowerMetrics>
pub async fn calculate_carbon_footprint(&self) -> Result<CarbonMetrics>
pub fn set_power_mode(&mut self, mode: PowerMode) -> Result<()>
}

Example:

use heliosdb_energy_optimizer::{
EnergyOptimizer, EnergyConfig, PowerMode,
};
let config = EnergyConfig {
target_power_watts: 150.0,
enable_carbon_tracking: true,
prefer_renewable: true,
dynamic_frequency_scaling: true,
};
let mut optimizer = EnergyOptimizer::new(config);
// Set low-power mode during off-peak hours
optimizer.set_power_mode(PowerMode::LowPower)?;
// Get current metrics
let power = optimizer.get_power_usage().await?;
println!("Current power usage: {:.2}W", power.current_watts);
let carbon = optimizer.calculate_carbon_footprint().await?;
println!("Carbon footprint: {:.2}kg CO2", carbon.total_kg);

REST API Usage

Authentication

Terminal window
# Using API Key
curl -H "X-API-Key: your-api-key" \
http://localhost:8080/api/v1/query
# Using JWT Bearer Token
curl -H "Authorization: Bearer your-jwt-token" \
http://localhost:8080/api/v1/query

SQL Queries

Terminal window
# Execute SQL query
curl -X POST http://localhost:8080/api/v1/query \
-H "Content-Type: application/json" \
-H "X-API-Key: your-key" \
-d '{
"query": "SELECT * FROM users WHERE age > $1 LIMIT 10",
"parameters": [21]
}'
Terminal window
# Search for similar vectors
curl -X POST http://localhost:8080/api/v1/vector/search \
-H "Content-Type: application/json" \
-H "X-API-Key: your-key" \
-d '{
"vector": [0.1, 0.2, 0.3, 0.4],
"k": 10,
"index": "embeddings_index",
"metric": "cosine"
}'

Document Operations

Terminal window
# Insert document
curl -X POST http://localhost:8080/api/v1/documents/users \
-H "Content-Type: application/json" \
-H "X-API-Key: your-key" \
-d '{
"id": "user123",
"data": {
"name": "Alice",
"email": "alice@example.com",
"age": 30
}
}'
# Query documents
curl "http://localhost:8080/api/v1/documents/users?filter=%7B%22age%22:%7B%22%24gt%22:25%7D%7D" \
-H "X-API-Key: your-key"

Time-Series Operations

Terminal window
# Write time-series point
curl -X POST http://localhost:8080/api/v1/timeseries/write \
-H "Content-Type: application/json" \
-H "X-API-Key: your-key" \
-d '{
"metric": "cpu.usage",
"value": 75.5,
"timestamp": 1635724800000,
"tags": {
"host": "server01",
"region": "us-west"
}
}'
# Query time-series data
curl -X POST http://localhost:8080/api/v1/timeseries/query \
-H "Content-Type: application/json" \
-H "X-API-Key: your-key" \
-d '{
"metric": "cpu.usage",
"start": 1635724800000,
"end": 1635811200000,
"aggregation": "avg",
"interval": 300
}'

GraphQL API Usage

Basic Queries

# Query users
query {
users(where: { age: { gt: 25 } }, orderBy: { name: ASC }, take: 10) {
id
name
email
age
createdAt
}
}
# Get single user
query {
user(id: "123") {
id
name
email
posts {
id
title
content
}
}
}

Mutations

# Create user
mutation {
createUser(name: "Alice", email: "alice@example.com", age: 30) {
id
name
email
}
}
# Update user
mutation {
updateUser(id: "123", email: "newemail@example.com") {
id
email
}
}
# Delete user
mutation {
deleteUser(id: "123") {
id
}
}

Subscriptions

# Subscribe to user creations
subscription {
userCreated {
id
name
email
createdAt
}
}
# Subscribe to updates
subscription {
userUpdated(id: "123") {
id
name
email
}
}

Performance Tuning

Storage Configuration

let config = StorageConfig {
// Memory settings
memtable_size: 256 * 1024 * 1024, // 256MB
block_cache_size: 1024 * 1024 * 1024, // 1GB
write_buffer_size: 64 * 1024 * 1024, // 64MB
// Compaction
compaction_threads: 4,
max_background_jobs: 8,
target_file_size: 64 * 1024 * 1024, // 64MB
// I/O
use_direct_io: true,
max_open_files: 10000,
enable_mmap: true,
// Compression
enable_compression: true,
compression_type: CompressionType::Zstd,
compression_level: 3,
// Advanced
enable_bloom_filters: true,
bloom_filter_bits_per_key: 10,
enable_statistics: true,
};

Vector Index Tuning

// For high recall (slower but more accurate)
let index = HnswIndex::new(
768,
32, // Higher M = better recall
400, // Higher ef_construction = better index quality
DistanceMetric::Cosine
);
index.set_ef(500); // Higher ef = better search quality
// For speed (lower recall)
let index = HnswIndex::new(
768,
8, // Lower M = faster
100, // Lower ef_construction = faster build
DistanceMetric::Cosine
);
index.set_ef(50); // Lower ef = faster search

Cache Optimization

let config = CacheConfig {
// Size and eviction
max_size: 2 * 1024 * 1024 * 1024, // 2GB
eviction_policy: EvictionPolicyType::Hybrid,
enable_ml: true,
// Compression
enable_compression: true,
compression_type: CompressionType::Zstd,
compression_threshold: 1024,
compression_level: 3,
// Tiering
enable_tiered: true,
l1_size: 512 * 1024 * 1024, // 512MB hot tier
l2_size: Some(2 * 1024 * 1024 * 1024), // 2GB warm tier
l3_enabled: true, // Distributed tier
// Performance
num_shards: 16,
enable_prefetch: true,
prefetch_window: 100,
};

Query Optimization

// Enable query optimization
let optimizer_config = OptimizerConfig {
enable_ai: true,
enable_statistics: true,
enable_cost_model: true,
parallel_execution: true,
max_parallel_workers: 8,
adaptive_planning: true,
};
// Use prepared statements
let stmt = db.prepare("SELECT * FROM users WHERE id = $1")?;
for id in user_ids {
let results = stmt.query(&[&id])?;
// Process results
}
// Use connection pooling
let pool = ConnectionPool::new(PoolConfig {
min_connections: 5,
max_connections: 20,
connection_timeout: Duration::from_secs(30),
idle_timeout: Some(Duration::from_secs(600)),
max_lifetime: Some(Duration::from_secs(3600)),
});

Monitoring and Observability

Metrics Collection

use heliosdb_metrics::{MetricsCollector, MetricType};
let collector = MetricsCollector::new();
// Collect metrics periodically
tokio::spawn(async move {
let mut interval = tokio::time::interval(Duration::from_secs(60));
loop {
interval.tick().await;
let metrics = collector.collect_all().await;
println!("=== Database Metrics ===");
println!("Queries/sec: {}", metrics.queries_per_second);
println!("Cache hit rate: {:.2}%", metrics.cache_hit_rate * 100.0);
println!("Replication lag: {}ms", metrics.replication_lag_ms);
println!("Storage size: {} GB", metrics.storage_size_bytes / (1024*1024*1024));
println!("Active connections: {}", metrics.active_connections);
}
});

Distributed Tracing

use heliosdb_distributed_tracing::{TracingContext, Span};
// Create trace
let ctx = TracingContext::new("query-execution");
// Start span
let span = ctx.start_span("execute-query");
// Execute operation
let result = execute_query(&query).await?;
// End span
span.finish();
// View trace
let trace = ctx.get_trace();
println!("Trace duration: {}ms", trace.duration_ms);
for span in trace.spans {
println!(" {}: {}ms", span.name, span.duration_ms);
}

Health Checks

use heliosdb_common::health::{HealthChecker, ComponentHealth};
let checker = HealthChecker::new();
// Check all components
let health = checker.check_all().await?;
if health.is_healthy() {
println!("System healthy");
} else {
println!("System unhealthy:");
for component in health.components {
if !component.healthy {
println!(" {}: {}", component.name, component.message);
}
}
}

Security Best Practices

Authentication

use heliosdb_security::{AuthManager, AuthConfig, TokenType};
let auth_manager = AuthManager::new(AuthConfig {
jwt_secret: std::env::var("JWT_SECRET")?,
token_expiry: Duration::from_secs(3600),
refresh_token_expiry: Duration::from_secs(86400 * 7),
enable_2fa: true,
});
// Authenticate user
let token = auth_manager.authenticate(username, password).await?;
// Verify token
let claims = auth_manager.verify_token(&token)?;

Encryption

use heliosdb_security::{EncryptionManager, EncryptionConfig};
let encryption = EncryptionManager::new(EncryptionConfig {
algorithm: EncryptionAlgorithm::Aes256Gcm,
key_rotation_interval: Duration::from_secs(86400 * 30),
enable_at_rest: true,
enable_in_transit: true,
});
// Encrypt data
let plaintext = b"sensitive data";
let ciphertext = encryption.encrypt(plaintext)?;
// Decrypt data
let decrypted = encryption.decrypt(&ciphertext)?;

Access Control

use heliosdb_security::{AccessControl, Permission, Role};
let ac = AccessControl::new();
// Define roles
ac.create_role(Role {
name: "admin".to_string(),
permissions: vec![
Permission::Read,
Permission::Write,
Permission::Delete,
Permission::Admin,
],
})?;
// Check permission
if ac.has_permission(&user, Permission::Write)? {
// Allow operation
}