时序数据库及 IoTDB 介绍 | 小白教程文档(一)
![时序数据库及 IoTDB 介绍 | 小白教程文档(一)](https://static001.geekbang.org/infoq/52/52aecb24cd603414cde0cf45f273a32c.png)
1. 数据库、数据库管理系统以及数据库系统
数据如同空气一样普遍,我们在手机的每一次点击都会产生数据,都可能被记录,被使用。数据存放在数据库中,数据库其实就是“数据的集合”。
一个个数据库,就像一个个容器,怎么对这些容器进行管理,例如安全存放数据,增删查改数据,这就是数据库管理系统要做的事。听起来这已经是满足用户需求的最终产品形态了,但其实这并不是给终端用户使用的,而是给软件开发者使用的,软件开发者需要用特定的编程语言在数据库管理系统进行交互。
而数据库系统才是真正给终端用户使用的,包括数据库、数据库管理系统、以及应用系统。这三个词的关系如下图所示:
![](https://static001.geekbang.org/infoq/28/28492b3167e66f0c590bab8bc8b7f487.png)
严格来说我们接下来要探讨的是基于软件开发者角度的数据库管理系统,但是为了方便,后文出现的“数据库”都指代“数据库管理系统”。在计算机的语境里,这样称呼一般没有歧义。之所以要阐明“数据库管理系统”的概念,是因为数据库管理系统可以贯穿数据的生命周期,充当管理者的角色。这能够帮助理解我们下文要叙述的数据库管理系统对于数据全生命周期实现的管理作用和提供的解决方案。
明确了数据库的概念,那么数据库和其中的数据能够分为哪几类?每一类又有什么样的特征呢?
2.数据类型及特征
2.1 关系数据
最早流行的数据库是关系数据库。它的出现源于关系数据模型的提出。历经几十年关系数据库仍然是应用最多的数据库,比如 Oracle 、 MySQL 、 SQL Server 、 PostgreSQL 等。下面这种表格呈现的数据就是关系数据:
![](https://static001.geekbang.org/infoq/76/76e397af86ce635f85f255e2a88594ec.png)
关系是一种集合,这种集合的元素称为元组。元组是对象个数有限的序列,例如(张三,李四)是一组元组,(一班,二班)是另一组元组。这种由行和列组成的表格就是二维表,也是关系数据库中的数据存在形式。
2.2 时序数据
再来看这样一个表格:
![](https://static001.geekbang.org/infoq/bf/bf1d34dab5bf2c0a1c4193537a6b31fd.png)
表格里每个温度都带着一个时间,这就是典型的时序( Time Series )数据。时序,即时间序列、时序数据,就是带着时间戳的一系列数据,通常表示被测量的主体在一段时间内的每个时间戳对应的数据变化。例如下图是某支股票一天的实时走势图,纵坐标是股价,横坐标是时间,这条线就是一条时间序列。可视化之后我们得以直观地观测股票价格。
![](https://static001.geekbang.org/infoq/2a/2a316df72c4b9d901f9edca278c95ac5.png)
2.2.1 工业时序数据的生命周期
像上面这样的时序数据在哪里产生最多呢?答案是工业领域。
典型的应用工业时序数据的流程为:从设备端采集数据,通过接口写入数据库中,数据库选择合适的方法储存这些数据,并根据不同需求来处理数据,如监控预警,分析预测,或者引入人工智能方法。
![](https://static001.geekbang.org/infoq/23/23c21af5175f9a6e46c1a9d11bf630b9.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
正因为数据需要经历“采-存-用”的使用流程,因此要考虑怎么写入数据、怎么存储数据、怎么使用数据。工业领域中的时序数据,一开始存储在关系数据库中,后来因时序数据的处理越来越麻烦,很难用关系数据库快捷方便的达成。于是工业领域开始产生了需要更方便处理时序数据的数据库的需求。再后来,顺应这样的工业领域需求,诞生了专为时序数据设计的时序数据库。
2.2.2 工业时序数据特征
为什么工业时序数据的处理很麻烦呢?这来源于工业时序数据本身存在的特点。它不仅有传统大数据的特征,如数据量大(海量性)、数据上报频繁(高频性),对实时性、准确性的要求也越来越高。
![](https://static001.geekbang.org/infoq/1f/1f38d4aaed39a3a951a22bc7e195494a.png)
我们来看一个实例:某企业有超过 2 万个风机,一个风机有 120 - 510 个传感器,采集频率高达 50 Hz,也就是每个传感器可达到 1 秒 50 个数据点的采集峰值,总量每秒采集 5 亿个点的数据,吞吐量极大,且因为有用数据做监控和报表等需求,实时性要求高。理想的数据库应做到写入及聚合查询低延迟,例如查询某段时间内的风速。此外,这些数据还具有价值密度低的特点,因此也应强调高压缩率,降低企业存储成本。
总结一下,想要有效处理时序数据,理想的工业数据库应该能做到以下几点:
![](https://static001.geekbang.org/infoq/60/60a7bd8eed7629da064e5968cc03c33e.png)
为研发出理想的工业时序数据库,达到上述工业场景必备的时序数据处理特征,工业领域研究者们进行了长期的摸索,工业时序数据库也经历了漫长而曲折的发展过程。
3 工业时序数据库的相关发展与性能结果
3.1 工业数据库的历史选择
在时序数据库诞生之前,工业领域常常使用一种叫 Historian 的系统,如 InfoPlus.21 、PI 和 Wonderware Historian 等。这个名字很有意思,国内一般叫它实时数据库,但其实它的外文名字十分有趣——历史学家。Historian 有时候也叫 Data Historian 或者 Process Historian ,旨在为工业领域中许多运营技术(OT)环境产生的数据进行整合和处理,为流程和性能改进提供更好的运营方案。
![](https://static001.geekbang.org/infoq/a2/a295dea8b219c3999b8719208cfa7b5d.png)
Persistence Market Research 在 2020 年的报告中这样说:“ Data Historian 和 IIoT 解决方案都能够通过传感器和执行器收集数据,用于记录和分析,以获得更深入的感知。尽管 Data Historian 存放有意义的数据,但与 IIoT(工业互联网)解决方案相比,它需要更多时间来提取同一份数据。IIoT 解决方案有更好的可扩展性,收集有意义的业务数据,以使组织能够实时了解其流程。”可见 IIoT 相比 Data Historian 系统更可能适应工业场景对于数据实时性的高要求。
IIoT 解决方案指的是由一系列组件连接形成的工业系统,也就是现在的时序数据库所提供的针对时序数据处理和管理的核心解决方案。随着各种新框架的涌现,如边缘计算、 k8s 、 ML/DL 等,对提供 IIoT 解决方案的时序数据库的性能要求和可扩展性都有了新的要求。
那么目前有没有时序数据库是做到了有效处理时序数据的各项特征,并成功为工业领域企业提供海量时序数据管理的高效解决方案呢?答案是肯定的,而我们下面就将详细介绍其中一个物联网原生时序数据库,它叫 Apache IoTDB。
3.2 自研时序数据库 Apache IoTDB
2011 年,清华团队在国家 863 计划中为三一重工等企业提供数据管理解决方案。当时遇到的问题是企业 20 万 设备需要保存的数据量过大,且数据新增速度极快,现有数据库性能跟不上。在解决这个问题的过程中,清华团队便诞生了自主研发时序数据库的想法。这就是后来的时序数据库 Apache IoTDB 的雏形。
如今时序数据库中较为出名的产品 InfluxDB,其公司前期采用了 LevelDB 的 LSM 存储引擎,之后不满足其性能于是研发 TSM 存储引擎。而清华团队在一开始就采取完全自研的方式来构建产品。国家 863 计划设立了“数据库重大专项”,显然不想在数据库方面被“卡脖子”。
2015 年,团队发布 0.7.0 版本的初代产品;2018 年,IoTDB 正式成为 Apache 旗下孵化器项目;2020 年,Apache 软件基金会正式发出决议,将 Apache IoTDB 升为全球 top level 项目(TLP)。那么这个名为 Apache IoTDB 的时序数据库,性能如何呢?我们来看实际的性能表现。
3.3 Apache IoTDB 性能结果对比
3.3.1 写入性能对比
![](https://static001.geekbang.org/infoq/b1/b12ddaeb3cbbae219eb326065c9b78ec.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
3.3.2 查询性能对比
![](https://static001.geekbang.org/infoq/e2/e259696ee1a31259be65effbbb8174dd.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
可以看到,无论在写入速度、写入吞吐量、原始数据查询还是聚合查询,Apache IoTDB 都遥遥领先于同类数据库。IoTDB 是怎么做到这样的表现呢?除了写入和查询性能,又有什么其他优点呢?
4.为工业而生的 Apache IoTDB
Apache IoTDB 是一款低成本高性能的物联网原生时序数据库。前文我们了解到 IoTDB 支持每秒千万级数据写入,TB 数据毫秒级查询响应,其实除此之外,它的数据压缩率、查询丰富度、可扩展时序计算等方面也远超同类产品。此外,IoTDB 还具备轻量级、开箱即用的特性,可与现有大数据生态 Spark 、Flink 进行深度集成。
4.1 工业友好的物联网原生模型
Apache IoTDB 的数据模式是物联网原生模型,支持树状结构,如下图的车联网例子。这样的模型十分贴近物联网设备管理层级,无需数据迁移的情况下,可达成秒级扩容,单节点可管理百万设备、千万条时间序列,整体可实现亿级测点管理。此外,这样的模型易于建模,还可以自动创建,降低学习成本和运维成本。IoTDB 适配数百种采集协议,支持乱序写入、一键备份等功能,与物联网原生模型结合,更契合各工业场景。
![](https://static001.geekbang.org/infoq/2b/2b8a19ae3cb245c1d8cbd86388050760.png)
4.2 “端-边-云”数据协同解决方案
Apache IoTDB 使用自研列式存储文件格式 TsFile ,数据在终端只需进行一次处理,就可以端云共用,使得一种文件格式贯穿“端-边-云”,避免重复计算和 ETL 开销,节省云端资源。
![](https://static001.geekbang.org/infoq/01/01be9ef03b5e29d7ab8439e7cd23d782.png)
4.3 实现高压缩比
上述提到的 Apache IoTDB 自研列式存储文件格式 TsFile,也支持有损、无损等多种高效编码及专有压缩算法,可使数据达到 10X 倍压缩比,节省 90%+ 存储成本,让存储更经济。
4.4 多样的数据处理功能
Apache IoTDB 支持流式数据到达时计算、查询时计算和离线计算三大计算范式,提供时间窗口聚合、触发器、查询结果写回、连续查询等高级功能,让处理更方便。同时,用户可以通过接口编写自定义函数( UDF )对数据进行处理,也可以直接使用 IoTDB 在服务上百家大型企业的过程中积攒的多种计算函数,例如趋势计算、信号滤波、快速傅里叶等。
4.5 丰富的数据生态
Apache IoTDB 可与 PLC4X 、 MQTT 、 Pulsa r、 Flink 、 Spark 、 Grafana 、 Zeppelin 等大数据系统无缝集成,打通数据的上下游,覆盖时序数据的全生命周期,满足用户在数据各阶段的处理需求。
4.6 简单易用,便捷迁移
Apache IoTDB 支持跨平台部署,实现开箱即用,不依赖第三方系统和外部组件,降低运维成本。以及兼容多种 TSDB 接口,包括 InfluxDB 、 Prometheus 、 KairosDB 等,迁移简易。
5.结语
至此我们对时序数据的概念、时序数据库需要达成的特征、Apache IoTDB 的性能和功能强项已有了初步的了解,接下来的教程将在实践中展示 Apache IoTDB 的能力与魅力。
版权声明: 本文为 InfoQ 作者【Apache IoTDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/4febb6386943d2c813de42ab2】。文章转载请联系作者。
评论