/Akumuli

Time-series database

Primary LanguageC++Apache License 2.0Apache-2.0

README Build Status Coverity Scan Build Status

Akumuli is a time-series database for modern hardware. It can be used to capture, store and process time-series data in real-time. The word "akumuli" can be translated from Esperanto as "accumulate".

Features

  • Column-oriented storage.
  • Based on novel LSM and B+tree hybrid datastructure with multiversion concurrency control (no concurrency bugs, parallel writes, optimized for SSD and NVMe).
  • Supports both metrics and events.
  • Fast and effecient compression algorithm that outperforms 'Gorilla' time-series compression.
  • Crash safety and recovery.
  • Fast aggregation without pre-configured rollups or materialized views.
  • Many queries can be executed without decompressing the data.
  • Compressed in-memory storage for recent data.
  • Can be used as a server application or embedded library.
  • Simple API based on JSON and HTTP.
  • Fast range scans and joins, read speed doesn't depend on database cardinality.
  • Fast data ingestion:
    • 5.4M writes/sec on DigitalOcean droplet with 8-cores 32GB of RAM (using only 6 cores)
    • 4.6M writes/sec on DigitalOcean droplet with 8-cores 32GB of RAM (6 cores with enabled WAL)
    • 16.1M writes/sec on 32-core Intel Xeon E5-2680 v2 (c3.8xlarge EC2 instance).
  • Queries are executed lazily. Query results are produced as long as client reads them.
  • Compression algorithm and input parsers are fuzz-tested on every code change.
  • Grafana datasource plugin.
  • Fast and compact inverted index for time-series lookup.

Roadmap

Storage engine features Current version Future versions
Inserts In order Out of order
Updates - +
Deletes - +
MVCC + +
Compression + +
Tags + +
High-throughput ingestion + +
High cardinality + +
Crash recovery + +
Incremental backup - +
Clustering - +
Replication - +
ARM support + +
Windows support - +
Query language features Current version Future versions
Range scans + +
Merge series + +
Aggregate series + +
Merge & aggregate + +
Group-aggregate + +
Group-aggregate & merge + +
Join + +
Join & merge - +
Join & group-aggregate - +
Join & group-aggregate & merge - +
Filter by value + +
Filter & group-aggregate + +
Filter & join + +

Gettings Started

Supported Platforms

Akumuli supports 64 and 32-bit Intel processors. It also works on 64 and 32-bit ARM processors but these architectures are not covered by continous integration.

Pre-built Debian/RPM packages for the following platforms are available via packagecloud:

  • AMD 64 Ubuntu 14.04
  • AMD 64 Ubuntu 16.04
  • AMD 64 Ubuntu 18.04
  • AMD 64 Debian Jessie
  • AMD 64 Debian Stretch
  • AMD 64 CentOS 7
  • ARM 64 Ubuntu 16.04
  • ARM 64 Ubuntu 18.04
  • ARM 64 CentOS 7

Docker image is availabe through Docker Hub.

Tools for monitoring

Akumuli supports OpenTSDB telnet-style API for writing. This means that many collectors works with it without any trouble, for instance netdata, collectd, and tcollector. Grafana datasource plugin is availabe as well. Akumuli can be used as a long-term storage for Prometheus using akumuli-prometheus-adapter.

Google group