引用:
http://liubin.org/blog/2016/02/18/tsdb-intro/
https://www.xaprb.com/blog/2014/06/08/time-series-database-requirements/
http://jmoiron.net/blog/thoughts-on-timeseries-databases
1、时序数据库有多少种类型
DB-Engines:
https://db-engines.com/en/ranking/time+series+dbms
Graphite vs. InfluxDB vs. Kdb+ vs. OpenTSDB vs. RRDtool vs. Druid
https://db-engines.com/en/system/RRDtool%3BInfluxDB%3BKdb%2B%3BOpenTSDB%3BGraphite
2、时序数据库简介及典型功能
定义:时序列数据库用来存储时序列(time-series)数据并以时间(点或区间)建立索引的软件。
时序列数据:
定义:
- 可以唯一标识的序列名/ID
- 一组数据点{timestamp, value}
特点:
- 数据结构简单:某一指标在单位时间点只有一个值,没有复杂(嵌套,层次等)结构和(关联,主外键等)关系。
- 数据量大
TSDB特点:
数据写入:
- 写多于读:95%-99%的操作都是写操作(因此写入性能必须能跟得上、无延时,并且不能阻塞读操作)
- 顺序写:时间序列数据,多为实时写入,追加式写入
- 很少更新:数据写入之后,不会更新
- 区块(bulk)删除:基本没有随机删除,多数是从一个时间点开始到某一时间点结束的整段数据删除。
数据读取:
- 顺序读:基本都是按照时间顺序读取一段时间内的数据
- 基数大:基本数据大,超过内存大小(缓存不起作用),要选取的只是其一小部分,且没有规律
读取优化:
1.以写性能优先,不为读取做存储优化,但是通过分布式和并发读,来提高读取的速度
2.区块的写。在写入的时候就考虑到读的性能问题,将统一指标、时间段的数据写入到同一数据块中,为读取进行写入优化
分布式:
- 将存储和查询分发到不同的服务。以支撑大规模的数据采集和查询请求
- 自动扩展
- 自动失败切换(Fault-tolerant)。
基本数据分析:
TSDB的数据是用来分析的,所以TSDB还会提供做数据分析所必须的各种运算、变换函数。
TSDB典型功能:
- 读写性能,IOPS
- 保留策略,存储引擎
- 集群功能
- API(REST API,SDK)
- SQL like
- 可视化和报警
- 周边工具,插件
- 多租户支持、权限管理、访问控制(较少)
3、主流时序数据库典型及非典型功能
选取如下典型的数据库进行分析:
Graphite vs. InfluxDB vs. Kdb+ vs. OpenTSDB vs. RRDtool vs. Druid
进行对比的指标如下:
- 性能
- 存储方案(或引擎)
- 集群功能:文档、集群后的读写性能
- API:api文档,sdk等
- SQL-like:文档
- 成熟度:生态系统、开发活跃度、社区包活跃度、应用案例
- 可视化和报警
- 技术栈
- 保留策略:自动删除、压缩
- 主导公司
- License
- 多租户支持
- 安全性
- 特性功能
指标 | 1# InfluxDB | 3# RRDtool | 4# Graphite | 5# OpenTSDB | 6# Prometheus | 7# Druid |
---|---|---|---|---|---|---|
主导公司 | InfluxData | Tobias Oetiker | graphiteapp | OpenTSDB | Prometheus | druid |
License | Open Source/MIT/free single machine | Open Source/GPL V2 and FLOSS | Open Source/Apache 2.0 | Open Source/LGPL | Open Source/Apache 2.0 | Open Source/Apache 2.0 |
技术栈 | Go | C | Python | Java | Go | Java |
存储方案 | KV方式(LevelDB, RocksDB, HyperLevelDB, LMDB) | RRD(Round- Robin Database)环型数据库 | Whisper (基于RRD) | HBase | KV方式(LevelDB) | 列存储方式 |
性能(需要手工测试) | 测试单机版的边界 | RRDtool | Graphite | OpenTSDB | Prometheus | Druid |
集群功能 | 支持(收费) | 不支持(不需要) | 支持(难扩展) | 支持(易扩展) | 支持 | 支持 |
API | HTTP API/JSON over UDP | Pipe | HTTP API/Sockets | HTTP API/Telnet API | RESTful HTTP/JSON API | JSON over UDP |
SQL-like | 支持 | 不支持 | 不支持 | 不支持 | 不支持 | 支持 |
可视化和报警 | 只负责存储 | 存储和绘图 | 存储&自带UI | 存储 | 监控&报警&存储 | 存储&生态好 |
多租户支持 | 支持 | 不支持 | 支持 | 不支持 | 不支持 | 支持 |
保留策略 | 删除指定时间外的数据 | 循环删除 | 同rrdtool | OpenTSDB | Prometheus | Druid |
安全性 | InfluxDB | RRDtool | Graphite | OpenTSDB | Prometheus | Druid |
特性功能 | InfluxDB | RRDtool | Graphite | OpenTSDB | Prometheus | Druid |
3-主流时序数据库之间的对比(包括性能,场景)
https://db-engines.com/en/system/Graphite%3BInfluxDB%3BRRDtool
https://db-engines.com/en/system/Druid%3BOpenTSDB%3BPrometheus