Documentation for stdnet 0.8.2. For development docs, go here.
Warning
This branch is not longer active. Both the ZDIFFSTORE command and the timeseries data-structure have been implemented using lua scripts. If timeseries is what you are looking for, check the timeseries data structure for univariate timeseries and the column timeseries for numeric multivariate timeseries suitable for modelling financial timeseries. Stdnet uses redis >= 2.6 from the standard (antirez) distribution.
During the development of stdnet we came across several design decisions, some more critical than others, and most of them were resolved coding the client only. However, more exotic features, such as the time series structure, required hacking on the server side.
For this reason we have the stdnet-redis branch.
For some reasons redis does not have a zdiffstore command. For 99% of applications this is not an issue, but when using stdnet with models which have an implicit sorting it becomes one.
Computes the difference between the first sorted set and all the successive sorted sets given by the specified keys, and stores the result in destination. It is mandatory to provide the number of input keys (numkeys) before passing the input keys and the other (optional) arguments:
ZDIFFSTORE destination numkeys key [key ...] [withscore]
If the optional argument withscore is True (default is False), elements are removed from the first sorted sets only if the score is matched.
Time-series is an important data-structure not yet supported in redis, it is represented by a unique sorted associative container, that is to say it associates ordered unique times to values.
Values, which can be anything you like, are ordered with respect to times (you could use unix timestamp, but any double value would do), and can be accessed by times or rank (the order of times in the time-series). Times are unique so that there will be only one value associated with a given time.
Internally, a time-series is implemented using the same skiplist implementation as ordered sets. Values are added to a skip list which maintain sorting with respect to times.
Performance:
O(log(N)) on INSERT REMOVE and RETRIEVAL via times
There are currently seven commands which cover the basic operations of a timeseries. I tried to keep them to a minimum but there is scope to add more.
Add items to timeseries at key:
tsadd key time1 value1 time2 value2 ...
If value at time is already available, the value will be updated.
Range by rank:
tsrange key start end <flag>
Where start and end are integers following the same Redis conventions as zrange, <flag> is an optional string which can take two values: withtimes or novalues:
tsrange key start end -> return values
tsrange key start end withtimes -> return (time,value)s
tsrange key start end novalues -> return times
Range by times:
tsrangebytime key time_start time_end <flag>
Where time_start and time_end are double (timestaps) and <flag> is the same as in TSRANGE.