时序数据库学习笔记

引用:
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

一、时序数据库有多少种类型

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%3BGraphitemysql


二、时序数据库简介及典型功能

定义:时序列数据库用来存储时序列(time-series)数据并以时间(点或区间)创建索引的软件。web

时序列数据:

定义:
- 能够惟一标识的序列名/ID
- 一组数据点{timestamp, value}
特色:
- 数据结构简单:某一指标在单位时间点只有一个值,没有复杂(嵌套,层次等)结构和(关联,主外键等)关系。
- 数据量大sql

TSDB特色:

数据写入:
  • 写多于读:95%-99%的操做都是写操做(所以写入性能必须能跟得上、无延时,而且不能阻塞读操做)
  • 顺序写:时间序列数据,多为实时写入,追加式写入
  • 不多更新:数据写入以后,不会更新
  • 区块(bulk)删除:基本没有随机删除,多数是从一个时间点开始到某一时间点结束的整段数据删除。
数据读取:
  • 顺序读:基本都是按照时间顺序读取一段时间内的数据
  • 基数大:基本数据大,超过内存大小(缓存不起做用),要选取的只是其一小部分,且没有规律
读取优化:
1.以写性能优先,不为读取作存储优化,可是经过分布式和并发读,来提升读取的速度
2.区块的写。在写入的时候就考虑到读的性能问题,将统一指标、时间段的数据写入到同一数据块中,为读取进行写入优化
分布式:
  • 将存储和查询分发到不一样的服务。以支撑大规模的数据采集和查询请求
  • 自动扩展
  • 自动失败切换(Fault-tolerant)。
基本数据分析:

TSDB的数据是用来分析的,因此TSDB还会提供作数据分析所必须的各类运算、变换函数。数据库

TSDB典型功能:

  1. 读写性能,IOPS
  2. 保留策略,存储引擎
  3. 集群功能
  4. API(REST API,SDK)
  5. SQL like
  6. 可视化和报警
  7. 周边工具,插件
  8. 多租户支持、权限管理、访问控制(较少)

三、主流时序数据库典型及非典型功能

选取以下典型的数据库进行分析:
Graphite vs. InfluxDB vs. Kdb+ vs. OpenTSDB vs. RRDtool vs. Druidapi

进行对比的指标以下:缓存

  • 性能
  • 存储方案(或引擎)
  • 集群功能:文档、集群后的读写性能
  • 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

part1

part2

4-时序数据库与mysql的对比

5-时序数据库xx的原理