前言
一切来自官方文档: https://iotdb.apache.org/zh/UserGuide/latest/QuickStart/QuickStart.html
IOTDB 套件:
IOTDB 1.3.2 官方部署环境要求
- jdk > = 1.8
- 设置最大文件打开数为 65535。
下载:https://download.csdn.net/download/weixin_45368812/89695860
官方,官方最靠谱
2024年8月30日14:11:58
够轻,应用场景也很专一,就是IOT,这也是它的时间序列给限死的。但是功能该有的都有,各种数据接入、集群、流…都有
因为太轻了,所以一些接入不是很灵活和高适应,很多都要自行开发和集成
测试环境1:window
window 11
IOTDB 1.3.2
JDK 17
安装方式 all in one
单机版安装
启动
双击start-standalone.bat
测试结果:出现两个窗口(一个 ConfigNode 和一个 DataNode)
看脚本可以发现start-standalone.bat主要的作用是启动start-confignode.bat和start-datanode.bat两个Shell脚本文件。
测试连接:
另开一个cmd,输入登录命令
> sbin\start-cli.bat -h 127.0.0.1 -p 6667 -u root -pw root
默认用户名和密码都是root
创建数据库
IoTDB> show databases;
+--------+---+-----------------------+---------------------+---------------------+
|Database|TTL|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|
+--------+---+-----------------------+---------------------+---------------------+
+--------+---+-----------------------+---------------------+---------------------+
Empty set.
It costs 0.565s
IoTDB> create database root.window
Msg: The statement is executed successfully.
IoTDB> show databases;
+-----------+----+-----------------------+---------------------+---------------------+
| Database| TTL|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|
+-----------+----+-----------------------+---------------------+---------------------+
|root.window|null| 1| 1| 604800000|
+-----------+----+-----------------------+---------------------+---------------------+
Total line number = 1
It costs 0.139s
数据的存活时间-TTL
单位: ms
默认: NULL,永久保存
-
数据存活是库级别的
-
官方建议为了保证查询效率的情况下,可以适当设置database的数据存活时间,避免随着文件数量增加,磁盘写满或内存高占用带来的查询性能下降的弊端。
# 设置数据存活期限为1小时
IoTDB> set ttl to root.project01 3600000;
Msg: The statement is executed successfully.
# 取消TTL,数据永久保存
IoTDB> unset ttl to root.project01;
Msg: The statement is executed successfully.
# 批量设置TTL
IoTDB> set ttl to root.** 3600000;
Msg: The statement is executed successfully.
注意:
假设TTL 设置为一小时,那么插入前一小时的数据将会报警 302 异常,因为这超出了设置的TTL时间
创建时间序列
IoTDB> create timeseries root.window.yfb01.xz.status with datatype=FLOAT,ENCODING=RLE;
Msg: The statement is executed successfully.
IoTDB> show timeseries;
+---------------------------+-----+-----------+--------+--------+-----------+----+----------+--------+------------------+--------+
| Timeseries|Alias| Database|DataType|Encoding|Compression|Tags|Attributes|Deadband|DeadbandParameters|ViewType|
+---------------------------+-----+-----------+--------+--------+-----------+----+----------+--------+------------------+--------+
|root.window.yfb01.xz.status| null|root.window| FLOAT| RLE| LZ4|null| null| null| null| BASE|
+---------------------------+-----+-----------+--------+--------+-----------+----+----------+--------+------------------+--------+
Total line number = 1
It costs 0.274s
简化写法:
create timeseries root.ln.wf01.wt01.status BOOLEAN encoding=PLAIN
批量创建:
IoTDB> CREATE ALIGNED TIMESERIES root.ln.wf01.GPS(latitude FLOAT encoding=PLAIN compressor=SNAPPY, longitude FLOAT encoding=PLAIN compressor=SNAPPY)
关于时间序列路径
时间序列路径(path) 是一个层级结构的字符串。
root.<storage_group>.<device_id>.<measurement>
root:这是所有时间序列路径的根节点。
<storage_group>:这是存储组,用于定义如何在磁盘上组织和隔离不同的时间序列数据。可以理解为关系数据库中的数据库。
<device_id>:这是设备标识符,类似于传统数据库中的表名。每个设备可以被视为一个独立的数据源。
<measurement>:这是测量点,类似于传统数据库中的列名。每个测量点代表了一个具体的传感器数据或指标。
如何创建一个空白的设备。
在 IoTDB 中创建设备层主要是通过创建时间序列(即测量点)来完成的,因为设备本身不需要单独创建,而是通过存储其测量点数据自动识别。
标准是4层 根.库.表.字段,咱就按标准来吧
当然,也可以根据业务创建自定义层数的路径
需要注意:project.station和project.station.device不能同时创建为库路径
例:在已经有root.ln
和root.sgcc
这两个 database 的情况下,创建root.ln.wf01
database 是不可行的。系统将给出相应的错误提示,Msg: 300: root.ln has already been created as database.
支持的数据类型
创建时间序列的时候需要指定数据类型。
BOOLEAN:布尔类型,表示 true 或 false。
INT32:32位整数。
INT64:64位整数。
FLOAT:单精度浮点数。
DOUBLE:双精度浮点数。
TEXT:文本字符串类型。
VECTOR:向量类型,可以存储一系列基本数据类型的值。
STRUCT:结构体类型,可以存储一组命名的基本数据类型的值
INARY:二进制数据类型,用于存储非文本的二进制数据。
TIMESTAMP:时间戳类型,用于存储时间序列数据的时间戳
编码方式
不同的编码方式可以优化存储和查询性能
- RLE:Run-Length Encoding,适用于连续重复值的情况。
- PLAIN:简单的无损编码方式,适用于大多数数据类型。
- GORILLA:适用于时间序列数据的压缩算法,尤其适用于连续变化较小的时间戳。
- BITMAP:适用于布尔类型数据的高效压缩方式。
插入数据
批量插入
时间格式
IoTDB> insert into root.window.yfb01.xz(timestamp,status) values(100,12.09);
Msg: The statement is executed successfully.
IoTDB> select status from root.window.yfb01.xz;
+-----------------------------+---------------------------+
| Time|root.window.yfb01.xz.status|
+-----------------------------+---------------------------+
|1970-01-01T08:00:00.100+08:00| 12.09|
+-----------------------------+---------------------------+
Total line number = 1
It costs 0.182s
IoTDB> select * from root.window.yfb01.xz;
+-----------------------------+---------------------------+
| Time|root.window.yfb01.xz.status|
+-----------------------------+---------------------------+
|19