3 个版本 (破坏性更新)
0.3.0 | 2024年4月30日 |
---|---|
0.2.0 | 2024年4月30日 |
0.1.0 | 2024年4月29日 |
#1111 在 数据结构
21KB
488 行
DataStreams-RS
DataStreams-RS 通过固定BUCKET_SIZE_MS来维护固定HISTORY_SIZE的滑动数据流。数据结构使用INITIAL_TS初始化。
较旧的测量值(代码:{max_ts} - BUCKET_SIZE_MS * HISTORY_SIZE)将被跳过。较新的测量值(初始时为代码:
=INITIAL_TS
)将数据帧移动到未来并删除旧数据。
数据结构为每个桶维护单个值。相同桶的新值将覆盖之前的值。
支持的运算
- 初始化
- 插入新值
- 迭代
- 边界获取
- 使用自定义的
AGGREGATION_MS
(预期AGGREGATION_MS >> BUCKET_SIZE_MS
)进行聚合)- 聚合最小值
- 聚合最大值
- 聚合平均值
自定义Fn(&Vec<f64>) -> f64
安装
cargo install datastreams-rs
使用方法
const HISTORY_SIZE: usize = 10;
const BUCKET_SIZE_MS: u64 = 1_000;
const INITIAL_TS: u64 = 1_714_321_497_981;
fn main() {
let mut data_stream: DataStream = create_data_stream(INITIAL_TS, HISTORY_SIZE, BUCKET_SIZE_MS);
// insert new values
data_stream.add_value(INITIAL_TS + 0 * BUCKET_SIZE_MS, 1f64);
data_stream.add_value(INITIAL_TS + 1 * BUCKET_SIZE_MS, 2f64);
data_stream.add_value(INITIAL_TS + 2 * BUCKET_SIZE_MS, 2f64);
data_stream.add_value(INITIAL_TS + 3 * BUCKET_SIZE_MS, 2f64);
// iterate over data stream
for data_stream_value in data_stream.into_iter() {
let _t = data_stream_value.timestamp;
let _v = data_stream_value.value;
println!("{_t}={_v}");
}
// aggregation
const AGGREGATION_MS: u64 = 2 * BUCKET_SIZE_MS;
let mut out: Vec<f64> = Vec::new();
data_stream.agg(aggregation_min, AGGREGATION_MS, &mut out);
data_stream.agg(aggregation_max, AGGREGATION_MS, &mut out);
data_stream.agg(aggregation_avg, AGGREGATION_MS, &mut out);
}
发行说明
0.3.0
- 删除泛型数据流配置
0.2.0
- 添加聚合
0.1.0
- 首次发布
面向开发者
在提交前评估此命令
cargo fmt
cargo clippy --all-targets --all-features -- -D warnings
作者
Mark Andreev ( linkedin.com/in/mrk-andreev; mrkandreev.name )