Apache IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。Apache IoTDB 采用轻量式架构,具有高性能和丰富的功能,并与Apache Hadoop、Spark和Flink等进行了深度集成,能够完全满足工业物联网领域的海量数据存储、高速数据读取和复杂数据分析需求。
至此我们不难发现到Apache IoTDB(物联网数据库)是为时间序列数据设计的集成数据管理引擎。它为用户提供
在高端制造中,有许多设备配备了传感器,用于收集工作状态数据。气象站,风力涡轮机是常见的高端设备。这些设备能运行TsFile在本地存储数据。这样,TsFile能够给大家提供具有高吞吐量,高压缩率和毫秒查询的数据保存能力。与TsFile-Sync工具一起,TsFiles可以传输到数据中心。
除了IoTDB引擎,IoTDB还开发了一些组件来提供更好的IoT服务。以下将所有组件称为IoTDB套件,而IoTDB专门指IoTDB引擎。IoTDB套件可以在真实的情况下提供一系列功能,例如数据收集,数据写入,数据存储,数据查询,数据可视化和数据分析。下图显示了IoTDB套件的所有组件带来的整体应用程序架构。
如上图所示,用户都能够使用JDBC将设备上的传感器收集的时间序列数据导入本地/远程IoTDB。这些时间序列数据可以是系统状态数据(例如服务器负载和CPU内存等),消息队列数据,来自应用程序的时间序列数据或数据库中的其他时间序列数据。用户还可以将数据直接写入TsFile(本地或HDFS上)。对于写入IoTDB和本地TsFile的数据,用户能够正常的使用TsFileSync工具将TsFile同步到HDFS,从而在Hadoop或Spark数据处理平台上执行数据处理任务,例如异常检测和机器学习,分析结果可以用相同的方式写回TsFile。此外,IoTDB和TsFile提供客户端工具,以满足用户以SQL形式,脚本形式和图形形式编写和查看数据的各种需求。
Apache IoTDB可以支持数百万个低功耗和智能联网设备的高速写访问。它还提供高速读取访问以检索数据。
Apache IoTDB可以使用模糊搜索策略针对时间序列数据的复杂目录有效地组织来自IoT设备和大量时间序列数据的复杂数据结构。
Apache IoTDB可以支持跨设备和传感器的时间序列数据的时间对齐,时间序列字段中的计算以及时间维度上的丰富聚合功能。
Apache IoTDB可以达到磁盘存储的高压缩率(将1GB数据存储在硬盘上的成本不到0.23美元)。
Apache IoTDB可以为用户提供云上的一键式安装工具,桌面上的终端工具以及云平台与本地计算机之间的桥接工具(数据同步工具)。
IoTDB套件由若干个组件构成,共同形成“数据收集-数据写入-数据存储-数据查询-数据可视化-数据分析”等一系列功能。下图展示了使用IoTDB套件全部组件后形成的整体应用架构。所有组件形成IoTDB套件,而IoTDB特指其中的时间序列数据库组件。
用户都能够通过JDBC将来自设备上传感器采集的时序数据、服务器负载和CPU内存等系统状态数据、消息队列中的时序数据、应用程序的时序数据或者其他数据库中的时序数据导入到本地或者远程的IoTDB中。用户还可以将上述数据直接写成本地(或位于HDFS上)的TsFile文件。
对于写入到IoTDB的数据以及本地的TsFile文件,可以通过同步工具TsFileSync将数据文件同步到HDFS上,进而实现在Hadoop或Spark的数据处理平台上的诸如异常检测、机器学习等数据处理任务。
对于写入到HDFS或者本地的TsFile文件,可以利用TsFile-Hadoop或TsFile-Spark连接器允许Hadoop或Spark进行数据处理。
IoTDB和TsFile还提供了相应的客户端工具,满足用户查看和写入数据的SQL形式、脚本形式和图形化形式等多种需求。
我们用官网的一个例子来介绍一下 Apache IoTDB 的数据组织结构和模型。并通过客户端进行简单的SQL操作。
其层级关系为:集团层-电场层-设备层-传感器层。其中ROOT为根节点,传感器层的每一个节点称为叶子节点。在使用IoTDB的过程中,我们可以直接将由ROOT节点到每一个叶子节点路径上的属性用.连接,将其作为一个IoTDB的时间序列的名称。图中最左侧的路径可以生成一个名为ROOT.ln.wf01.wt01.status的时间序列。
得到时间序列的名称之后,我们需要根据数据的实际场景和规模设置存储组。由于在本文所述场景中,每次到达的数据通常以集团为单位(即数据可能为跨电场、跨设备的),为了写入数据时避免频繁切换IO降低系统速度,且满足用户以集团为单位进行物理隔离数据的要求,我们将存储组设置在集团层。
设备 设备指的是在实际场景中拥有传感器的装置。在IoTDB当中,所有的传感器都应有其对应的归属的设备。
传感器 传感器是指在实际场景中的一种检测装置,它能感受到被测量的信息,并能将感受到的信息按一定规律变换成为电信号或其他所需形式的信息输出并发送给IoTDB。在IoTDB当中,存储的所有的数据及路径,都是以传感器为单位进行组织。
存储组 用户可以将任意前缀路径设置成存储组。如有4条时间序列root.vehicle.d1.s1, root.vehicle.d1.s2, root.vehicle.d2.s1, root.vehicle.d2.s2,路径root.vehicle下的两个设备d1,d2可能属于同一个业主,或者同一个厂商,因此关系紧密。这时候就可以将前缀路径root.vehicle指定为一个存储组,这将使得IoTDB将其下的所有设备的数据存储在同一个文件夹下。未来root.vehicle下增加了新的设备,也将属于该存储组。
注意:不允许将一个完整路径(如上例的root.vehicle.d1.s1)设置成存储组。
设置合理数量的存储组可以带来性能的提升:既不会因为产生过多的存储文件(夹)导致频繁切换IO降低系统速度(并且会占用大量内存且出现频繁的内存-文件切换),也不会因为过少的存储文件夹(降低了并发度从而)导致写入命令阻塞。
接下来我们安装IoTDB,安装前需要保证设备上配有JDK=1.8的运行环境,并配置好JAVA_HOME环境变量。IoTDB支持多种安装途径。用户能够正常的使用三种方式对IoTDB进行安装——下载二进制可运行程序、使用源码、使用docker镜像。
在这里,我们首先介绍一下使用Cli工具创建时间序列、插入数据并查看数据的方法。
我们能够正常的使用SHOW STORAGE GROUP语句来查看系统当前所有的存储组,SQL语句如下:
存储组设定后,使用CREATE TIMESERIES语句可以创建新的时间序列,创建时间序列时需要定义数据的类型和编码方式。此处我们创建两个时间序列,SQL语句如下:
为了查看指定的时间序列,我们大家可以使用SHOW TIMESERIES Path语句,其中 Path表示时间序列对应的路径,默认值为空,表示查看系统中所有的时间序列。下面是两个例子:
使用SHOW TIMESERIES语句查看系统中存在的所有时间序列,SQL语句如下:
接下来,我们使用INSERT语句向root.ln.wf01.wt01.status时间序列中插入数据,在插入数据时需要首先指定时间戳和路径后缀名称:
最后,我们查询之前插入的数据。使用SELECT语句我们大家可以查询指定的时间序列的数据结果,SQL语句如下:
至此为止,我们一次完整的使用IoTDB之旅就结束了。后面的文章中,我还会为大家持续带来更多更深入的实际案例应用。
路径中包含设备id,从官方文档看声明序列字段时也需要带上设备id,相当于需要为每个设备都声明字段类型及编码,不太好理解,需要看更多的实例理解这种设计
当地时间1月31日,美国有线电视新闻网(CNN)公布了两段最新视频。视频均为手机拍摄,记录下了美国华盛顿里根机场附近发生的客机与直升机相撞坠河事故的细节画面。在第一段视频中,直升机从屏幕左侧快速飞越波托马克河,直升机尾部和机身上均有红色灯光闪烁,机头则闪烁绿光。
新华社 作者 杨守勇 邵琨吃喝场所更加隐秘、一次接待两轮安排……“新华视点”记者正常采访发现,一些地方少数领导干部违规吃喝现象依然存在,但更加隐蔽。春节前后是“”问题的高发期。纪检监察部门提醒,对党员特别是领导干部来说,越是逢年过节,越要遵纪守法,勿因过节而失节。
在锣鼓喧天中,在鞭炮齐鸣里,滚灯翻涌着岁岁平安,舞动着年年有余。苏有朋、陈伟霆、张艺兴如意舞步,踏歌而至。春节申遗成功后的首届总台春晚,热烈开场!©2025中央广播电视总台版权所有。未经许可,请勿转载使用。
近日,广东惠州一男子花6元中1500万元大奖:激动的一夜没睡,先买房剩下存银行。
2025年,东航国产大飞机C919首次服务广东春运市场。飞机来来去去,旅客走走停停。在这举国同庆的日子里,很少有人注意到,每次飞机停稳后,身穿反光衣出现在客机周围的民航人。
在阅读此文之前,麻烦您点击一下“关注”,既方便您进行讨论和分享,又能给您带来不一样的参与感,感谢您的支持文、编辑小娄2022年12月29日这天,消失在大众视野许久的央视主持人朱军在社交平台上更新了一则内容。
上一篇:
积木云 - OFweek物联网
下一篇:
2024淘宝年度十大产品出炉