更新时间:2024-10-24 GMT+08:00

IoTDB基本原理

IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。 Apache IoTDB采用轻量式架构,具有高性能和丰富的功能。

IoTDB从存储上对时间序列进行排序,索引和chunk块存储,大大的提升时序数据的查询性能。通过Raft协议,来确保数据的一致性。针对时序场景,对存储数据进行预计算和存储,提升分析场景的性能。针对时序数据特征,进行强有力的数据编码和压缩能力,同时其自身的副本机制也保证了数据的安全,并与Apache Hadoop和Flink等进行了深度集成,可以满足工业物联网领域的海量数据存储、高速数据读取和复杂数据分析需求。

IoTDB结构

IoTDB套件由若干个组件构成,共同形成数据收集、数据写入、数据存储、数据查询、数据可视化、数据分析等一系列功能。

图1展示了使用IoTDB套件的全部组件形成的整体应用架构,IoTDB特指其中的时间序列数据库组件。

图1 IoTDB结构
  • 用户可以通过JDBC/Session将来自设备传感器上采集的时序数据和服务器负载、CPU内存等系统状态数据、消息队列中的时序数据、应用程序的时序数据或者其他数据库中的时序数据导入到本地或者远程的IoTDB中。用户还可以将上述数据直接写成本地(或位于HDFS上)的TsFile文件。
  • 用户可以将TsFile文件写入到HDFS上,进而满足Hadoop、Flink等数据处理任务的访问。
  • 对于写入到HDFS或者本地的TsFile文件,可以利用TsFile-Hadoop或TsFile-Flink连接器,允许Hadoop或Flink进行数据处理。
  • 对于分析的结果,可以写回成TsFile文件。
  • IoTDB和TsFile还提供了相应的客户端工具,满足用户以SQL形式、脚本形式和图形形式写入和查看数据的各种需求。
IoTDB服务包括IoTDBServer(DataNode)和ConfigNode两种角色。由于社区版角色名称DataNode和HDFS角色同名,因此将DataNode更名为IoTDBServer,如图2所示。
  • ConfigNode:管理角色,负责DataNode数据分片,负载均衡等。
  • IoTDBServer(DataNode):存储角色,负责数据存储、查询和写入等功能。
图2 IoTDB分布式架构

IoTDB原理

根据属性层级、属性涵盖范围以及数据之间的从属关系,可将IoTDB数据模型表示为如图3所示的属性层级组织结构,即“电力集团层-电厂层-设备层-传感器层”。其中ROOT为根节点,传感器层的每一个节点为叶子节点。IoTDB的语法规定,ROOT节点到叶子节点的路径以“.”连接,以此完整路径命名IoTDB中的一个时间序列。例如,下图最左侧路径对应的时间序列名称为“ROOT.ln.wf01.wt01.status”。

图3 IoTDB数据模型

IoTDB与其他组件的关系

IoTDB存储数据在本地,因此在存储上不依赖于其他任何组件。但是安全集群的环境上,IoTDB依赖于KrbServer组件来进行Kerberos认证。