首页
学习
活动
专区
圈层
工具
发布
MCP广场 >详情页
IoTDB 时间序列数据库2026-05-10205分享添加福利群:解决AI开发者的「MCP实战痛点」
IoTDB(物联网数据库)是一个专为时间序列数据设计的高效数据管理系统,广泛应用于工业物联网领域。它支持数据采集、存储和分析,具备轻量级结构、高性能和与Hadoop、Spark等生态系统的无缝集成能力。IoTDB的主要特性包括灵活的部署策略、低硬件成本、高效的目录结构、高吞吐量的读写、丰富的查询语义以及易于上手的SQL语言和JDBC API。它能够满足海量数据存储、高吞吐量数据输入和复杂数据分析的需求,适用于智能联网设备的时间序列数据管理。IoTDB依赖于TsFile列式存储格式,提供了一键安装工具和云平台与终端设备之间的数据同步功能。
By apache
2026-05-10205
github
详情内容

English | 中文

IoTDB

Unit-Test codecov GitHub release License IoTDB Website Maven Version Gitpod Ready-to-Code Slack Status

概述

IoTDB(物联网数据库)是一个用于时间序列数据的数据管理系统,为用户提供数据采集、存储和分析等特定服务。由于其轻量级结构、高性能和可用性,以及与 Hadoop 和 Spark 生态系统的无缝集成,IoTDB 能够满足工业物联网领域中海量数据存储、高吞吐量数据输入和复杂数据分析的需求。

点击查看更多信息

IoTDB 依赖于 TsFile,这是一个为时间序列数据设计的列式存储文件格式。TsFile 项目的 iotdb 分支用于为 IoTDB 项目部署 SNAPSHOT 版本。

主要特性

IoTDB 的主要特性如下:

  1. 灵活的部署策略。IoTDB 为用户提供了一键安装工具,无论是在云平台还是终端设备上,以及一个在云平台和终端之间进行数据同步的工具。
  2. 硬件成本低。IoTDB 可以实现磁盘存储的高压缩比。
  3. 高效的目录结构。IoTDB 支持对智能联网设备的复杂时间序列数据结构进行高效组织,对同类型设备的时间序列数据进行组织,以及对海量复杂时间序列数据目录的模糊搜索策略。
  4. 高吞吐量的读写。IoTDB 支持数百万低功耗设备的强连接数据访问,以及对智能联网设备和上述混合设备的高速数据读写。
  5. 丰富的查询语义。IoTDB 支持跨设备和测量的时间序列数据的时间对齐、时间序列字段中的计算(频域变换)以及时间维度上的丰富聚合函数支持。
  6. 易于上手。IoTDB 支持类似 SQL 的语言、JDBC 标准 API 和易于使用的导入/导出工具。
  7. 与最先进的开源生态系统无缝集成。IoTDB 支持分析生态系统,如 Hadoop 和 Spark,以及可视化工具,如 Grafana。

有关 IoTDB 的最新信息,请访问 IoTDB 官方网站。如果您在使用 IoTDB 时遇到任何问题或发现任何错误,请在 Jira 中报告问题。

大纲

快速开始

本简短指南将带您了解使用 IoTDB 的基本过程。更详细的介绍,请访问我们网站的 用户指南

先决条件

要使用 IoTDB,您需要具备:

  1. Java >= 1.8(1.8、11 到 17 已验证。请确保已相应地设置环境路径)。
  2. Maven >= 3.6(如果您想从源代码编译和安装 IoTDB)。
  3. 将最大打开文件数设置为 65535,以避免“打开文件过多”的错误。
  4. (可选)将 somaxconn 设置为 65535,以避免系统在高负载时出现“连接重置”错误。
    # Linux
    > sudo sysctl -w net.core.somaxconn=65535
    
    # FreeBSD 或 Darwin
    > sudo sysctl -w kern.ipc.somaxconn=65535
    

Linux

(本指南基于 Ubuntu 22.04 的安装。)

Git

确保 Git 已安装,如果缺少,可以通过以下方式安装:

sudo apt install git

Java

