6 个版本
0.2.2 | 2023年11月3日 |
---|---|
0.2.1 | 2023年5月3日 |
0.1.5 | 2023年4月8日 |
0.1.1 | 2023年3月31日 |
#6 in #sketch
每月 25 次下载
100KB
2.5K SLoC
sketches-rust
这是直接从 Java 的 DDSketch 折线实现移植到 Rust。DDSketch 是可合并的,这意味着分布式系统中的多个 sketches 可以在中心节点合并。
功能
尽可能与 Java 实现兼容,以下是一些支持的功能
- CubicallyInterpolatedMapping
- LogarithmicMapping
- CollapsingHighestDenseStore: 当达到指定大小时折叠最高桶
- CollapsingLowestDenseStore: 当达到指定大小时折叠最低桶
- UnboundedSizeDenseStore: 无限制桶
- 与其他实例合并
- 从字节反序列化
- 序列化到字节
使用方法
在项目目录中运行以下 Cargo 命令
cargo add sketches-rust
或添加以下行到 Cargo.toml
sketches-rust = "0.2.2"
演示
查询分位数
use sketches_rust::DDSketch;
let mut d = DDSketch::collapsing_lowest_dense(0.02,100).unwrap();
d.accept(1.0);
d.accept(2.0);
d.accept(3.0);
let c = d.get_count();
assert_eq!(c, 3.0);
let q = d.get_value_at_quantile(0.5).unwrap();
assert!(q < 2.01 && q > 1.99);
与其他实例合并
use sketches_rust::DDSketch;
let mut d1 = DDSketch::collapsing_lowest_dense(0.02,100).unwrap();
d1.accept(1.0);
d1.accept(2.0);
d1.accept(3.0);
assert_eq!(3.0, d1.get_count());
let mut d2 = DDSketch::collapsing_lowest_dense(0.02,100).unwrap();
d2.accept(1.0);
d2.accept(2.0);
d2.accept(3.0);
assert_eq!(3.0, d2.get_count());
d2.merge_with(&mut d1).unwrap();
assert_eq!(6.0, d2.get_count());
序列化到字节
use sketches_rust::DDSketch;
let mut d = DDSketch::unbounded_dense(2e-2).unwrap();
d.accept(1.0);
d.accept(2.0);
d.accept(3.0);
d.accept(4.0);
d.accept(5.0);
println!("encode: {:?}", d.encode().unwrap());
从字节反序列化
use sketches_rust::DDSketch;
let mut input = vec![
2, 42, 120, 57, 5, 47, 167, 240, 63, 0, 0, 0, 0, 0, 0, 0, 0, 13, 50, 130, 1, 2, 136, 32, 0,
3, 0, 0, 0, 3, 0, 2, 0, 0, 3, 3, 2, 2, 3, 3, 2, 0, 0, 0, 0, 2, 0, 2, 2, 2, 4, 4, 132, 64,
0, 4, 2, 0, 2, 2, 3, 132, 64, 4, 132, 64, 4, 2, 2, 0, 6, 4, 6, 132, 64, 2, 6,
];
let mut d = DDSketch::decode(&input).unwrap();
assert_eq!(d.get_count(), 100.0);
依赖
~0.3–2.3MB
~45K SLoC