aegis-timeseries
Time Series Engine for Aegis Database Platform.
Overview
High-performance time series storage and query engine with Gorilla-style compression, time-based partitioning, and flexible retention policies.
Modules
types.rs
Core data types for time series:
DataPoint- Timestamp and value pairSeries- Collection of data points with metric and tagsMetric- Metric metadata (name, type, description, unit)MetricType- Counter, Gauge, Histogram, SummaryTags- Key-value labels for series identification
partition.rs
Time-based partitioning:
PartitionInterval- Minute, Hour, Day, Week, MonthPartition- Time-bounded data containerPartitionManager- Manages partition lifecyclePartitionConfig- Configuration for partitioning
compression.rs
Gorilla-style compression:
Compressor- Delta-of-delta timestamp and XOR value compressionDecompressor- Decompression for query accessCompressedBlock- Compressed data with metadata- Typically achieves 2-10x compression ratio
aggregation.rs
Aggregation functions:
AggregateFunction- Sum, Count, Min, Max, Avg, First, Last, Median, StdDev, Variance, Rate, IncreaseAggregator- Streaming aggregationDownsampler- Reduce data resolutionRollingWindow- Windowed aggregation
retention.rs
Data lifecycle management:
RetentionPolicy- Define when to delete or downsampleRetentionTier- Multi-resolution storage tiersMultiTierRetention- Preset configs for monitoring/IoTRetentionManager- Apply policies to partitions
index.rs
Series indexing:
TimeSeriesIndex- Index by ID, metric, tagsSeriesMetadata- Indexed series informationLabelMatcher- Equal, NotEqual, Regex, NotRegex filters
query.rs
Query execution:
TimeSeriesQuery- Query builder with filters and aggregationQueryAggregation- Downsample, RollingWindow, InstantQueryResult- Results with timing and statisticsQueryExecutor- Execute queries on series dataInstantQuery- Point-in-time queries
engine.rs
Core engine:
TimeSeriesEngine- Main entry pointEngineConfig- Configuration optionsSeriesBuffer- In-memory buffer with auto-compressionEngineStats- Performance metrics
Usage Example
use aegis_timeseries::*;
use chrono::Duration;
// Create engine
let engine = TimeSeriesEngine::new();
// Write data
let mut tags = Tags::new();
tags.insert("host", "server1");
engine.write_now("cpu_usage", tags.clone(), 45.5)?;
// Query data
let query = TimeSeriesQuery::last("cpu_usage", Duration::hours(1))
.downsample(Duration::minutes(5), AggregateFunction::Avg)
.with_limit(100);
let result = engine.query(&query);
// Get latest value
let latest = engine.latest("cpu_usage", Some(&tags));
// Aggregate over time range
let avg = engine.aggregate("cpu_usage", Duration::hours(1), AggregateFunction::Avg);
Tests
31 tests covering all modules.