Skip to content

Rust implementation of the DDSketch quantile sketch

License

MIT, Apache-2.0 licenses found

Licenses found

MIT
LICENSE
Apache-2.0
LICENSE-APACHE
Notifications You must be signed in to change notification settings

pmcgleenon/ddsketchy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DDSketchy Logo

ddsketchy

This is a Rust implementation of the DDSketch quantile sketch algorithm. DDSketch is a fully-mergeable quantile sketch with relative-error guarantees.

ddsketchy Features

  • Implements the DDSketch algorithm with configurable relative error guarantees
  • Optimized for high-throughput data collection scenarios
  • Designed for distributed systems with efficient sketch merging

Usage

use ddsketchy::{DDSketch, DDSketchError};

fn main() -> Result<(), DDSketchError> {
    // Create a new sketch with 1% relative error
    let mut sketch = DDSketch::new(0.01)?;

    // Add some values
    sketch.add(1.0);
    sketch.add(2.0);
    sketch.add(3.0);
    sketch.add(4.0);
    sketch.add(5.0);

    // Get the 50th percentile (median)
    let median = sketch.quantile(0.5)?;
    println!("Median: {}", median);

    // Get the 90th percentile
    let p90 = sketch.quantile(0.9)?;
    println!("90th percentile: {}", p90);

    Ok(())
}

Serialization Support

ddsketchy supports optional serialization via serde. Serialization is disabled by default to keep the library dependency-free. To enable it, add the serde feature:

[dependencies]
ddsketchy = { version = "0.1", features = ["serde"] }
serde_json = "1.0"  # or other serde formats
use ddsketchy::DDSketch;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut sketch = DDSketch::new(0.01)?;
    sketch.add(1.0);
    sketch.add(2.0);

    // Serialize to JSON
    let json = serde_json::to_string(&sketch)?;
    println!("Serialized: {}", json);

    // Deserialize from JSON
    let restored: DDSketch = serde_json::from_str(&json)?;

    // Verify the sketch works correctly
    assert_eq!(sketch.count(), restored.count());
    assert_eq!(sketch.quantile(0.5)?, restored.quantile(0.5)?);

    Ok(())
}

The serialization handles all internal state including infinity values for min/max bounds in empty sketches. Empty sketches serialize min/max as null values, while sketches with data serialize them as numbers.

Minimum Supported Rust Version (MSRV)

This crate supports Rust 1.81.0 and later. We follow a rolling MSRV policy of approximately 1 year behind the latest stable release. MSRV increases may occur in minor releases and will be noted in the changelog.

References

Other implementations

About

Rust implementation of the DDSketch quantile sketch

Topics

Resources

License

MIT, Apache-2.0 licenses found

Licenses found

MIT
LICENSE
Apache-2.0
LICENSE-APACHE

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •  

Languages