Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added src/.vuepress/public/img/Modeling-scheme01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/.vuepress/public/img/Modeling-scheme02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/.vuepress/public/img/Modeling-scheme03.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/.vuepress/public/img/Modeling-scheme04.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/.vuepress/public/img/Modeling-scheme05.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/.vuepress/public/img/Modeling-scheme06.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -29,134 +29,206 @@

## 2 IoTDB 的两种时序模型

> IoTDB 提供了两种数据建模方式——树模型和表模型,以满足用户多样化的应用需求。
> IoTDB 提供了两种数据建模方式——树模型和表模型,其特点分别如下:

### 2.1 树模型
**树模型**:以测点为对象进行管理,每个测点对应一条时间序列,测点名按`.`分割可形成一个树形目录结构,与物理世界一一对应,对测点的读写操作简单直观。

以测点为单元进行管理,每个测点对应一条时间序列,测点名按逗号分割可看作一个树形目录结构,与物理世界一一对应,简单直观
**表模型**:推荐为每类设备创建一张表,同类设备的物理量采集都具备一定共性(如都采集温度和湿度物理量),数据分析灵活丰富

示例:下图是一个风电场的建模管理,通过多个层级【集团】-【风电场】-【风机】-【物理量】可以唯一确定一个实体测点。
### 2.1 模型特点

<div style="text-align: center;">
<img src="/img/data-modeling01.png" alt="" style="width: 70%;"/>
</div>
两种模型有各自的适用场景。

### 2.2 表模型
以下表格从适用场景、典型操作等多个维度对树模型和表模型进行了对比。用户可以根据具体的使用需求,选择适合的模型,从而实现数据的高效存储和管理。

一张表管理一类设备。下图是一个工厂设备的建模管理,每个设备的物理量采集都具备一定共性(如都采集温度和湿度物理量、同一设备的物理量同频采集等)。

此时通过【地区】-【工厂】-【设备】(下图橙色列,又称设备标签)可以唯一确定一个实体设备,同时一个设备的描述信息【型号】【维护周期】(下图黄色列,又称设备属性/描述信息)也可在表格里进行记录。设备最终采集的指标为【温度】、【湿度】、【状态】、【到达时间】(下图蓝色列)。
<table style="text-align: center;">
<tr>
<td>对比维度</td>
<td>树模型</td>
<td>表模型</td>
</tr>
<tr>
<td>适用场景</td>
<td>测点管理,监控场景</td>
<td>设备管理,分析场景</td>
</tr>
<tr>
<td>典型操作</td>
<td>指定点位路径进行读写</td>
<td>通过标签进行数据筛选分析</td>
</tr>
<tr>
<td>结构特点</td>
<td>和文件系统一样灵活增删</td>
<td>模板化管理,便于数据治理</td>
</tr>
<tr>
<td>语法特点</td>
<td>简洁</td>
<td>标准</td>
</tr>
<tr>
<td>性能对比</td>
<td colspan="2">相同</td>
</tr>
</table>

<div style="text-align: center;">
<img src="/img/data-modeling02.png" alt="" style="width: 70%;"/>
</div>
**注意:**
- 同一个集群实例中可以存在两种模型空间,不同模型的语法、数据库命名方式不同,默认不互相可见。

### 2.3 模型选择
- 在通过客户端工具 Cli 或 SDK 建立数据库连接时,需要通过 sql_dialect 参数指定使用的模型语法(默认使用树语法进行操作)。

两种模型有各自的适用场景。

树模型采用层级式结构,适合实时监控场景,能够直观映射物理设备的层级关系;表模型以设备为管理单位,适合大规模设备的数据管理和多属性关联分析,能够高效支持复杂的批量查询需求。
## 应用场景

以下表格从适用场景、典型操作等多个维度对树模型和表模型进行了对比。用户可以根据具体的使用需求,选择适合的模型,从而实现数据的高效存储和管理。
应用场景主要包括三类:

| 对比维度 | 树模型 | 表模型 |
| -------- | ---------------------- | ------------------------ |
| 适用场景 | 点位监控场景 | 多维分析场景 |
| 典型操作 | 指定点位路径进行读写 | 通过标签进行数据筛选分析 |
| 结构特点 | 和文件系统一样灵活增删 | 模板化管理,便于数据治理 |
| 语法特点 | 简洁 | 标准 |
- 场景一:使用树模型进行数据的读写

