Skip to content

Latest commit

 

History

History
77 lines (52 loc) · 1.74 KB

File metadata and controls

77 lines (52 loc) · 1.74 KB

API: Hydra

Status: Ready

Purpose

Hierarchical subpopulation sketching over semicolon-separated keys.

Type/Struct

  • Hydra
  • MultiHeadHydra

Constructors

fn default() -> Self
fn with_dimensions(r: usize, c: usize, sketch_type: HydraCounter) -> Self

// MultiHeadHydra
fn with_dimensions(r: usize, c: usize, dimensions: Vec<(String, HydraCounter)>) -> Self

Insert/Update

fn update(&mut self, key: &str, value: &DataInput, count: Option<i32>)

// MultiHeadHydra
fn update(&mut self, key: &str, values: &[(&DataInput, &[&str])], count: Option<i32>)

Query

fn query_key(&self, key: Vec<&str>, query: &HydraQuery) -> f64
fn query_frequency(&self, key: Vec<&str>, value: &DataInput) -> f64
fn query_quantile(&self, key: Vec<&str>, threshold: f64) -> f64

// MultiHeadHydra
fn query_key(&self, key: Vec<&str>, dimension: &str, query: &HydraQuery) -> f64
fn dimension_index(&self, dimension: &str) -> Option<usize>

Merge

fn merge(&mut self, other: &Hydra) -> Result<(), String>
fn merge(&mut self, other: &MultiHeadHydra) -> Result<(), String>

Serialization

fn serialize_to_bytes(&self) -> Result<Vec<u8>, RmpEncodeError>
fn deserialize_from_bytes(bytes: &[u8]) -> Result<Self, RmpDecodeError>

Examples

use asap_sketchlib::{Hydra, DataInput};

let mut hydra = Hydra::default();
hydra.update("region=us;service=api", &DataInput::Str("err"), None);
let est = hydra.query_frequency(vec!["region=us"], &DataInput::Str("err"));
assert!(est >= 1.0);

Caveats

  • Canonical enum/query/input definitions are in Common Input Types.
  • Query compatibility depends on HydraCounter variant.

Status

Primary subpopulation framework with broad test coverage.