一、Feature Comparison
TSDB 的分组
- 依赖其他DBMS(如Cassandra,HBase,CouchDB,MySQL)来存储time series数据的。该分组不包括使用其他DBMS来存储meta信息的TSDB。
- 不依赖其他DBMS来存储time series数据的。
- 可以存储time series数据的RDBMS
- 非开源的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
- Tags 有做索引,而fields没有做索引。根据tag做查询性能会好很多。
- 避免使用和InfluxQL的保留字同样的字段名。
2.3 Discouraged schema design
- 控制time series的数量,如果time series数量过多会导致内存占用过高。不同数据量级的硬件建议
- 不要使用表名来保存数据。通过tag的方式会更好。
- 不要在一个tag中包含多个信息。
2.4 Shard group duration tradeoffs
本文地址