### 12 releases

0.1.11 | Sep 25, 2023 |
---|---|

0.1.10 | May 2, 2022 |

0.1.9 | Feb 12, 2021 |

0.1.7 | Nov 29, 2020 |

0.1.0 | May 30, 2017 |

#**370** in Data structures

**8,680** downloads per month

Used in **10** crates
(2 directly)

**MIT/Apache**

21KB

385 lines

# exponential-decay-histogram

A histogram which exponentially weights in favor of recent values.

## License

Licensed under either of

- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

###
`lib.rs`

:

A histogram which exponentially weights in favor of recent values.

Histograms compute statistics about the distribution of values in a data set. This histogram exponentially favors recent values over older ones, making it suitable for use cases such as monitoring the state of long running processes.

The histogram does not store all values simultaneously, but rather a randomized subset. This allows us to put bounds on overall memory use regardless of the rate of events.

This implementation is based on the

class
in the Java Metrics library, which is itself based on the forward decay
model described in Cormode et al. 2009.`ExponentiallyDecayingReservoir`

# Examples

`use` `exponential_decay_histogram``::`ExponentialDecayHistogram`;`
`let` `mut` histogram `=` `ExponentialDecayHistogram``::`new`(``)``;`
`//` Do some work for a while and fill the histogram with some information.
`//` Even though we're putting 10000 values into the histogram, it will only
`//` retain a subset of them.
`for` `_` `in` `0``..``10000` `{`
`let` size `=` `do_work``(``)``;`
histogram`.``update``(`size`)``;`
`}`
`//` Take a snapshot to inspect the current state of the histogram.
`let` snapshot `=` histogram`.``snapshot``(``)``;`
`println!``(``"`count: `{}``"``,` snapshot`.``count``(``)``)``;`
`println!``(``"`min: `{}``"``,` snapshot`.``min``(``)``)``;`
`println!``(``"`max: `{}``"``,` snapshot`.``max``(``)``)``;`
`println!``(``"`mean: `{}``"``,` snapshot`.``mean``(``)``)``;`
`println!``(``"`standard deviation: `{}``"``,` snapshot`.``stddev``(``)``)``;`
`println!``(``"`median: `{}``"``,` snapshot`.``value``(``0.``5``)``)``;`
`println!``(``"`99th percentile: `{}``"``,` snapshot`.``value``(``0.``99``)``)``;`

#### Dependencies

~555KB