
# IoTDB应用开发简介
#### IoTDB介绍
IoTDB是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点，支持对接Hadoop与Spark生态，适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。
![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
本文档内容仅适用于MRS 3.2.0及之后版本。
#### 常用概念
以电力场景为例，说明如何在IoTDB中创建一个正确的数据模型。
图1电力场景属性层级组织结构   
![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001908939128.png "点击放大")
如[图1]所示，即"电力集团层-电厂层-设备层-传感器层"。其中ROOT为根节点，传感器层的每一个节点为叶子节点。IoTDB的语法规定，ROOT节点到叶子节点的路径以"."连接，以此完整路径命名IoTDB中的一个时间序列。例如，[图1]最左侧路径对应的时间序列名称为"ROOT.ln.wf01.wt01.status"。
基本概念：
- **设备**
  设备指的是在实际场景中拥有传感器的装置。在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"路径下增加了新的设备，也将属于该存储组。
  ![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
  - 设置合理数量的存储组可以带来性能的提升。既不会因为产生过多的存储文件（夹）导致频繁切换IO降低系统速度（并且会占用大量内存且出现频繁的内存-文件切换），也不会因为过少的存储文件夹（降低了并发度）导致写入命令阻塞。
  
  - 用户应根据自己的数据规模和使用场景，平衡存储文件的存储组设置，以达到更好的系统性能。
    
- **时间序列**
  时间序列是IoTDB中的核心概念。时间序列可以被看作产生时序数据的传感器所在的完整路径，在IoTDB中所有的时间序列必须以root开始、以传感器作为结尾。
  
 
 #### IoTDB样例工程介绍
MRS样例工程获取地址为<https://github.com/huaweicloud/huaweicloud-mrs-example>，切换分支为与MRS集群相匹配的版本分支，然后下载压缩包到本地后解压，即可获取各组件对应的样例代码工程。
当前MRS提供以下IoTDB相关样例工程：
表1IoTDB相关样例工程 
| 样例工程位置                               | 描述                                                                                                                                                                                                                                                                              |
|:---|:---|
| iotdb-examples/iotdb-flink-example   | 通过Flink访问IoTDB数据的示例程序，包括FlinkIoTDBSink和FlinkIoTDBSource。 FlinkIoTDBSink可实现通过Flink job将时序数据写入到IoTDB中。FlinkIoTDBSource则通过Flink job将时序数据从IoTDB读取出来并且打印，相关样例介绍请参见[IoTDB Flink样例程序](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_500017.html)。 |
| iotdb-examples/iotdb-jdbc-example    | IoTDB JDBC处理数据Java示例程序。 本示例演示了如何使用JDBC接口连接IoTDB，并执行IoTDB SQL语句，相关样例介绍请参见[IoTDB JDBC样例程序](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_500010.html)。                                                                                      |
| iotdb-examples/iotdb-kafka-example   | 通过Kafka访问IoTDB数据的示例程序。 本示例演示了如何先将时序数据发送到Kafka，再使用多线程将数据写入到IoTDB中，相关样例介绍请参见[IoTDB Kafka样例程序](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_500036.html)。                                                                                   |
| iotdb-examples/iotdb-session-example | IoTDB Session处理数据Java示例程序。 本示例演示了如何使用Session方式连接IoTDB，并执行IoTDB SQL语句，相关样例介绍请参见[IoTDB Session样例程序](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_500011.html)。                                                                               |
| iotdb-examples/iotdb-udf-example     | 该样例程序介绍了如何实现一个简单的IoTDB自定义函数（UDF），相关样例介绍请参见[IoTDB自定义函数（UDF）样例程序](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_500041.html)。                                                                                                                                               |
   
