- Notifications
You must be signed in to change notification settings - Fork12
usmanm/redis-tdigest
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is a Redis module for thet-digest data structure which can be used for accurate online accumulation of rank-based statistics such as quantiles and cumulative distribution at a point. The implementation is based on theMerging Digest implementation by the author.
Before going ahead, make sure that the Redis server you're using has support forRedis modules.
First, you'll have to build the Redis t-digest module from source.
make
This should generate a shared library calledtdigest.so
in the root folder. You can now load it into Redis by using the followingredis.conf
configuration directive:
loadmodule /path/to/tdigest.so
Alternatively, you can load it on an already running Redis server by issuing the following commands:
MODULE LOAD /path/to/tdigest.so
Initializes akey
to an empty t-digest structure with thecompression
provided or with the default compression of400
.
Reply:"OK"
Adds avalue
with the specifiedcount
. Ifkey
is missing, an empty t-digest structure is initialized with a default compression of400
. Returns the sum of counts for all values added.
Reply:long long
Merges one or moresourcekey
intodestkey
. Ifdestkey
is missing, an empty t-digest structure is initialized with a default compression of400
.
Reply:"OK"
Returns the cumulative distribution for all provided values.value
must be a double. The cumulative distribution returned for all values is between0..1
.
Reply:double
array ornil
if key missing
Returns the estimate values at all provided quantiles.quantile
must be adouble
between0..1
.
Reply:double
array ornil
if key missing
Prints debug information about the t-digest.
Reply: bulk strings array
The reply is of the form:
1) TDIGEST (<compression>, <num_centroids>, <memory size>)2) CENTROID (<mean>, <weight>)3) CENTROID (<mean>, <weight>)4) CENTROID (<mean>, <weight>)5) ...
Centroids are printed in sorted order with respect to their mean.
The integration tests require a running Redis server so you must haveredis-server
on yourPATH
or pass its location in an environment variable calledREDIS_SERVER
. Tests are written in Python and use thepytest unit testing library.
make test
Bug reports, feature and pull requests are welcome! Please add tests for any non-trivial changes you submit.