确保 Java 已安装,如果缺少,可以通过以下方式安装:

sudo apt install default-jdk

Flex

sudo apt install flex

Bison

sudo apt install bison

Boost

sudo apt install libboost-all-dev

OpenSSL 头文件

通常 OpenSSL 已经安装,但缺少我们编译所需的头文件。 因此,请确保已安装这些头文件:

sudo apt install libssl-dev

Mac OS

Git

首先确保 git 正常工作。

通常在新 Mac 上,只要您在 Terminal 窗口中输入 git,就会弹出一个窗口,询问您是否要完成安装 Mac 开发者工具。 只需选择“是”。 完成后,您就可以自由使用 git 了。

Homebrew

然后安装 Homebrew - 如果尚未安装,因为我们将使用 Homebrew 安装所有内容。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Java

完成后安装 Java,如果尚未安装:

brew install java

根据您的 Homebrew 版本,它会告诉您执行以下操作之一(取决于您设备中的处理器类型)。

主要在基于 Intel 的型号上:

sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

主要在基于 ARM 的型号上:

sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

CPP 先决条件

构建 Thrift 需要我们在图中添加两个依赖项。

但这仅在启用 with-cpp 配置文件时需要:

brew install boost
brew install bison
brew install openssl

Windows

Chocolatey

然后安装 Chocolatey - 如果尚未安装,因为我们将使用 Chocolatey 安装所有内容。

https://chocolatey.org/install

Git

choco install git.install

Java

choco install openjdk

Visual Studio 19 2022

choco install visualstudio2022community
choco install visualstudio2022buildtools
choco install visualstudio2022-workload-nativedesktop

Flex / Bison

choco install winflexbison

Boost

choco install boost-msvc-14.2

OpenSSL

choco install openssl

安装

IoTDB 提供了三种安装方法,您可以参考以下建议,选择最适合您的方法:

  • 从源代码安装。如果您需要自己修改代码,可以使用此方法。
  • 从二进制文件安装。从官方网站下载二进制文件。这是推荐的方法,您将获得一个开箱即用的二进制发布包。
  • 使用 Docker:dockerfile 的路径在这里

在快速开始中,我们简要介绍了如何使用源代码安装 IoTDB。更多信息,请参阅 用户指南

从源码构建

准备 Thrift 编译器

如果您使用的是 Windows,请跳过本章节。

由于我们在 RPC 模块(通信和协议定义)中使用 Thrift,因此在编译过程中涉及 Thrift,因此需要 Thrift 编译器 0.13.0(或更高版本)来生成 Thrift Java 代码。Thrift 官方提供了 Windows 的二进制编译器,但不幸的是,他们没有为 Unix 操作系统提供。

如果您有权限安装新软件,请使用 apt installyum installbrew install 来安装 Thrift 编译器。(如果您已经安装了 Thrift 编译器,请跳过此步骤。)然后,您可以在运行 Maven 时添加以下参数:-Dthrift.download-url=http://apache.org/licenses/LICENSE-2.0.txt -Dthrift.exec.absolute.path=<您的本地 Thrift 二进制文件>

如果没有,那么您必须编译 Thrift 编译器,这需要您首先安装一个 boost 库。 因此,我们自己编译了一个 Unix 编译器并将其放在 GitHub 上,借助 Maven 插件,它将在编译过程中自动下载。 此编译器适用于 gcc8 或更高版本、Ubuntu、MacOS 和 CentOS,但早期版本和其他操作系统不保证。

如果由于网络问题无法自动下载 Thrift 编译器,您可以自己下载,然后: 将您的 Thrift 文件重命名为 {project_root}\thrift\target\tools\thrift_0.12.0_0.13.0_linux.exe; 或者,添加 Maven 命令: -Dthrift.download-url=http://apache.org/licenses/LICENSE-2.0.txt -Dthrift.exec.absolute.path=<您的本地 Thrift 二进制文件>

编译 IoTDB

您可以从以下网址下载源代码:

git clone https://github.com/apache/iotdb.git

