<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> [English](./README.md) | [ä¸æ–‡](./README_ZH.md) # IoTDB [](https://github.com/apache/iotdb/actions/workflows/main-unix.yml) [](https://github.com/apache/iotdb/actions/workflows/main-win.yml)<!--[](https://coveralls.io/repos/github/apache/iotdb/badge.svg?branch=master)--> [](https://github.com/apache/iotdb/releases) [](https://www.apache.org/licenses/LICENSE-2.0.html)     [](https://lgtm.com/projects/g/apache/iotdb/context:java) [](https://iotdb.apache.org/) [](http://search.maven.org/#search|gav|1|g:"org.apache.iotdb") [](https://join.slack.com/t/apacheiotdb/shared_invite/zt-qvso1nj8-7715TpySZtZqmyG5qXQwpg) # 简介 IoTDB (Internet of Things Database) 是一款时åºæ•°æ®åº“管ç†ç³»ç»Ÿï¼Œå¯ä»¥ä¸ºç”¨æˆ·æ供数æ®æ”¶é›†ã€å˜å‚¨å’Œåˆ†æžç‰æœåŠ¡ã€‚IoTDB由于其轻é‡çº§æž¶æž„ã€é«˜æ€§èƒ½å’Œé«˜å¯ç”¨çš„特性,以åŠä¸Ž Hadoop å’Œ Spark 生æ€çš„æ— ç¼é›†æˆï¼Œæ»¡è¶³äº†å·¥ä¸š IoT 领域ä¸æµ·é‡æ•°æ®å˜å‚¨ã€é«˜åžåé‡æ•°æ®å†™å…¥å’Œå¤æ‚æ•°æ®æŸ¥è¯¢åˆ†æžçš„需求。 # 主è¦ç‰¹ç‚¹ IoTDB的主è¦ç‰¹ç‚¹å¦‚下: 1. çµæ´»çš„部署ç–略。IoTDB为用户æ供了一个在云平å°æˆ–终端设备上的一键安装工具,以åŠä¸€ä¸ªè¿žæŽ¥äº‘å¹³å°å’Œç»ˆç«¯ä¸Šçš„æ•°æ®çš„æ•°æ®åŒæ¥å·¥å…·ã€‚ 2. 硬件æˆæœ¬ä½Žã€‚IoTDBå¯ä»¥è¾¾åˆ°å¾ˆé«˜çš„ç£ç›˜å˜å‚¨åŽ‹ç¼©æ¯”。 3. 高效的目录结构。IoTDB支æŒæ™ºèƒ½ç½‘络设备对å¤æ‚时间åºåˆ—æ•°æ®ç»“构的高效组织,åŒç±»è®¾å¤‡å¯¹æ—¶é—´åºåˆ—æ•°æ®çš„组织,海é‡å¤æ‚时间åºåˆ—æ•°æ®ç›®å½•çš„模糊æœç´¢ç–略。 4. 高åžåé‡è¯»å†™ã€‚IoTDB支æŒæ•°ä»¥ç™¾ä¸‡è®¡çš„低功耗设备的强连接数æ®è®¿é—®ã€é«˜é€Ÿæ•°æ®è¯»å†™ï¼Œé€‚用于上述智能网络设备和混åˆè®¾å¤‡ã€‚ 5. 丰富的查询è¯ä¹‰ã€‚IoTDB支æŒè·¨è®¾å¤‡å’Œæµ‹é‡çš„时间åºåˆ—æ•°æ®çš„时间对é½ã€æ—¶é—´åºåˆ—å—段的计算(频域转æ¢)和时间维度的丰富èšåˆå‡½æ•°æ”¯æŒã€‚ 6. å¦ä¹ æˆæœ¬éžå¸¸ä½Žã€‚IoTDB支æŒç±»ä¼¼sqlçš„è¯è¨€ã€JDBCæ ‡å‡†API和易于使用的导入/导出工具。 7. 与先进的开放æºç 生æ€ç³»ç»Ÿçš„æ— ç¼é›†æˆã€‚IoTDB支æŒåˆ†æžç”Ÿæ€ç³»ç»Ÿï¼Œå¦‚Hadoopã€Sparkå’Œå¯è§†åŒ–工具(如Grafana)。 有关IoTDB的最新信æ¯ï¼Œè¯·è®¿é—®[IoTDB官方网站](https://iotdb.apache.org/)。如果您在使用IoTDBæ—¶é‡åˆ°ä»»ä½•é—®é¢˜æˆ–å‘现任何bug,请在[jira]ä¸æ交(https://issues.apache.org/jira/projects/IOTDB/issues)。 <!-- TOC --> ## 目录 - [IoTDB](#iotdb) - [简介](#简介) - [主è¦ç‰¹ç‚¹](#主è¦ç‰¹ç‚¹) - [目录](#目录) - [快速开始](#快速开始) - [环境准备](#环境准备) - [安装](#安装) - [从æºç 构建](#从æºç 构建) - [é…ç½®](#é…ç½®) - [开始](#开始) - [å¯åŠ¨ IoTDB](#å¯åŠ¨-iotdb) - [使用 IoTDB](#使用-iotdb) - [使用 Cli 命令行](#使用-cli-命令行) - [基本的 IoTDB 命令](#基本的-iotdb-命令) - [åœæ¢ IoTDB](#åœæ¢-iotdb) - [åªç¼–译 server](#åªç¼–译-server) - [åªç¼–译 cli](#åªç¼–译-cli) - [导入导出CSV工具](#导入导出CSV工具) <!-- /TOC --> # 快速开始 这篇简çŸçš„指å—将带您了解使用IoTDB的基本过程。如需更详细的介ç»ï¼Œè¯·è®¿é—®æˆ‘们的网站[用户指å—](https://iotdb.apache.org/zh/UserGuide/Master/QuickStart/QuickStart.html)。 ## 环境准备 è¦ä½¿ç”¨IoTDB,您需è¦: 1. Java >= 1.8 (ç›®å‰ 1.8ã€11 到 17 å·²ç»è¢«éªŒè¯å¯ç”¨ã€‚请确ä¿çŽ¯å˜é‡å¢ƒè·¯å¾„å·²æ£ç¡®è®¾ç½®)。 2. Maven >= 3.6 (如果希望从æºä»£ç 编译和安装IoTDB)。 3. 设置 max open files 为 65535,以é¿å…"too many open files"错误。 4. (å¯é€‰ï¼‰ å°† somaxconn 设置为 65535 以é¿å…系统在高负载时出现 "connection reset" 错误。 ``` # Linux > sudo sysctl -w net.core.somaxconn=65535 # FreeBSD or Darwin > sudo sysctl -w kern.ipc.somaxconn=65535 ``` ## 安装 IoTDBæ供了三ç§å®‰è£…方法,您å¯ä»¥å‚考以下建议,选择最适åˆæ‚¨çš„一ç§: * 从æºä»£ç 安装。如果需è¦è‡ªå·±ä¿®æ”¹ä»£ç ,å¯ä»¥ä½¿ç”¨æ¤æ–¹æ³•ã€‚ * 从二进制文件安装。推è的方法是从官方网站下载二进制文件,您将获得一个开箱å³ç”¨çš„二进制å‘布包。 * 使用Docker: dockerfile的路径是https://github.com/apache/iotdb/tree/master/docker/src/main 在这篇《快速入门》ä¸ï¼Œæˆ‘们简è¦ä»‹ç»å¦‚何使用æºä»£ç 安装IoTDB。如需进一æ¥èµ„料,请å‚阅官网[用户指å—](https://iotdb.apache.org/zh/UserGuide/Master/QuickStart/QuickStart.html)。 ## 从æºç 构建 ### 关于准备Thrift编译器 如果您使用Windows,请跳过æ¤æ®µã€‚ 我们使用Thrift作为RPC模å—æ¥æ供客户端-æœåŠ¡å™¨é—´çš„通信和å议支æŒï¼Œå› æ¤åœ¨ç¼–译阶段我们需è¦ä½¿ç”¨Thrift 0.13.0 (或更高)编译器生æˆå¯¹åº”çš„Java代ç 。 Thriftåªæ供了Windows下的二进制编译器,Unix下需è¦é€šè¿‡æºç 自行编译。 å¦‚æžœä½ æœ‰å®‰è£…æƒé™ï¼Œå¯ä»¥é€šè¿‡`apt install`, `yum install`, `brew install`æ¥å®‰è£…thrift编译器,然åŽåœ¨ä¸‹é¢çš„ç¼–è¯‘å‘½ä»¤ä¸ éƒ½æ·»åŠ å¦‚ä¸‹å‚æ•°å³å¯ï¼š`-Dthrift.download-url=http://apache.org/licenses/LICENSE-2.0.txt -Dthrift.exec.absolute.path=<ä½ çš„thriftå¯æ‰§è¡Œæ–‡ä»¶è·¯å¾„>`。 åŒæ—¶æˆ‘们预先编译了一个Thriftç¼–è¯‘å™¨ï¼Œå¹¶å°†å…¶ä¸Šä¼ åˆ°äº†GitHub ,借助一个Mavenæ’件,在编译时å¯ä»¥è‡ªåŠ¨å°†å…¶ä¸‹è½½ã€‚ 该预编译的Thrift编译器在gcc8,Ubuntu, CentOS, MacOS下å¯ä»¥å·¥ä½œï¼Œä½†æ˜¯åœ¨æ›´ä½Žçš„gcc 版本以åŠå…¶ä»–æ“作系统上尚未确认。 如果您å‘çŽ°å› ä¸ºç½‘ç»œé—®é¢˜æ€»æ˜¯æ示下载ä¸åˆ°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å¯æ‰§è¡Œæ–‡ä»¶è·¯å¾„>`。 如果您对Maven足够熟悉,您也å¯ä»¥ç›´æŽ¥ä¿®æ”¹æˆ‘ä»¬çš„æ ¹pom文件æ¥é¿å…æ¯æ¬¡ç¼–译都使用上述å‚数。 Thrift官方网å€ä¸ºï¼šhttps://thrift.apache.org/ 从 git 克隆æºä»£ç : ``` git clone https://github.com/apache/iotdb.git ``` 默认的主分支是masteråˆ†æ”¯ï¼Œå¦‚æžœä½ æƒ³ä½¿ç”¨æŸä¸ªå‘布版本x.x.xï¼Œè¯·åˆ‡æ¢ tag: ``` 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 compile-cpp` å¯ä»¥è¿›è¡Œc++客户端API的编译。 **注æ„:"`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çš„æ“作方法:在上述maven命令编译好åŽï¼Œå³é”®é¡¹ç›®å称,选择"`Maven->Reload project`",å³å¯ã€‚** ### é…ç½® é…置文件在"conf"文件夹下 * 环境é…置模å—(`datanode-env.bat`, `datanode-env.sh`), * 系统é…置模å—(`iotdb-datanode.properties`) * 日志é…置模å—(`logback.xml`)。 有关详细信æ¯ï¼Œè¯·å‚è§[é…ç½®å‚æ•°](https://iotdb.apache.org/zh/UserGuide/Master/Reference/DataNode-Config-Manual.html)。 ## 开始 您å¯ä»¥é€šè¿‡ä»¥ä¸‹æ¥éª¤æ¥æµ‹è¯•å®‰è£…,如果执行åŽæ²¡æœ‰è¿”回错误,安装就完æˆäº†ã€‚ ### å¯åŠ¨ 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,端å£ï¼ŒUSER_NAME å’Œ 密ç 。默认å‚数为`-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 ``` 命令行客户端是交互å¼çš„ï¼Œæ‰€ä»¥å¦‚æžœä¸€åˆ‡å°±ç»ªï¼Œæ‚¨åº”è¯¥çœ‹åˆ°æ¬¢è¿Žæ ‡å¿—å’Œå£°æ˜Ž: ``` _____ _________ ______ ______ |_ _| | _ _ ||_ _ `.|_ _ \ | | .--.|_/ | | \_| | | `. \ | |_) | | | / .'`\ \ | | | | | | | __'. _| |_| \__. | _| |_ _| |_.' /_| |__) | |_____|'.__.' |_____| |______.'|_______/ version x.x.x IoTDB> login successfully IoTDB> ``` #### 基本的 IoTDB 命令 现在,让我们介ç»åˆ›å»º timeseriesã€æ’入数æ®å’ŒæŸ¥è¯¢æ•°æ®çš„方法。 IoTDBä¸çš„æ•°æ®ç»„织为 timeseries。æ¯ä¸ª timeseries 包å«å¤šä¸ª`æ•°æ®-时间`对,由一个 database 拥有。 在定义 timeseries 之å‰ï¼Œæˆ‘们应该先使用 CREATE DATABASE æ¥åˆ›å»ºä¸€ä¸ªæ•°æ®åº“,下é¢æ˜¯ä¸€ä¸ªä¾‹å: ``` IoTDB> CREATE DATABASE root.ln ``` 我们也å¯ä»¥ä½¿ç”¨`SHOW DATABASES`æ¥æ£€æŸ¥å·²åˆ›å»ºçš„æ•°æ®åº“: ``` IoTDB> SHOW DATABASES +--------+ |Database| +--------+ | root.ln| +--------+ Total line number = 1 ``` 在设置 database 之åŽï¼Œæˆ‘们å¯ä»¥ä½¿ç”¨CREATE TIMESERIESæ¥åˆ›å»ºä¸€ä¸ªæ–°çš„TIMESERIES。 在创建 timeseries 时,我们应该定义它的数æ®ç±»åž‹å’Œç¼–ç 方案。这里我们创建两个 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 ``` 为了查询特定的timeseries,我们å¯ä»¥ä½¿ç”¨ `SHOW TIMESERIES <Path>`. <Path> 表示被查询的 timeseries 的路径. 默认值是`null`, 表示查询系统ä¸æ‰€æœ‰çš„ timeseries (åŒ`SHOW TIMESERIES root`). 以下是一些示例: 1. 查询系统ä¸æ‰€æœ‰ timeseries: ``` 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 ``` 2. 查询指定的 timeseries(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| +------------------------+-----+-------------+--------+--------+-----------+----+----------+ Total line number = 1 ``` æ’å…¥ timeseries æ•°æ®æ˜¯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-01T08:00:00.100+08:00| true| |1970-01-01T08:00:00.200+08:00| false| +-----------------------------+------------------------+ Total line number = 2 ``` 您还å¯ä»¥ä½¿ç”¨ä¸€æ¡SQLè¯å¥æŸ¥è¯¢å¤šä¸ª timeseries æ•°æ®: ``` 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| +-----------------------------+-----------------------------+------------------------+ Total line number = 2 ``` 如果需è¦ä¿®æ”¹ Cli ä¸çš„时区,您å¯ä»¥ä½¿ç”¨ä»¥ä¸‹è¯å¥: ``` IoTDB> SET time_zone=+00:00 Time zone has set to +00:00 IoTDB> SHOW time_zone Current time zone: Z ``` 之åŽæŸ¥è¯¢ç»“果将会以更新åŽçš„新时区显示: ``` 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| +------------------------+-----------------------------+------------------------+ Total line number = 2 ``` ä½ å¯ä»¥ä½¿ç”¨å¦‚下命令退出: ``` IoTDB> quit or IoTDB> exit ``` 有关IoTDB SQL支æŒçš„命令的更多信æ¯ï¼Œè¯·å‚è§[用户指å—](https://iotdb.apache.org/zh/UserGuide/Master/QuickStart/QuickStart.html)。 ### åœæ¢ IoTDB server å¯ä»¥ä½¿ç”¨ "ctrl-C" 或者执行下é¢çš„脚本: ``` # Unix/OS X > sbin/stop-standalone.sh # Windows > sbin\stop-standalone.bat ``` # 导入导出CSV工具 查看 [导入导出CSV工具](https://iotdb.apache.org/zh/UserGuide/Master/Maintenance-Tools/CSV-Tool.html) # 常è§ç¼–译错误 查看 [常è§ç¼–译错误](https://iotdb.apache.org/zh/Development/ContributeGuide.html#%E5%B8%B8%E8%A7%81%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%AF) # è”系我们 ### QQ群 * Apache IoTDB 交æµç¾¤ï¼š659990460 ### Wechat Group * æ·»åŠ å¥½å‹ `tietouqiao` 或者 `liutaohua001`,我们会邀请您进群 ### Slack * https://join.slack.com/t/apacheiotdb/shared_invite/zt-qvso1nj8-7715TpySZtZqmyG5qXQwpg 获å–更多内容,请查看 [åŠ å…¥ç¤¾åŒº](https://github.com/apache/iotdb/issues/1995)