-
Notifications
You must be signed in to change notification settings - Fork 25
/
options.go
51 lines (46 loc) · 1.81 KB
/
options.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package tdigest
import "errors"
type tdigestOption func(*TDigest) error
// Compression sets the digest compression
//
// The compression parameter rules the threshold in which samples are
// merged together - the more often distinct samples are merged the more
// precision is lost. Compression should be tuned according to your data
// distribution, but a value of 100 (the default) is often good enough.
//
// A higher compression value means holding more centroids in memory
// (thus: better precision), which means a bigger serialization payload,
// higher memory footprint and slower addition of new samples.
//
// Compression must be a value greater of equal to 1, will yield an
// error otherwise.
func Compression(compression float64) tdigestOption { // nolint
return func(t *TDigest) error {
if compression < 1 {
return errors.New("Compression should be >= 1")
}
t.compression = compression
return nil
}
}
// RandomNumberGenerator sets the RNG to be used internally
//
// This allows changing which random number source is used when using
// the TDigest structure (rngs are used when deciding which candidate
// centroid to merge with and when compressing or merging with
// another digest for it increases accuracy). This functionality is
// particularly useful for testing or when you want to disconnect
// your sample collection from the (default) shared random source
// to minimize lock contention.
func RandomNumberGenerator(rng RNG) tdigestOption { // nolint
return func(t *TDigest) error {
t.rng = rng
return nil
}
}
// LocalRandomNumberGenerator makes the TDigest use the default
// `math/random` functions but with an unshared source that is
// seeded with the given `seed` parameter.
func LocalRandomNumberGenerator(seed int64) tdigestOption { // nolint
return RandomNumberGenerator(newLocalRNG(seed))
}