默认的开发分支是 master 分支,如果您想使用发布的版本 x.x.x:

git checkout vx.x.x

或者检出到某个大版本的分支,例如 1.0 的分支是 rel/1.0。

git checkout rel/x.x

从源码构建 IoTDB

在 iotdb 的根路径下:

> mvn clean package -pl distribution -am -DskipTests

构建完成后,IoTDB 发行版位于文件夹:"distribution/target"。

仅构建 cli

在 iotdb/iotdb-client 路径下:

> mvn clean package -pl cli -am -DskipTests

构建完成后,IoTDB cli 位于文件夹 "cli/target"。

构建其他内容

使用 -P with-cpp 编译 cpp 客户端。(更多详情,请阅读 client-cpp 的 Readme 文件。)

注意:目录 "thrift/target/generated-sources/thrift"、"thrift-sync/target/generated-sources/thrift"、"thrift-cluster/target/generated-sources/thrift"、"thrift-influxdb/target/generated-sources/thrift" 和 "antlr/target/generated-sources/antlr4" 需要添加到源根目录,以避免 IDE 中的编译错误。

在 IDEA 中,您只需在成功运行 mvn package 后,右键单击根项目名称并选择 "Maven->Reload Project"。

配置

配置文件位于 "conf" 文件夹下。

  • 环境配置模块(datanode-env.batdatanode-env.sh),
  • 系统配置模块(iotdb-datanode.properties
  • 日志配置模块(logback.xml)。

更多信息,请参阅 配置手册

启动

您可以通过以下步骤测试安装。如果执行后没有返回错误,则安装完成。

启动 IoTDB

用户可以通过 sbin 文件夹下的 start-standalone 脚本启动 1C1D IoTDB。

# Unix/OS X
> sbin/start-standalone.sh

# Windows
> sbin\start-standalone.bat

使用 IoTDB

使用 Cli

IoTDB 提供了多种与服务器交互的方式,这里我们介绍使用 Cli 工具插入和查询数据的基本步骤。

安装 IoTDB 后,有一个默认用户 'root',其默认密码也是 'root'。用户可以使用此默认用户登录 Cli 以使用 IoTDB。Cli 的启动脚本是 sbin 文件夹中的 start-cli 脚本。执行脚本时,用户应指定 IP、PORT、USER_NAME 和 PASSWORD。默认参数为 "-h 127.0.0.1 -p 6667 -u root -pw -root"。

以下是启动 Cli 的命令:

# Unix/OS X
> sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root

# Windows
> sbin\start-cli.bat -h 127.0.0.1 -p 6667 -u root -pw root

命令行 cli 是交互式的,因此如果一切准备就绪,您应该会看到欢迎标志和语句:

 _____       _________  ______   ______
|_   _|     |  _   _  ||_   _ `.|_   _ \
  | |   .--.|_/ | | \_|  | | `. \ | |_) |
  | | / .'`\ \  | |      | |  | | |  __'.
 _| |_| \__. | _| |_    _| |_.' /_| |__) |
|_____|'.__.' |_____|  |______.'|_______/  version x.x.x


IoTDB> login successfully
IoTDB>

IoTDB 的基本命令

现在,让我们介绍创建时间序列、插入数据和查询数据的方式。

IoTDB 中的数据以时间序列的形式组织。每个时间序列包括多个数据-时间对,并由一个数据库拥有。在定义时间序列之前,我们应首先使用 CREATE DATABASE 定义一个数据库,以下是一个示例:

IoTDB> CREATE DATABASE root.ln

我们还可以使用 SHOW DATABASES 检查已创建的数据库:

IoTDB> SHOW DATABASES
+-------------+
|     Database|
+-------------+
|      root.ln|
+-------------+
Total line number = 1

设置数据库后,我们可以使用 CREATE TIMESERIES 创建新的时间序列。在创建时间序列时,我们应定义其数据类型和编码方案。这里我们创建两个时间序列:

IoTDB> CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN
IoTDB> CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE

