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


本文地址