1、引言
时序数据治理是数据治理领域的核心IT与OT域数据链路是工业物联网基石、大数据价值创造、企业管理改进发动机、数字化转型的重要支撑。
在生产经营过程中,工业企业将利用物联网技术收集大量数据并实时处理。这些数据是时间顺序,具有时间戳、结构化、未更新、唯一数据源等显著特点。
过程数据采集和过程控制应用于智能城市、物联网、汽车互联网和工业互联网,并与过程管理建立数据链接,属于工业数据管理的新兴领域。
物联网和互联网中时序数据库的应用场景APM有下是一些时序数据库的应用场景,但并非全部:
- 公共安全:网络记录、电话记录、个人跟踪、区间筛选;
- 电力行业:智能电表、电网、发电设备集中监控;
- 互联网:服务器/应用监控、用户访问日志、广告点击日志;
- 物联网:电梯、锅炉、机械、水表等各种联网设备;
- 交通行业:实时路况、交叉口流量监测、交叉口数据;
- 金融业:交易记录、访问记录、ATM、POS机监测。
2、概述
2.定义1时序数据库
时序数据是随时间不断生成的一系列数据,简单来说就是带时间戳的数据。时序数据库 (Time Series Database,TSDB) 它是一个优化数据库,用于访问、处理和存储时间戳数据。这些数据可能包括服务器和应用程序的指标、物联网传感器的读数、网站或应用程序上的用户互动或金融市场上的交易活动。
其主要数据属性如下:
- 每个数据点都包含用于索引、聚合和采样的时间戳。这些数据也可以是多维和相关的;
- 写多读少,需要支持秒、毫秒甚至纳秒高频写入;查询通常是多维聚合查询,对查询延迟要求较高
- 数据汇总视图(如下采样或聚合视图和趋势线)可能比单个数据点提供更多的洞察力。例如,考虑到网络不可靠性或传感器读数异常,我们可以在一段时间内设置报警,而不是在单个数据点上;
- 分析数据通常需要在一段时间内访问(例如,给我过去一周的点击率数据);
虽然其他数据库也可以在一定程度上处理数据规模较小的时间序列数据,但是 TSDB数据摄入、压缩和聚合可以随着时间的推移更有效地处理。简而言之,时序数据库是一个专门用于存储和处理时序数据的数据库,支持时序数据的高效读写、高压缩存储、插值和聚合。
2.2时序数据库的概念
时序数据库是专门处理时序数据的数据库,因此其相关概念与时序数据密切相关,以下是时序数据库的一些基本概念。
- :Metric 类似关系数据库中的表(Table),例如,为空气质量传感器建立一系列同类时序数据集 Table,存储所有传感器的监控数据。
- 标签 Tag:Tag 描述数据源的特征通常不会随着时间的推移而改变,如传感器设备,包括设备 DeviceId、设备所在的 Region 等 Tag 信息将在数据库中自动进行 Tag 建立索引,支持基础 Tag 多维检索查询;Tag 由 Tag Key、Tag Value 成分,两者都是 String 类型。
- :Timestamp可以写入时指定代表数据生成的时间点,也可以由系统自动生成;
- :Field描述数据源的量测指标,通常随着时间不断变化,例如传感器设备包含温度、湿度等Field;
- 数据源在一定时间内产生的测量指标值(Field Value)称为数据点,数据库查询、写入时以数据点为统计指标;
- :数据源的某一指标随时间变化,形成时间线,Metric Tags Field 组合确定时间线;时序数据的计算包括降采样和聚合(sum、count、max、min等)、插值等都基于时间线维度进行;
2.3时序数据库的趋势
从DB-engines(Knowledge Base of Relational and NoSQL Database Management Systems)获取获取,下图为DB-engines数据库近24个月的发展趋势,其中时序数据库活跃度最高,随着时间的推移,趋势越来越活跃。
3.常用时序数据库测试
3.1读写测试
写入测试
指标 |
InfluxDB |
Prometheus |
IoTDB |
10000 |
185ms |
192ms |
183ms |
10000 |
186ms |
195ms |
120ms |
20000 |
252ms |
268ms |
236ms |
20000 |
264ms |
273ms |
219ms |
30000 |
385ms |
401ms |
274ms |
查询测试
指标 |
InfluxDB |
Prometheus |
IoTDB |
10000 |
14ms |
18ms |
16ms |
20000 |
31ms |
32ms |
35ms |
40000 |
56ms |
58ms |
54ms |
60000 |
75ms |
82ms |
78ms |
90000 |
96ms |
99ms |
97ms |
3.2 功能对比
DB-Engines提供的编辑信息
描述 |
用于存储时间序列、事件和指标的 DBMS |
开源时间系列DBMS和监控系统 |
具有高性能数据管理和分析的物联网原生数据库,可部署在边缘和云端,并与Hadoop,Spark和Flink集成 |
主数据库模型 |
时间序列数据库管理系统 |
时间序列数据库管理系统 |
时间序列数据库管理系统 |
辅助数据库模型 |
空间数据库管理系统 |
||
数据库引擎排名 |
得分 29.86 排 #29 整体 #1 时间序列数据库管理系统 |
得分 6.32 排 #67 整体 #3 时间序列数据库管理系统 |
得分 0.43 排 #255 整体 #20 时间序列数据库管理系统 |
网站 |
InfluxDB: Open Source Time Series Database | InfluxData |
prometheus.io |
iotdb.apache.org |
技术文档 |
docs.influxdata.com/influxdb |
prometheus.io/docs |
|
开发人员 |
Apache Software Foundation |
||
初始版本 |
2013 |
2015 |
2018 |
当前版本 |
2.0.8, 八月 2021 |
||
许可证信息 |
开源信息 |
开源信息 |
开源信息 |
仅基于云的信息 |
不 |
不 |
不 |
DBaaS 产品/服务信息 |
|||
实现语言 |
Go |
Go |
Java |
服务器操作系统 |
Linux OS X |
Linux Windows |
具有 Java 虚拟机的操作系统(>= 1.8) |
数据方案 |
无架构 |
是 |
是 |
类型 |
数值数据和字符串 |
仅数字数据 |
是 |
XML支持 |
不 |
不 |
不 |
二级索引 |
不 |
不 |
是 |
断续器信息 |
类似 SQL 的查询语言 |
不 |
类似 SQL 的查询语言 |
API 和其他访问方法 |
HTTP API JSON over UDP |
RESTful HTTP/JSON API |
JDBC Native API |
支持的编程语言 |
.Net Clojure Erlang Go Haskell Java JavaScript JavaScript (Node.js) Lisp Perl PHP Python R Ruby Rust Scala |
.Net C++ Go Haskell Java JavaScript (Node.js) Python Ruby |
|
服务器端脚本 |
不 |
不 |
是 |
不 |
不 |
是 |
|
分布方法 |
分片 |
分片 |
|
复制方法 |
可选复制因子 |
是 |
|
地图共享资源 |
不 |
不 |
与Hadoop和Spark集成 |
一致性概念 |
没有 |
最终一致性 与Raft的强一致性 |
|
外键 |
不 |
不 |
不 |
交易概念 |
不 |
不 |
不 |
并发 |
是 |
是 |
是 |
耐久性 |
是 |
是 |
是 |
内存中功能 |
是 |
不 |
是 |
用户概念 |
通过用户账户进行简单的权限管理 |
不 |
是 |
系统供应商提供的详细信息
具体特性 |
|
\ |
|
竞争优势 |
|
\ |
|
典型用户场景 |
|
\ |
|
主要客户 |
|
\ |
|
市场指标 |
|
\ |
|
许可和定价模式 |
|
\ |
|
3.3总结
系统供应商提供的详细信息
优点 |
|
|
|
缺点 |
|
|
|