**注意:**
- 同一个集群实例中可以存在两种模型空间,不同模型的语法、数据库命名方式不同,默认不互相可见。
- 在通过客户端工具 Cli 或 SDK 建立数据库连接时,需要通过 sql_dialect 参数指定使用的模型语法(默认使用树语法进行操作)。
- 场景二:使用表模型进行数据的读写

- 场景三:共用一份数据,使用树模型进行数据读写、使用表模型进行数据分析

## 3 树模型
![](/img/%E5%BB%BA%E6%A8%A1%E6%96%B9%E6%A1%88%E8%AE%BE%E8%AE%A101.png)

### 3.1 特点

### 3 场景一:树模型

#### 3.1 特点

- 简单直观,和物理世界的监测点位一一对应

- 类似文件系统一样灵活,可以设计任意分支结构

- 适用 DCS、SCADA 等工业监控场景

### 3.2 基础概念
#### 3.2 基础概念

| **概念** | **定义** |
| -------------------- | ------------------------------------------------------------ |
| **数据库** | 定义:一个以 root. 为前缀的路径<br>命名推荐:仅包含 root 的下一级节点,如 root.db<br>数量推荐:上限和内存相关,一个数据库也可以充分利用机器资源,无需为性能原因创建多个数据库<br>创建方式:推荐手动创建,也可创建时间序列时自动创建(默认为 root 的下一级节点) |
| **时间序列(测点)** | 定义:<br>1. 一个以数据库路径为前缀的、由 . 分割的路径,可包含任意多个层级,如 root.db.turbine.device1.metric1 <br>2. 每个时间序列可以有不同的数据类型。<br>命名推荐:<br>1. 仅将唯一定位时间序列的标签(类似联合主键)放入路径中,一般不超过10层<br>2. 通常将基数(不同的取值数量)少的标签放在前面,便于系统将公共前缀进行压缩<br>数量推荐:<br>1. 集群可管理的时间序列总量和总内存相关,可参考资源推荐章节<br>2. 任一层级的子节点数量没有限制<br>创建方式:可手动创建或在数据写入时自动创建。 |
| **设备** | 定义:倒数第二级为设备,如 root.db.turbine.**device1**.metric1中的“device1”这一层级即为设备<br>创建方式:无法仅创建设备,随时间序列创建而存在 |

### 3.3 建模示例
#### 3.3 建模示例

#### 3.3.1 有多种类型的设备需要管理,如何建模?
##### 3.3.1 有多种类型的设备需要管理,如何建模?

- 如场景中不同类型的设备具备不同的层级路径和测点集合,可以在数据库节点下按设备类型创建分支。每种设备下可以有不同的测点结构。

<div style="text-align: center;">
<img src="/img/data-modeling03.png" alt="" style="width: 70%;"/>
<img src="/img/Modeling-scheme04.png" alt="" style="width: 70%;"/>
</div>

#### 3.3.2 如果场景中没有设备,只有测点,如何建模?
##### 3.3.2 如果场景中没有设备,只有测点,如何建模?

- 如场站的监控系统中,每个测点都有唯一编号,但无法对应到某些设备。

<div style="text-align: center;">
<img src="/img/data-modeling04.png" alt="" style="width: 70%;"/>
</div>

#### 3.3.3 如果在一个设备下,既有子设备,也有测点,如何建模?
##### 3.3.3 如果在一个设备下,既有子设备,也有测点,如何建模?

- 如在储能场景中,每一层结构都要监控其电压和电流,可以采用如下建模方式
- 如在储能场景中,每一层结构都要监控其电压和电流,可以采用如下建模方式

<div style="text-align: center;">
<img src="/img/data-modeling05.png" alt="" style="width: 70%;"/>
<img src="/img/Modeling-scheme05.png" alt="" style="width: 70%;"/>
</div>


## 4 表模型
### 4 场景二:表模型

#### 4.1 特点

### 4.1 特点
- 以时序表建模管理设备时序数据,便于使用标准 SQL 进行分析

- 以标准关系建模管理设备时序数据,便于使用标准 SQL 进行分析
- 适用物联网数据分析场景,或从其他时序数据库迁移至 IoTDB 的场景
- 适用于设备数据分析或从其他数据库迁移至 IoTDB 的场景

