Time Series Database


  • Monday, Jul 15, 2019

一、Feature Comparison

Survey and Comparison of Open Source Time Series Databases

TSDB 的分组

  1. 依赖其他DBMS(如Cassandra,HBase,CouchDB,MySQL)来存储time series数据的。该分组不包括使用其他DBMS来存储meta信息的TSDB。
  2. 不依赖其他DBMS来存储time series数据的。
  3. 可以存储time series数据的RDBMS
  4. 非开源的TSDB

TSDB 对比

从 Survey and Comparison of Open Source Time Series Databases 中提取关于 InfluxDB、Prometheus、Druid、OpenTSDB的对比。这篇Paper主要是对各个TSDB进行定义和分类,以及对比比较流行的前12个TSDBs的特性。以下摘取其中比较值得注意的对比。更详细的请参考原文。

✓ means available
(✓) means available with restrictions
✗ means not available

1、Criteria Group 1: Distribution/Clusterability.

TSDB High Avaliable Scalability Load Balancing remark
OpenTSDB ✓ (✓) (✓) 部署多个HBase节点,通过DNS或者HaProxy等lb将query分布到不同的实例
Druid ✓ ✓ ✓ Druid 使用RDBMS作为元数据存储,zookeeper作为协调,以及分布式存储(HDFS/S3/Azure)来保存数据,需要部署5个不同类型的节点。
InfluxDB ✓ ✗ (企业版才支持) ✓ 通过 influxDB-relay 来实现高可用和负载均衡
Prometheus ✗ (✓) (✓) Can Prometheus be made highly available? Scaling and Federating Prometheus

2、Criteria Group 2: Functions

大部分TSDB基本都支持Aggregation,但大部分不支持 UPD 和 DEL(InfluxDB支持)。

3、Criteria Group 3: Tags, Continuous Calculation, Long-term Storage, and Matrix Time Series.

Matrix Time Series : 一条数据有多个TimeStamp

TSDB Continuous Calculation Tags Long-Term Storage Matrix Time Series remark
OpenTSDB ✗ ✓ ✗ ✗
Druid ✓ ✓ ✓ ✗
InfluxDB ✓ ✓ ✓ ✗ 通过CQ 降采样和Retention policies来实现Continuous Calculation 和 Long-Term Storage
Prometheus ✓ ✓ ✗ ✗

4、Criteria Group 4: Granularity.

TSDB Downsampling Smallest Sample Interval Smallest Granularity for Storage Smallest Guaranteed Granularity for Storage
OpenTSDB ✓ 1 ms 1 ms > 1ms^41
Druid ✓ 1 ms 1 ms 1 ms
InfluxDB ✓ 1 ms 1 ms 1 ms
Prometheus ✓ 1 ms 1 ms 1 ms

二、InfluxDb Survey

InfluxDB 1.7

2.1 Features

  • 高性能的TSDB,使用TSM存储引擎。
  • 使用Go语言编写。安装时不需要其他依赖。
  • 简单高性能的HTTP APIs。
  • 支持其他数据摄取协议,如Graphite/OpenTSDB。
  • 使用SQL-like的查询语法(InfluxSQL)
  • 使用Tag作为series索引,使查询更快。
  • 支持Retention polilcies,可以自动删除过期数据。
  • Continuous queries(CQ),自动聚合数据,降采样,以此提高查询性能。

2.2 Encouraged Schema Design

  1. Tags 有做索引,而fields没有做索引。根据tag做查询性能会好很多。
  2. 避免使用和InfluxQL的保留字同样的字段名。

2.3 Discouraged schema design

  1. 控制time series的数量,如果time series数量过多会导致内存占用过高。不同数据量级的硬件建议
  2. 不要使用表名来保存数据。通过tag的方式会更好。
  3. 不要在一个tag中包含多个信息。

2.4 Shard group duration tradeoffs


本文地址