Skip to main content

Crate oxirs_tsdb

Crate oxirs_tsdb 

Source
Expand description

Time-series optimizations for OxiRS

Status: Production Ready (v0.2.2)

This crate provides high-performance time-series storage and query capabilities for IoT-scale RDF data.

§Features

  • Gorilla compression - 40:1 storage reduction (Facebook, VLDB 2015)
  • Delta-of-delta timestamps - <2 bits per timestamp
  • SPARQL temporal extensions - WINDOW, RESAMPLE, INTERPOLATE
  • 500K+ writes/sec - High-throughput ingestion
  • Hybrid storage - Seamless RDF + Time-Series integration
  • Retention policies - Automatic downsampling and expiration
  • Write-Ahead Log - Crash recovery and durability with CRC32 protection
  • Background compaction - Automatic storage optimization
  • Columnar storage - Disk-backed binary format
  • Series indexing - Efficient chunk lookups
  • Raft replication - Distributed consensus with quorum commits
  • Arrow/Parquet export - Analytics interoperability

§Architecture

+---------------------------------------------+
|         Hybrid Storage Model                |
+---------------------------------------------+
|                                             |
|  +--------------+    +-----------------+    |
|  |  RDF Store   |<-->| Time-Series DB  |    |
|  |  (oxirs-tdb) |    |  (this crate)   |    |
|  +--------------+    +-----------------+    |
|        |                     |              |
|        | Semantic            | High-freq    |
|        | metadata            | sensor data  |
|        +----------+----------+              |
|                   |                         |
|        +----------v---------+               |
|        | Unified SPARQL     |               |
|        | Query Layer        |               |
|        +--------------------+               |
+---------------------------------------------+

§Quick Start

§Basic Usage

use oxirs_tsdb::HybridStore;
use chrono::Utc;

// Create hybrid store (RDF + time-series)
let store = HybridStore::new()?;

// Direct time-series insertion
let series_id = 1;
let timestamp = Utc::now();
let value = 22.5;
store.insert_ts(series_id, timestamp, value)?;

// Query time range
let start = timestamp - chrono::Duration::hours(1);
let end = timestamp + chrono::Duration::hours(1);
let points = store.query_ts_range(series_id, start, end)?;

Re-exports§

pub use config::AggregationFunction;
pub use config::TsdbConfig;
pub use error::TsdbError;
pub use error::TsdbResult;
pub use series::DataPoint;
pub use series::SeriesDescriptor;
pub use series::SeriesMetadata;
pub use storage::ChunkEntry;
pub use storage::ColumnarStore;
pub use storage::SeriesIndex;
pub use storage::DeltaOfDeltaCompressor;
pub use storage::DeltaOfDeltaDecompressor;
pub use storage::GorillaCompressor;
pub use storage::GorillaDecompressor;
pub use storage::TimeChunk;
pub use write::BufferConfig;
pub use write::BufferStats;
pub use write::CompactionConfig;
pub use write::CompactionStats;
pub use write::Compactor;
pub use write::RetentionEnforcer;
pub use write::RetentionStats;
pub use write::WalEntry;
pub use write::WriteAheadLog;
pub use write::WriteBuffer;
pub use query::Aggregation;
pub use query::AggregationResult;
pub use query::InterpolateMethod;
pub use query::Interpolator;
pub use query::QueryBuilder;
pub use query::QueryEngine;
pub use query::QueryResult;
pub use query::RangeQuery;
pub use query::ResampleBucket;
pub use query::Resampler;
pub use query::TimeRange;
pub use query::WindowFunction;
pub use query::WindowSpec;
pub use integration::Confidence;
pub use integration::DetectionResult;
pub use integration::HybridStore;
pub use integration::RdfBridge;
pub use sparql::interpolate_function;
pub use sparql::register_temporal_functions;
pub use sparql::resample_function;
pub use sparql::window_function;
pub use sparql::QueryRouter;
pub use sparql::RoutingDecision;
pub use sparql::TemporalFunctionRegistry;
pub use sparql::TemporalValue;
pub use compression::dict_decode;
pub use compression::dict_encode;
pub use compression::gorilla_decode;
pub use compression::gorilla_encode;
pub use compression::rle_decode;
pub use compression::rle_encode;
pub use compression::AdaptiveCompressor;
pub use compression::CompressedBlock;
pub use compression::CompressionAlgorithm;
pub use compression::DictionaryBlock;
pub use compression::DictionaryEncoder;
pub use compression::GorillaDecoder;
pub use compression::GorillaEncoder;
pub use compression::RleBlock;
pub use compression::RleEncoder;
pub use compression::RleRun;
pub use replication::AppendEntriesArgs;
pub use replication::AppendEntriesReply;
pub use replication::LogEntry;
pub use replication::RaftError;
pub use replication::RaftResult;
pub use replication::RaftRole;
pub use replication::RaftState;
pub use replication::RequestVoteArgs;
pub use replication::RequestVoteReply;
pub use replication::TsdbCommand;
pub use replication::WriteEntry;
pub use replication::ReplicationGroup;
pub use replication::TsdbRaftNode;
pub use write::BatchWriter;
pub use write::BatchWriterConfig;
pub use write::CrcWal;
pub use write::MetricPoint;
pub use analytics::AggregationFunction as ExportAggregation;
pub use analytics::ArrowExporter;
pub use analytics::ColumnarExport;
pub use analytics::ColumnarStats;
pub use analytics::DuckDbQueryAdapter;
pub use analytics::ExportedPoint;
pub use analytics::ParquetCompression;
pub use analytics::ParquetExporter;
pub use analytics::DataValueType;
pub use analytics::MetricSchema;
pub use analytics::MetricSchemaBuilder;
pub use analytics::SqlDataPoint;
pub use analytics::SqlExporter;
pub use analytics::AdaptiveKalmanFilter;
pub use analytics::AnomalyEvent;
pub use analytics::KalmanAnomaly;
pub use analytics::KalmanFilter;
pub use analytics::GpuAggMetrics;
pub use analytics::GpuAggOp;
pub use analytics::GpuDownsampler;
pub use analytics::GpuTimeSeriesAggregator;
pub use analytics::ArrowColumn;
pub use analytics::ArrowDataType;
pub use analytics::ArrowField;
pub use analytics::ArrowIpcReader;
pub use analytics::ArrowIpcWriter;
pub use analytics::ArrowRecordBatch;
pub use analytics::ArrowSchema;
pub use analytics::TaggedDataPoint;
pub use analytics::TimeUnit;
pub use analytics::ParquetColumn;
pub use analytics::ParquetIpcCompression;
pub use analytics::ParquetReader;
pub use analytics::ParquetValues;
pub use analytics::ParquetWriter;

