#metrics #memory #no-std #data-structures #storage

nightly no-std downsample

在长时间内保留数据下采样历史

3个版本

0.0.3 2023年10月22日
0.0.2 2023年1月17日
0.0.1 2023年1月6日

压缩类别中排名291

Apache-2.0 OR MIT

27KB
597

Crates.io docs.rs pipeline status coverage report license dependencies lines of code

downsample

用于对固定频率或基于时间的指标进行下采样以进行长期存储的no-std库。

假设您有一个每秒可以进行100次测量的温度传感器,并将数据存储在f32中。您想跟踪一些历史样本,比如去年的,但您不需要像原始数据那样以100Hz的频率存储它们,因为365 * 24 * 60 * 60 * 100 * 4字节 = 12GB数据量太大。

另外,它将提供一个基于时间的下采样器,您可以在没有固定大小但有固定间隔的级别中存储数据。基于时间的下采样尚未实现。

用法

use downsample::FixedFrequencyBuilder;
use rand::Rng;

fn main() {
    // 0s - 1s : 100Hz
    // 1s - 1m : 1Hz
    // 1m - 1h : 1/60 Hz
    // 1h - 1d : 1/3600 Hz
    let mut temperature_measurements = FixedFrequencyBuilder::new(100, 100)
        .level(59, 100)
        .level(59, 60)
        .level(23, 60)
        .build();
    for _ in 0..1000 {
        temperature_measurements.push(rng.gen::<f32>());
    }
}

限制

  • 对象创建时必须知道桶的大小。
  • 只能允许作为下采样因子的整数。例如,100Hz -> 25Hz -> 5Hz可以通过因子4和5实现,但不能通过因子2.5实现,因为2.5不是整数。

早期发布版本

这个crate的版本是0.0.x,这意味着api会快速变化,特性会发生变化,还没有什么几乎是稳定的。

没有运行时依赖