[English](https://github.com/apache/iotdb/blob/master/./README.md | [中文](https://github.com/apache/iotdb/blob/master/./README_ZH.md
IoTDB
概述
IoTDB(物联网数据库)是一个针对时间序列数据的数据管理系统,为用户提供特定服务,包括数据采集、存储和分析。由于其轻量级结构、高性能和易用特性,以及与Hadoop和Spark生态系统的无缝集成,IoTDB满足了工业物联网领域海量数据集存储、高吞吐量数据输入和复杂数据分析的需求。
IoTDB依赖于TsFile,这是一种为时间序列数据设计的列式存储文件格式。TsFile项目的iotdb
分支用于为IoTDB项目部署SNAPSHOT版本。
主要特性
IoTDB的主要特性如下:
- 灵活的部署策略。IoTDB为用户提供了在云平台或终端设备上的一键式安装工具,以及连接云平台和终端数据的数据同步工具。
- 硬件成本低。IoTDB可以达到很高的磁盘存储压缩比。
- 高效的目录结构。IoTDB支持智能网络设备复杂时间序列数据结构的高效组织、同类型设备时间序列数据的组织,以及海量复杂时间序列数据目录的模糊搜索策略。
- 高吞吐量读写。IoTDB支持数百万低功耗设备的强连接数据访问,以及上述智能网络设备和混合设备的高速数据读写。
- 丰富的查询语义。IoTDB支持跨设备和测量的时间序列数据时间对齐、时间序列领域的计算(频域转换)以及时间维度上丰富的聚合函数支持。
- 易于上手。IoTDB支持类SQL语言、JDBC标准API和易于使用的导入/导出工具。
- 与当前开源生态系统无缝集成。IoTDB支持分析生态系统,如Hadoop和Spark,以及可视化工具,如Grafana。
有关IoTDB的最新信息,请访问IoTDB官方网站。如果您在使用IoTDB时遇到任何问题或发现任何bug,请在Jira上报告问题。
大纲
快速入门
本简短指南将带您了解使用IoTDB的基本流程。如需更详细的介绍,请访问我们网站的用户指南。
先决条件
要使用IoTDB,您需要具备以下条件:
- Java >= 1.8(已验证1.8、11到17版本。请确保环境路径已正确设置)。
- Maven >= 3.6(如果您想从源代码编译和安装IoTDB)。
- 将最大打开文件数设置为65535,以避免"打开的文件过多"错误。
- (可选)将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 install
或yum install
或brew install
来安装Thrift编译器。(如果您已经安装了Thrift编译器,请跳过此步骤。)
然后,在运行Maven时可以添加以下参数:-Dthrift.download-url=http://apache.org/licenses/LICENSE-2.0.txt -Dthrift.exec.absolute.path=<YOUR LOCAL THRIFT BINARY FILE>
。
如果没有,那么你必须编译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.bat
、datanode-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
- 查询系统中的所有时间序列:
IoTDB> SHOW TIMESERIES
+-----------------------------+-----+-------------+--------+--------+-----------+----+----------+
| 时间序列|别名|数据库|数据类型|编码|压缩|标签|属性|
+-----------------------------+-----+-------------+--------+--------+-----------+----+----------+
|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|
+-----------------------------+-----+-------------+--------+--------+-----------+----+----------+
总行数 = 2
- 查询特定时间序列(root.ln.wf01.wt01.status):
IoTDB> SHOW TIMESERIES root.ln.wf01.wt01.status
+------------------------+-----+-------------+--------+--------+-----------+----+----------+
| 时间序列|别名|数据库|数据类型|编码|压缩|标签|属性|
+------------------------+-----+-------------+--------+--------+-----------+----+----------+
|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
+------------------------+------------------------+
| 时间|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
+------------------------+-----------------------------+------------------------+
| 时间|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
+-----------------------------+-----------------------------+------------------------+
| 时间|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导入导出工具的使用
编译时常见问题
联系我们
QQ群
- Apache IoTDB 用户群: 659990460
微信群
- 添加好友:
tietouqiao
或liutaohua001
,然后我们会邀请你加入群组。
Slack
更多信息请参见加入社区!