manifold_timeseries/
lib.rs

1//! # manifold-timeseries
2//!
3//! Time-series storage optimizations for the Manifold embedded database.
4//!
5//! This crate provides ergonomic, type-safe wrappers around Manifold's core primitives
6//! for storing and querying time-series data with multi-granularity downsampling and
7//! retention policies.
8//!
9//! ## Features
10//!
11//! - **Dual encoding strategies**: Absolute (default) or delta encoding for timestamps
12//! - **Multi-granularity tables**: Raw, minute, hour, and day aggregates
13//! - **Manual downsampling**: Compute aggregates (min, max, avg, sum, count)
14//! - **Retention policies**: Time-based cleanup of old data
15//! - **High performance**: Leverages Manifold's WAL group commit and ordered key-value storage
16//!
17//! ## Quick Start
18//!
19//! ```rust,no_run
20//! use manifold::column_family::ColumnFamilyDatabase;
21//! use manifold_timeseries::{TimeSeriesTable, AbsoluteEncoding};
22//!
23//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
24//! let db = ColumnFamilyDatabase::open("my.db")?;
25//! let cf = db.column_family_or_create("metrics")?;
26//!
27//! // Write time series data
28//! {
29//!     let write_txn = cf.begin_write()?;
30//!     let mut ts = TimeSeriesTable::<AbsoluteEncoding>::open(&write_txn, "cpu")?;
31//!     
32//!     let timestamp = 1609459200000; // 2021-01-01 00:00:00 UTC
33//!     ts.write("server1.cpu.usage", timestamp, 42.5)?;
34//!     
35//!     drop(ts);
36//!     write_txn.commit()?;
37//! }
38//!
39//! // Read time series data
40//! let read_txn = cf.begin_read()?;
41//! let ts_read = manifold_timeseries::TimeSeriesTableRead::<AbsoluteEncoding>::open(&read_txn, "cpu")?;
42//!
43//! let start = 1609459200000;
44//! let end = 1609459260000;
45//! for point in ts_read.range("server1.cpu.usage", start, end)? {
46//!     let (timestamp, value) = point?;
47//!     println!("{}: {}", timestamp, value);
48//! }
49//! # Ok(())
50//! # }
51//! ```
52//!
53//! ## Architecture
54//!
55//! This crate does **not** implement time-series analytics (forecasting, anomaly detection, etc.).
56//! Instead, it focuses on efficient storage and provides integration traits for external
57//! libraries.
58
59#![deny(missing_docs)]
60#![deny(clippy::all, clippy::pedantic)]
61#![allow(
62    clippy::module_name_repetitions,
63    clippy::must_use_candidate,
64    clippy::missing_errors_doc,
65    clippy::missing_panics_doc
66)]
67
68pub mod aggregate;
69pub mod encoding;
70pub mod timeseries;
71pub mod downsampling;
72pub mod retention;
73pub mod integration;
74
75pub use aggregate::{Aggregate, Granularity};
76pub use encoding::{AbsoluteEncoding, DeltaEncoding, EncodingError, TimestampEncoding};
77pub use timeseries::{TimeSeriesTable, TimeSeriesTableRead};
78pub use integration::TimeSeriesSource;
79