Giter Site home page Giter Site logo

adofsauron / redistimeseries Goto Github PK

View Code? Open in Web Editor NEW

This project forked from redistimeseries/redistimeseries

0.0 1.0 0.0 10.64 MB

Time Series data structure for Redis

Home Page: https://redistimeseries.io

License: Other

Makefile 4.08% C 57.08% Python 35.83% Dockerfile 0.17% Shell 2.81% C++ 0.03%

redistimeseries's Introduction

Release CircleCI Dockerhub Language grade: C/C++ codecov

RedisTimeSeries

Forum Discord

RedisTimeSeries is a time-series database (TSDB) module for Redis, by Redis.

RedisTimeSeries can hold multiple time series. Each time series is accessible via a single Redis key (similar to any other Redis data structure).

What is a Redis time series?

A Redis time series comprises:

  • Raw samples: each raw sample is a {time tag, value} pair.

    • Time tags are measured in milliseconds since January 1st, 1970, at 00:00:00.

      Time tags can be specified by the client or filled automatically by the server.

    • 64-bit floating-point values.

    The intervals between time tags can be constant or variable.

    Raw samples can be reported in-order or out-of-order.

    Duplication policy for samples with identical time tags can be set: block/first/last/min/max/sum.

  • An optional configurable retention period.

    Raw samples older than the retention period (relative to the raw sample with the highest time tag) are discarded.

  • Series Metadata: a set of name-value pairs (e.g., room = 3; sensorType = ‘xyz’).

    RedisTimeSeries supports cross-time-series commands. One can, for example, aggregate data over all sensors in the same room or all sensors of the same type.

  • Zero or more compactions.

    Compactions are an economical way to retain historical data.

    Each compaction is defined by:

    • A timeframe. E.g., 10 minutes
    • An aggregator: min, max, sum, avg, …
    • An optional retention period. E.g., 10 year

    For example, the following compaction: {10 minutes; avg; 10 years} will store the average of the raw values measured in each 10-minutes time frame - for 10 years.

Examples of time series

  • Sensor data: e.g., temperatures or fan velocity for a server in a server farm
  • Historical prices of a stock
  • Number of vehicles passing through a given road (count per 1-minute timeframes)

Features

  • High volume inserts, low latency reads
  • Query by start time and end-time
  • Aggregated queries (Min, Max, Avg, Sum, Range, Count, First, Last, STD.P, STD.S, Var.P, Var.S) for any time bucket
  • Configurable maximum retention period
  • Compactions - automatically updated aggregated timeseries
  • Secondary index - each time series has labels (name-value pairs) which will allows to query by labels

Using with other tools metrics tools

In the RedisTimeSeries organization you can find projects that help you integrate RedisTimeSeries with other tools, including:

  1. Prometheus - read/write adapter to use RedisTimeSeries as backend db.
  2. Grafana - using the Redis Data Source.
  3. Telegraph
  4. StatsD, Graphite exports using graphite protocol.

Memory model

A time series is a linked list of memory chunks. Each chunk has a predefined size of samples. Each sample is a tuple of the time and the value of 128 bits, 64 bits for the timestamp and 64 bits for the value.

Setup

You can either get RedisTimeSeries setup in a Docker container or on your own machine.

Docker

To quickly try out RedisTimeSeries, launch an instance using docker:

docker run -p 6379:6379 -it --rm redislabs/redistimeseries

Build and Run it yourself

You can also build and run RedisTimeSeries on your own machine.

Major Linux distributions as well as macOS are supported.

Requirements

First, clone the RedisTimeSeries repository from git:

git clone --recursive https://github.com/RedisTimeSeries/RedisTimeSeries.git

Then, to install required build artifacts, invoke the following:

cd RedisTimeSeries
make setup

Or you can install required dependencies manually listed in system-setup.py.

If make is not yet available, the following commands are equivalent:

./deps/readies/bin/getpy3
./system-setup.py