Modules§

alert_rule
Time-series alerting rules engine (v1.7.0). Time-series alerting rules engine.
analytics
Advanced analytics: anomaly detection and time-series forecasting. Advanced analytics for time-series data stored in OxiRS TSDB.
anomaly_detection
Statistical anomaly detection for time-series data (v1.2.0). Statistical Anomaly Detection for Time-Series Data.
anomaly_detector
Statistical anomaly detection for time-series data. Time-series anomaly detection algorithms.
compression
Advanced compression algorithms: Gorilla XOR, RLE, Dictionary, Adaptive. Advanced compression algorithms for time-series data
compression_codec
Time-series value compression codecs: Delta, RLE, Zigzag, Gorilla, Plain (v1.5.0). Time-series value compression codecs
config
Configuration types for TSDB storage and query options.
continuous_query
Continuous aggregate queries with materialized views (v1.8.0). Continuous aggregate queries for time-series data.
downsampler
Time-series downsampling algorithms: LTTB, Average, MinMax, First, Last, Sum, Count (v1.2.0). Time-series downsampling algorithms.
error
Error types and result aliases for TSDB operations.
event_correlator
Time-series event correlation engine: Pearson correlation, sliding-window evaluation, threshold triggers, and event purging (v1.1.0 round 14) Time-series event correlation engine (v1.1.0 round 14).
forecaster
Time-series forecasting using exponential smoothing and moving averages (v1.1.0 round 15) Time-series forecasting using exponential smoothing and moving averages.
gorilla_compression
Gorilla/Delta-of-Delta compression for time-series data (v1.1.0). Gorilla / Delta-of-Delta Compression for Time-Series Data
integration
Integration with oxirs-core RDF Store (hybrid storage). Integration with oxirs-core RDF Store
query
Query engine for time-series data with aggregations and window functions. Time-series query engine
replication
Raft consensus state machine for distributed TSDB replication. Raft-based replication for distributed TSDB
retention_policy
Retention policies for time-series data expiration and downsampling (v1.1.0). Time-series retention policy management.
rollup_engine
Time-series rollup/downsampling engine: windowed Mean/Sum/Min/Max/Count/First/Last aggregation, multi-resolution rollup, and LTTB visual downsampling (v1.1.0 round 16) Time-series rollup and downsampling engine (v1.1.0 round 16).
series
Series definitions including data points and metadata.
series_iterator
Forward/backward time series iterator with windowing (v1.6.0).
sparql
SPARQL temporal extensions for time-series queries. SPARQL temporal extensions for time-series queries
storage
Storage layer with compression and chunk management. Columnar storage engine with compression
tag_index
Tag-based time series indexing with inverted index (v1.9.0). Tag-based time series indexing.
write
Write path with WAL and compaction for durable data ingestion. Write path with WAL and compaction
write_buffer
In-memory write buffer for time-series ingestion: size/time flush policies, WAL integration, backpressure (v2.0.0). In-memory write buffer for time-series data ingestion.