为了查询特定的时间序列,我们可以使用 SHOW TIMESERIES 表示时间序列的位置。默认值为 "null",即查询系统中的所有时间序列(与使用 "SHOW TIMESERIES root" 相同)。以下是一些示例:

  1. 查询系统中的所有时间序列:
IoTDB> SHOW TIMESERIES
+-----------------------------+-----+-------------+--------+--------+-----------+----+----------+
|                   Timeseries|Alias|Database|DataType|Encoding|Compression|Tags|Attributes|
+-----------------------------+-----+-------------+--------+--------+-----------+----+----------+
|root.ln.wf01.wt01.temperature| null|      root.ln|   FLOAT|     RLE|     SNAPPY|null|      null|
|     root.ln.wf01.wt01.status| null|      root.ln| BOOLEAN|   PLAIN|     SNAPPY|null|      null|
+-----------------------------+-----+-------------+--------+--------+-----------+----+----------+
Total line number = 2
  1. 查询特定时间序列 (root.ln.wf01.wt01.status):
IoTDB> SHOW TIMESERIES root.ln.wf01.wt01.status
+------------------------+-----+-------------+--------+--------+-----------+----+----------+
|              timeseries|alias|database|dataType|encoding|compression|tags|attributes|
+------------------------+-----+-------------+--------+--------+-----------+----+----------+
|root.ln.wf01.wt01.status| null|      root.ln| BOOLEAN|   PLAIN|     SNAPPY|null|      null|
+------------------------+-----+-------------+--------+--------+-----------+----+----------+
总行数 = 1

插入时间序列数据是IoTDB的基本操作,您可以使用 ‘INSERT’ 命令完成此操作。在插入之前,您应该分配时间戳和后缀路径名:

IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp,status) values(100,true);
IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp,status,temperature) values(200,false,20.71)

您刚刚插入的数据将显示如下:

IoTDB> SELECT status FROM root.ln.wf01.wt01
+------------------------+------------------------+
|                    Time|root.ln.wf01.wt01.status|
+------------------------+------------------------+
|1970-01-01T00:00:00.100Z|                    true|
|1970-01-01T00:00:00.200Z|                   false|
+------------------------+------------------------+
总行数 = 2

您也可以使用一条SQL语句查询多个时间序列数据:

IoTDB> SELECT * FROM root.ln.wf01.wt01
+------------------------+-----------------------------+------------------------+
|                    Time|root.ln.wf01.wt01.temperature|root.ln.wf01.wt01.status|
+------------------------+-----------------------------+------------------------+
|1970-01-01T00:00:00.100Z|                         null|                    true|
|1970-01-01T00:00:00.200Z|                        20.71|                   false|
+------------------------+-----------------------------+------------------------+
总行数 = 2

在Cli中更改时区,可以使用以下SQL语句:

IoTDB> SET time_zone=+08:00
时区已设置为 +08:00
IoTDB> SHOW time_zone
当前时区:Asia/Shanghai

添加后,查询结果将使用新的时区显示。

IoTDB> SELECT * FROM root.ln.wf01.wt01
+-----------------------------+-----------------------------+------------------------+
|                         Time|root.ln.wf01.wt01.temperature|root.ln.wf01.wt01.status|
+-----------------------------+-----------------------------+------------------------+
|1970-01-01T08:00:00.100+08:00|                         null|                    true|
|1970-01-01T08:00:00.200+08:00|                        20.71|                   false|
+-----------------------------+-----------------------------+------------------------+
总行数 = 2

退出Cli的命令是:

IoTDB> quit
或
IoTDB> exit

有关IoTDB SQL支持的命令的更多信息,请参见用户指南

停止IoTDB

可以使用“ctrl-C”或以下脚本停止服务器:

# Unix/OS X
> sbin/stop-standalone.sh

# Windows
> sbin\stop-standalone.bat

CSV导入导出工具的使用

参见CSV导入导出工具的使用

编译常见问题

参见编译源代码时的常见问题

联系我们

QQ群

  • Apache IoTDB 用户群:659990460

微信群

  • 添加好友:apache_iotdb,我们将邀请您加入群组。

Slack

更多信息请查看 加入社区

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档