新手必看!如何入门IoTDB及应用思考

207 阅读5分钟

IoTDB,Internet of thing database. 用于工业物联网场景的数据库,可满足海量数据存储高吞吐量数据写入复杂数据查询分析的需求。

【原创文字,IoTDB 社区可进行使用与传播】

快速开始

入门一门新的技术,有两步:是什么?跑起来(用起来)!看官网是最快捷、靠谱的途径。 IoTDB官方仓库已经维护的很好了,推荐大家看README:github.com/apache/iotd…

我们可以看到三种安装方式:源代码安装、二进制文件安装、Docker安装。

为了快速看到效果,我们从官网下载开箱即用的二进制文件进行安装。

二进制文件下载

我下载的二进制文件下载链接:https://dlcdn.apache.org/iotdb/1.3.1/apache-iotdb-1.3.1-all-bin.zip

*注:我使用的为Windows版本,Linux版本可到IoTDB官网或仓库查看操作说明

文件解压

文件解压后的目录:

image.png

进入sbin目录,会发现相当多的二进制脚本,可以使用不同的脚本对我们的IoTDB启动不同的命令:

image.png

启动IoTDB

通过运行 sbin 文件夹下的 start-standalone 脚本启动 1C1D IoTDB:

.\start-standalone.bat

回车!!!会跳出两个窗口,无报错,显示“ Congratulation, IoTDB DataNode is set up successfully. Now, enjoy yourself!”,代表启动成功。

image.png

使用IoTDB

启动成功后,我们可以再开启一个cmd窗口,开启客户端进行操作。

.\start-cli.bat -h 127.0.0.1 -p 6667 -u root -pw root

显示图标,即为开启成功,可以使用基本的IoTDB命令进行操作,入门成功:

image.png

整个启动和打开客户端的过程都非常快,大概1-2s,非常轻量级,易于部署和使用。

IoTDB基本命令

  • 创建数据库 CREATE DATABASE 数据库名

注意数据库名一定要以root. 开头,比如root.test。如果不是会报错:

Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 700: Error occurred while parsing SQL to physical plan: line 1:16 mismatched input 'ln' expecting ROOT

因为IoTDB内部是以树状结构存储的,最顶层就是root节点,root节点下面的节点为我们数据库的名字。除了root.test这两层之外,还可以有多层。

  • 查看数据库 SHOW DATABASES
+---------+----+-----------------------+---------------------+---------------------+
| Database| TTL|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|
+---------+----+-----------------------+---------------------+---------------------+
|root.test|null|                      1|                    1|            604800000|
|  root.ln|null|                      1|                    1|            604800000|
+---------+----+-----------------------+---------------------+---------------------+

TTL代表有效时间,默认为null,代表数据会永久存储。后面的参数代表对IoTDB做一些副本、集群等高可用的设置。

  • 查看现有的时序序列 SHOW TIMESERIES
IoTDB> SHOW TIMESERIES
+----------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
|Timeseries|Alias|Database|DataType|Encoding|Compression|Tags|Attributes|Deadband|DeadbandParameters|ViewType|
+----------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
+----------+-----+--------+--------+--------+-----------+----+----------+--------+------------------+--------+
Empty set.
It costs 0.266s
IoTDB>

因为我们操作前没有设置时间序列,所以默认为空。

更多命令详见官网......

物联网领域为什么选择IoTDB

在IoTDB中为什么有时间序列的概念?

因为IoTDB是物联网领域的时序数据库,这个时序就是时间序列。

前面也提到过IoTDB内部是以树状结构存储的,以物联网领域的典型应用——智慧农业温室大棚为例,我们为我们的农场创建数据库,这个数据库按树状结构,可分为不同的温室大棚(大棚1、大棚2),而每个大棚往下又分不同的设备(检测温湿度的设备A、检测光照强度的设备B),而这些设备往下又分为不同的传感器(检测温湿度的设备A由温度传感器、湿度传感器组成;检测光照强度的设备B由光照强度传感器组成)。树状结构的根节点就是某个传感器,比如root.greenhouse1.deviceA.temp1,(IoTDB创建数据库的标准,最上面的父节点必须是root,然后用点号表示从上到下的传递关系)我们就可以定位到唯一的一个传感器,这个就是针对某个传感器创建的唯一的一个数据库,可以很方便的存储数据。

这个传感器就是核心,因为整个物联网系统需要控制设备的开启和关闭,本质上就是控制传感器的开启和关闭,或者需要接收到此时此刻、每时每刻的环境数据,本质上就是需要传感器采集并发送来的数据。

而作为物联网系统、温室大棚系统,就是需要传感器实时发送数据,这个数据往往需要持久化到数据库中,用来后面的查看历史数据、环境数据走向、环境预测等。而一般的关系型数据库MySQL是基于磁盘的,当大量设备的设备需要频繁写入MySQL,速度会比较慢,并且容易造成MySQL的宕机从而导致一系列的连锁反应。因此我们需要一款物联网领域的数据库,能够支持实时写入数据并且方便进行树状结构的管理。而IoTDB的特点正好满足我们的需求。

  • 高效的目录结构。IoTDB支持智能网络设备对复杂时间序列数据结构的高效组织,同类设备对时间序列数据的组织,海量复杂时间序列数据目录的模糊搜索策略。
  • 高吞吐量读写。IoTDB支持数以百万计的低功耗设备的强连接数据访问、高速数据读写,适用于上述智能网络设备和混合设备。
  • 丰富的查询语义。IoTDB支持跨设备和测量的时间序列数据的时间对齐、时间序列字段的计算(频域转换)和时间维度的丰富聚合函数支持。
  • 与先进的开放源码生态系统的无缝集成。IoTDB支持分析生态系统,如Hadoop、Spark和可视化工具(如Grafana)。

除了基本的存储效率及结构之外,IoTDB还可以与Hadoop、Spark等大数据领域的组件无缝集成,可进行非常方便的大数据分析,比如分析某个温室大棚的环境趋势走向并进行预测等。