Apache IoTDB 是一款低成本、高性能的物联网原生时序数据库。它可以解决企业组建物联网大数据平台管理时序数据时所遇到的应用场景复杂、数据体量大、采样频率高、数据乱序多、数据处理耗时长、分析需求多样、存储与运维成本高等多种问题。
一、产品体系
IoTDB 体系由若干个组件构成,帮助用户高效地管理和分析物联网产生的海量时序数据。

其中:
时序数据库(Apache IoTDB):时序数据存储的核心组件,其能够为用户提供高压缩存储能力、丰富时序查询能力、实时流处理能力,同时具备数据的高可用和集群的高扩展性,并在安全层面提供全方位保障。同时 IoTDB 还为用户提供多种应用工具,方便用户配置和管理系统;多语言API和外部系统应用集成能力,方便用户在 IoTDB 基础上构建业务应用。
时序数据标准文件格式(Apache TsFile):该文件格式是一种专为时序数据设计的存储格式,可以高效地存储和查询海量时序数据。目前 IoTDB、AINode 等模块的底层存储文件均由 Apache TsFile 进行支撑。通过 TsFile,用户可以在采集、管理、应用&分析阶段统一使用相同的文件格式进行数据管理,极大简化了数据采集到分析的整个流程,提高时序数据管理的效率和便捷度。
时序模型训推一体化引擎(IoTDB AINode):针对智能分析场景,IoTDB 提供 AINode 时序模型训推一体化引擎,它提供了一套完整的时序数据分析工具,底层为模型训练引擎,支持训练任务与数据管理,与包括机器学习、深度学习等。通过这些工具,用户可以对存储在 IoTDB 中的数据进行深入分析,挖掘出其中的价值。
IoTDB采用"存储-计算"分离的架构,通过LSM-tree存储引擎与列式存储格式,实现高并发写入与低延迟查询的平衡。其核心组件包括:
- ConfigNode:集群元数据管理中心,负责节点协调与路由
- DataNode:数据存储与计算节点,支持水平扩展
- CLI工具:命令行交互界面,支持SQL与InfluxDB协议
二、典型应用场景
| 应用场景 | 数据特点 | IoTDB优势 | 典型案例 |
|---|---|---|---|
| 工业物联网 | 高频传感器数据(1ms~10s间隔),设备多元(万级节点),强时序性 | 1.列式存储+时间分区优化压缩率(10:1) 2.原生支持工业协议(OPC-UA/Modbus) 3.边缘-云端协同架构 | 某汽车厂20000+设备监控,存储成本降低70% |
| 能源电力 | 带质量标签的时序数据,需实时计算(如线损分析),数据生命周期管理(冷热分层) | 1.内置TsFile格式支持数据标记 2.内置聚合函数(avg/max等) 3.TTL自动过期机制 | 某电网公司存储5TB/天的智能电表数据 |
| 智慧城市 | 多源异构数据(交通/环境等),空间-时间双维度查询 | 1.支持时空联合索引 2.与GIS系统集成 3.毫秒级响应千万级数据点查询 | 某城市交通管理系统处理2000+路口的实时流量数据 |
| 车联网 | 高并发写入(10000+TPS),轨迹数据需要压缩存储 | 1.基于内存的写入缓冲 2.专有编码算法(Gorilla/RLBE) 3.支持SQL扩展 | 某新能源车企存储车辆每秒20个传感器的行驶数据 |
| 医疗健康 | 非均匀采样数据(ECG等),需要模式匹配查询 | 1.支持非对齐时间序列存储 2.提供相似性搜索UDF 3.医疗设备SDK集成 | 某三甲医院存储2000+病床的实时生命体征数据 |
| 航空航天 | 超高精度数据(ns级时间戳),需要故障预测 | 1.纳秒级时间精度 2.内置异常检测算法 3.支持联邦查询 | 某卫星系统每秒处理10万+遥测数据点 |
| 智能制造 | 多维度质量分析,需与MES系统集成 | 1.提供质量分析工具包 2.支持Kafka/PLC4X连接器 3.可视化API | 某半导体厂实现生产设备全生命周期数字化 |
三、Docker环境单机部署IoTDB
1、准备IoTDB镜像文件
本例使用的版本为:iotdb:2.0.4-standalone
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/iotdb:2.0.4-standalone
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/iotdb:2.0.4-standalone docker.io/apache/iotdb:2.0.4-standalone
2、编写docker-compose.yml文件
version: "3"
services:
iotdb:
image: apache/iotdb:2.0.4-standalone #使用的镜像
hostname: iotdb
container_name: iotdb
restart: always
ports:
- "6667:6667"
environment:
- cn_internal_address=iotdb
- cn_internal_port=10710
- cn_consensus_port=10720
- cn_seed_config_node=iotdb:10710
- dn_rpc_address=iotdb
- dn_internal_address=iotdb
- dn_rpc_port=6667
- dn_internal_port=10730
- dn_mpp_data_exchange_port=10740
- dn_schema_region_consensus_port=10750
- dn_data_region_consensus_port=10760
- dn_seed_config_node=iotdb:10710
privileged: true
volumes:
- ./iotdb/data:/iotdb/data
- ./iotdb/logs:/iotdb/logs
#- ./iotdb/conf:/iotdb/conf
networks:
iotdb-net:
ipv4_address: 10.21.0.6
networks:
iotdb-net:
#external: true #外部网络
ipam:
config:
- subnet: 10.21.0.0/16
3、启动服务
docker-compose up -d
4、进入IoTDB容器查询服务状态
docker exec -it iotdb /bin/bash