### 4.2 基础概念
#### 4.2 基础概念

- 数据库:可管理多类设备

- 时序表:对应一类设备

| **列类别** | **定义** |
| --------------------------- | ------------------------------------------------------------ |
| **时间列(TIME)** | 每个时序表必须有一个时间列,数据类型为 TIMESTAMP,名称可以自定义 |
| **时间列(TIME)** | 每个时序表必须有一个时间列,且列名必须为 time,数据类型为 TIMESTAMP |
| **标签列(TAG)** | 设备的唯一标识(联合主键),可以为 0 至多个<br>标签信息不可修改和删除,但允许增加<br>推荐按粒度由大到小进行排列 |
| **测点列(FIELD)** | 一个设备采集的测点可以有1个至多个,值随时间变化<br>表的测点列没有数量限制,可以达到数十万以上 |
| **属性列(ATTRIBUTE)** | 对设备的补充描述,**不随时间变化**<br>设备属性信息可以有0个或多个,可以更新或新增<br>少量希望修改的静态属性可以存至此列 |


数据筛选效率:时间列=标签列>属性列>测点列

### 4.3 建模示例
#### 4.3 建模示例

#### 4.3.1 有多种类型的设备需要管理,如何建模?
##### 4.3.1 有多种类型的设备需要管理,如何建模?

- 推荐为每一类型的设备建立一张表,每个表可以具有不同的标签和测点集合
- 推荐为每一类型的设备建立一张表,每个表可以具有不同的标签和测点集合。
- 即使设备之间有联系,或有层级关系,也推荐为每一类设备建一张表。

<div style="text-align: center;">
<img src="/img/data-modeling06.png" alt="" style="width: 70%;"/>
</div>

#### 4.3.2 如果没有设备标识列和属性列,如何建模?
##### 4.3.2 如果没有设备标识列和属性列,如何建模?

- 列数没有数量限制,可以达到数十万以上。

<div style="text-align: center;">
<img src="/img/data-modeling07.png" alt="" style="width: 70%;"/>
</div>

#### 4.3.3 如果在一个设备下,既有子设备,也有测点,如何建模?
##### 4.3.3 如果在一个设备下,既有子设备,也有测点,如何建模?

- 设备之间存在嵌套关系,每个设备可以有多个子设备及测点信息,推荐建立多个表进行管理
- 每个设备有多个子设备及测点信息,推荐为每类设备建一个表进行管理

<div style="text-align: center;">
<img src="/img/data-modeling09.png" alt="" style="width: 70%;"/>
</div>
<img src="/img/Modeling-scheme06.png" alt="" style="width: 70%;"/>
</div>

### 5 场景三:双模型结合(企业版功能)

#### 5.1 特点

- 巧妙融合了树模型与表模型的优点,共用一份数据,写入灵活,查询丰富。

- 数据写入阶段,采用树模型语法,支持数据灵活接入和扩展。

- 数据分析阶段,采用表模型语法,允许用户通过标准 SQL 查询语言,执行复杂的数据分析。

#### 5.2 建模示例

##### 5.2.1 有多种类型的设备需要管理,如何建模?

- 场景中不同类型的设备具备不同的层级路径和测点集合。

- 树模型:在数据库节点下按设备类型创建分支,每种设备下可以有不同的测点结构。

- 表视图:为每种类型的设备建立一张表视图,每个表视图具有不同的标签和测点集合。

<div style="text-align: center;">
<img src="/img/Modeling-scheme01.png" alt="" style="width: 70%;"/>
</div>

##### 5.2.2 如果没有设备标识列和属性列,如何建模?

- 树模型:每个测点都有唯一编号,但无法对应到某些设备。

- 表视图:将所有测点放入一张表中,测点列数没有数量限制,可以达到数十万以上。若测点具有相同的数据类型,可将测点作为同一类设备。

<div style="text-align: center;">
<img src="/img/Modeling-scheme02.png" alt="" style="width: 70%;"/>
</div>

##### 5.2.3 如果在一个设备下,既有子设备,也有测点,如何建模?

- 树模型:按照物理世界的监测点,对每一层结构进行建模。

- 表视图:按照设备分类,建立多个表对每一层结构信息进行管理。

<div style="text-align: center;">
<img src="/img/Modeling-scheme03.png" alt="" style="width: 70%;"/>
</div>
Loading