时序数据库IoTDB数据模型建模实例详解

一、引言

本文旨在通过具体实例详细介绍IoTDB(Internet of Things Database)的数据模型建模方法,以解决部分用户对实际系统建模的困惑。IoTDB作为一种时间序列数据库,其数据模型与实时库、InfluxDB、OpenTSDB等基于标签的模型有所不同。

二、基于标签的模型概述

在实时库、InfluxDB、OpenTSDB等数据库中,每个测点通常有一个由符号"."连接的多个属性值组成的名称(标签)。例如,在电厂应用中,测点名称可能是"电厂名称.机组.测点编码"。如果将所有测点的数据理解成一张表,则时间和测点名称构成联合主键。在InfluxDB和OpenTSDB中,每条数据包含tag和field的概念,上述数据通常被定义为3个tag和1个field,时间和所有tag列构成联合主键。

三、IoTDB数据模型介绍

IoTDB中的时间序列定义为一个测点不断采集数据,每个数据点带有时间戳,形成一条时间序列。IoTDB的目标场景是管理大量这种时间序列,每个时间序列由路径唯一定位。路径形成树形元数据结构,其中从根节点到倒数第二级的路径代表设备。同一设备的多个测点可以共享一个时间戳写入。

错误建模示例 ‌:

在IoTDB中,如果将Tag的名称定义为一个时间序列,并将Tag值存储为这个时间序列的值,会导致同一个时间序列的同一个时间戳只保留最后写入的点。例如,建立以下两条时间序列(root.sg.taga, root.sg.value),并用来存储多个测点(a1, b1, c1)的值,是错误的建模方式。

正确建模示例 ‌:

应为每个测点创建单独的时间序列,如root.sg.a1, root.sg.b1, root.sg.c1。这样,每个序列的数据可以独立存储和查询。

四、IoTDB查询介绍

IoTDB提供了灵活的查询方式,可以根据路径匹配到所有时间序列,并按照不同的对齐方式展示成一张表。对齐方式包括:

  1. ‌**按照Time对齐(默认)**‌:根据select和from子句中的路径找到所有匹配的时间序列,按时间顺序展示。
  2. 按照设备表展示‌:使用align by device语句,按时间和设备对齐,空值展示为null。
  3. 不对齐‌:每个时间序列独立展示,每个序列有两列(时间列和值列),使用disable align修饰。
五、树形模型的灵活性

IoTDB的树形模型具有高度的灵活性。例如,一个电厂有3个设备,每个设备的发电量是一个时间序列,可以创建3个序列:root.电厂1.设备1.发电量,root.电厂1.设备2.发电量,root.电厂1.设备3.发电量。如果需要增加一个电厂总发电量,只需在电厂下一级增加一个时间序列:root.电厂1.总发电量。

六、与其他模型的比较

与采用关系模型的时序数据库(如TimescaleDB)相比,IoTDB的树形模型具有更高的灵活性,适用于测点数量不确定、设备测点不同时采集的场景。然而,关系模型的学习成本较低,适用于数据较为规整的场景。因此,在选择数据库时,需要根据具体应用场景和需求进行权衡。

七、结语

IoTDB作为一种高效的时间序列数据库,其树形数据模型为大规模时间序列数据的存储和查询提供了有力支持。本文通过具体实例详细介绍了IoTDB的建模方法和查询方式,希望能够帮助用户更好地理解和应用IoTDB。

相关推荐
星哥说事几秒前
开源综合性网络安全检测和运维工具-TscanClient
运维·web安全·开源
ajassi20001 分钟前
开源 java android app 开发(十一)调试、发布
android·java·linux·开源
weixin_505154463 分钟前
数字孪生包含哪些技术和创新?
大数据·人工智能·物联网·数据安全·数字孪生
Winn~9 分钟前
MySQL行锁、记录锁、间隙锁、临建锁、意向锁、表锁
数据库·mysql
snowful world13 分钟前
PolyU Palmprint Database掌纹识别数据集预处理(踩坑版)
数据库·人工智能·opencv
A达峰绮17 分钟前
AI时代的行业重构:机遇、挑战与生存法则
大数据·人工智能·经验分享·ai·推荐算法
Mylvzi32 分钟前
【MySQL 从 0 讲解系列】深入理解 GROUP BY 的本质与应用(含SQL示例+面试题)
数据库·sql·mysql
摇滚侠32 分钟前
elasticSearch是什么,如何使用,有什么用
大数据·elasticsearch·搜索引擎
viperrrrrrrrrr71 小时前
大数据学习(137)-大数据组件运行时角色
大数据·hive·学习·flink·spark
Forest_HAHA1 小时前
<6>-MySQL表的增删查改
数据库·mysql