登录数据库
./start-cli.sh -h iotdb

使用show cluster命令查看服务状态

看到服务状态为Running,表示IoTDB就部署成功。
5、修改配置文件
以上部署操作并没有映射出配置文件,这部分操作主要是映射出配置文件
5.1 拷贝容器内的/conf目录至部署目录./iotdb/conf
cd ./iotdb
docker cp iotdb:/iotdb/conf ./iotdb/conf
5.2 修改原docker-compose.yml文件,取消#- ./iotdb/conf:/iotdb/conf注释
version: "3"
services:
iotdb:
image: apache/iotdb:2.0.4-standalone #使用的镜像
hostname: iotdb
container_name: iotdb
restart: always
ports:
- "6667:6667"
environment:
- cn_internal_address=iotdb
- cn_internal_port=10710
- cn_consensus_port=10720
- cn_seed_config_node=iotdb:10710
- dn_rpc_address=iotdb
- dn_internal_address=iotdb
- dn_rpc_port=6667
- dn_internal_port=10730
- dn_mpp_data_exchange_port=10740
- dn_schema_region_consensus_port=10750
- dn_data_region_consensus_port=10760
- dn_seed_config_node=iotdb:10710
privileged: true
volumes:
- ./iotdb/data:/iotdb/data
- ./iotdb/logs:/iotdb/logs
- ./iotdb/conf:/iotdb/conf
networks:
iotdb-net:
ipv4_address: 10.21.0.6
networks:
iotdb-net:
#external: true #外部网络
ipam:
config:
- subnet: 10.21.0.0/16
5.3 重启IoTDB服务
cd ./iotdb
docker-compose down
docker-compse up -d
6、如何修改IoTDB的root用户默认密码
本例中IoTDB运行在Docker环境中
6.1 进入IoTDB容器
docker exec -it iotdb /bin/bash
6.2 启动CLI工具
./start-cli.sh -h iotdb
或
/iotdb/sbin/start-cli.sh -u root -pw root
6.3 执行密码修改
ALTER USER 'root' SET PASSWORD 'new_password';
SQL命令说明
ALTER USER 'root' SET PASSWORD 'new_password';
参数说明:
- username:目标用户名(需用单引号包裹)
- new_password:新密码(需用单引号包裹)