Discovering InfluxDB
A powerful time series database for a small-sized to medium-sized number of data points.
At NoSQL Matters Dublin 2014, my colleague Richard and I gave a tutorial on handling time series data with OpenTSDB. Also at this conference was Sebastian who talked about InfluxDB. And I have to admit I was intrigued by InfluxDB:
- It is written in Go without any dependencies; just install it — for example along with Grafana as dashboard — and start ingesting data.
- InfluxDB offers a number of client libs from JavaScript over Python to Scala as well as integration points, such as a fluentd plugin.
- In the cluster mode, InfluxDB uses Raft for synchronisation purposes — seems like all the kool kids are doing this these days; yes I’m looking at you etcd.
- Most importantly, InfluxDB has a very powerful query language, allowing you to aggregate data points, merge & join time series as well as conditionally splitting one time series into many, called to fan out. Last but not least, continuos queries allow you to inspect series in real-time.
To give you an idea how powerful the InfluxDB query language is, let’s have a look at a concrete example:
select mean(value), percentile(90, value) as percentile_90
from /^stats.*/
group by time(10m)
into 10m.:series_name
With the above query you calculate the mean and 90% percentile of all time series starting with stats (first two lines), down-sample them (through group by) and finally fan them out into a respective number of time series (such as, say, 10m.stats_a, 10m.stats_b, etc.).
I wonder what it takes to port InfluxDB’s query language to OpenTSDB. I think it would be a very useful thing to do.