Note that system-setup.py will install various packages on your system using the native package manager and pip. This requires root permissions (i.e. sudo) on Linux.

If you prefer to avoid that, you can:

  • Review system-setup.py and install packages manually,
  • Utilize a Python virtual environment,
  • Use Docker with the --volume option to create an isolated build environment.

Build

make build

Binary artifacts are placed under the bin directory.

Run

In your redis-server run: loadmodule bin/redistimeseries.so

For more information about modules, go to the Redis official documentation.

Give it a try

After you setup RedisTimeSeries, you can interact with it using redis-cli.

Here we'll create a time series representing sensor temperature measurements. After you create the time series, you can send temperature measurements. Then you can query the data for a time range on some aggregation rule.

With redis-cli

$ redis-cli
127.0.0.1:6379> TS.CREATE temperature:3:11 RETENTION 60 LABELS sensor_id 2 area_id 32
OK
127.0.0.1:6379> TS.ADD temperature:3:11 1548149181 30
OK
127.0.0.1:6379> TS.ADD temperature:3:11 1548149191 42
OK
127.0.0.1:6379>  TS.RANGE temperature:3:11 1548149180 1548149210 AGGREGATION avg 5
1) 1) (integer) 1548149180
   2) "30"
2) 1) (integer) 1548149190
   2) "42"

Client libraries

Some languages have client libraries that provide support for RedisTimeSeries commands:

Project Language License Author Stars
JRedisTimeSeries Java BSD-3 Redis JRedisTimeSeries-stars
redis-modules-java Java Apache-2 dengliming redis-modules-java-stars
redistimeseries-go Go Apache-2 Redis redistimeseries-go-stars
rueidis Go Apache-2 Rueian rueidis-stars
redis-py Python MIT Redis redis-py-stars
NRedisTimeSeries .NET BSD-3 Redis NRedisTimeSeries-stars
phpRedisTimeSeries PHP MIT Alessandro Balasco phpRedisTimeSeries-stars
redis-time-series JavaScript MIT Rafa Campoy redis-time-series-stars
redistimeseries-js JavaScript MIT Milos Nikolovski redistimeseries-js-stars
redis-modules-sdk Typescript BSD-3-Clause Dani Tseitlin redis-modules-sdk-stars
redis_ts Rust BSD-3 Thomas Profelt redis_ts-stars
redistimeseries Ruby MIT Eaden McKee redistimeseries-stars
redis-time-series Ruby MIT Matt Duszynski redis-time-series-rb-stars

Tests

The module includes a basic set of unit tests and integration tests.

Unit tests

To run all unit tests, follow these steps:

$ make unittests

Integration tests

Integration tests are based on RLTest, and specific setup parameters can be provided to configure tests. By default the tests will be ran for all common commands, and with variation of persistency and replication.

To run all integration tests in a Python virtualenv, follow these steps:

$ mkdir -p .env
$ virtualenv .env
$ source .env/bin/activate
$ pip install -r tests/flow/requirements.txt
$ make test

To understand what test options are available simply run:

$ make help

For example, to run the tests strictly desigined for TS.ADD command, follow these steps:

$ make test TEST=test_ts_add.py

Documentation

Read the docs at http://redistimeseries.io

Mailing List / Forum

Got questions? Feel free to ask at the RedisTimeSeries forum.

License

Redis Source Available License Agreement, see LICENSE

redistimeseries's People

Contributors

danni-m avatar gkorland avatar rafie avatar filipecosta90 avatar k-jo avatar ofirmos avatar chayim avatar yaeltzirulnikov avatar liorkogan avatar someburner avatar ashtul avatar itamarhaber avatar jeffreylovitz avatar tomerhekmati avatar dzunk avatar snyk-bot avatar dengliming avatar yoonghm avatar simonprickett avatar szaydel avatar miohtama avatar leibale avatar karanlyons avatar danitseitlin avatar ruslan-redislabs avatar dependabot[bot] avatar cwr31 avatar tompro avatar rueian avatar swilly22 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.