草图 -js
此回波包含分布式四分法草图算法的 TypeScript 执行 DDSketch 软件. DDSketch是可合并的,指分布式系统的多幅草图可以在一个中心节点进行组合.
安装
包裹在下面 @ datadog/ skets-js (英语) 并且可以通过国家防范机制或Yarn安装:
# NPM
npm install @datadog/sketches-js
# Yarn
yarn add @datadog/sketches-js
当使用Protobuf序列化时 原生生物库 模块也必须手动安装:
# NPM
npm install protobufjs
# Yarn
yarn add protobufjs
使用量
初始化草图
要初始化带有默认参数的草图 :
import { DDSketch } from '@datadog/sketches-js'; // or const { DDSketch } = require('@datadog/sketches-js');
const sketch = new DDSketch();
修改 relativeAccuracy
如果你想对草图结果的精确度 进行更多的颗粒控制 relativeAccuracy 参数初始化草图时.
其他直方图使用 等级错误 保证(即收回直方图中的p99, 将给予您p98.9和p99.1), DDSketch 使用 a 相对错误 保证(如果p99的实际值为100,则a/ relativeAccuracy (单位:千美元).
这种属性使得DDSketch对于数据的长尾分布特别有用,比如测量延迟.
import { DDSketch } from '@datadog/sketches-js';
const sketch = new DDSketch({
relativeAccuracy: 0.01, // `relativeAccuracy` must be between 0 and 1
});
将数值添加到草图中
要在草图上添加一个数字,请拨 sketch.accept(value)支持正负数字.
const measurementOne = 1607374726;
const measurementTwo = 0;
const measurementThree = -3.1415;
sketch.accept(measurementOne);
sketch.accept(measurementTwo);
sketch.accept(measurementThree);
从草图中获取测量数据
要从草图中获取测量数据,请使用 sketch.getValueAtQuantile(quantile)。任何在0至1 (包括) 之间的数字都可以作为定量.
此外,还有共同的汇总统计数据,例如: sketch.min, (中文(简体) ), sketch.max, (中文(简体) ), sketch.sum,以及 sketch.count数字 :
const measurementOne = 1607374726;
const measurementTwo = 0;
const measurementThree = -3.1415;
sketch.accept(measurementOne);
sketch.accept(measurementTwo);
sketch.accept(measurementThree);
sketch.getValueAtQuantile(0) // -3.1415
sketch.getValueAtQuantile(0.5) // 0
sketch.getValueAtQuantile(0.99) // 1607374726
sketch.getValueAtQuantile(1) // 1607374726
sketch.min // -3.1415
sketch.max // 1607374726
sketch.count // 3
sketch.sum // 1607374722.86
合并多幅草图
独立草图可以合并,但必须采用相同的草图 relativeAccuracy,从而能够以分布式方式收集和传递测量结果,并合并其结果,同时保留 relativeAccuracy 保证.
import { DDSketch } from '@datadog/sketches-js';
const sketch1 = new DDSketch();
const sketch2 = new DDSketch();
[1,2,3,4,5].forEach(value => sketch1.accept(value));
[6,7,8,9,10].forEach(value => sketch2.accept(value));
// `sketch2` is merged into `sketch1`, without modifying `sketch2`
sketch1.merge(sketch2);
sketch1.getValueAtQuantile(1) // 10
参考资料
- DDSketch:带有相对错误保证的可快速和可完全计量的量子板. Charles Masson, Jee E. Rim and Homin K. Lee. 2019 (英语).
- Java 执行 : https://github.com/DataDog/sketches-java (英语)
- 执行 : https://github.com/ DataDog/ sketches-go 页面存档备份,存于互联网档案馆
- Python 执行 : https://github.com/ DataDog/ sketches-py 互联网档案馆的存檔,存档日期2013-12-22