安装

安装

官方文档

安装

TDengine 完整的软件包包括服务端(taosd)、应用驱动(taosc)、用于与第三方系统对接并提供 RESTful 接口的 taosAdapter、命令行程序(CLI,taos)和一些工具软件。目前 taosdump、TDinsight 仅在 Linux 系统上安装和运行,后续将支持 Windows、macOS 等系统。TDengine 除了提供多种语言的连接器之外,还通过 taosAdapter 提供 RESTful 接口

taosdump、TDinsight 肯定是好用的工具
RPM 和 Deb 包不含 taosdump 和 TDinsight 安装脚本,这些工具需要通过安装 taosTools 包获得。

拿到 tar.gz 的安装包,一路正常安装,安装之后

To configure TDengine : edit /etc/taos/taos.cfg
To configure Taos Adapter : edit /etc/taos/taosadapter.toml
To start TDengine     : sudo systemctl start taosd
To start Taos Adatper : sudo systemctl start taosadapter
To access TDengine    : taos -h Kylin to login into TDengine server

启动报错,后来查了一下得知可能是安装包版本的问题
输入 arch 得知
服务器版本是 aarch64,应该用 arm 版本的包,应该装
TDengine-server-3.0.1.4-Linux-arm64.tar.gz (53.6 M)
果然,换了个安装包就装好了

然后解压按照文档安装即可
默认用户名为 root,默认密码为 taosdata
默认占用端口 6030systemctl start taosd,连接 URL 为 jdbc:TAOS://xiashuo.xyz:6030
rest 链接接口 6041,服务器需要启动相应的服务,连接 URL 为 jdbc:TAOS-RS://xiashuo.xyz:6041
systemctl start taosadapter
运行以下命令设置 TDengine 服务开机自启动。
systemctl enable taosd
可通过以下命令查看 TDengine 是否开机启动
systemctl list-unit-files | grep taosd
安装路径 /usr/local/taos
配置文件在 /usr/local/taos/cfg/taos.cfg,也可以用 /etc/taos/taos.cfg,指向的是同一个文件
也可以使用 rpm 安装。

sudo rpm -ivh TDengine-server-<version>-Linux-x64.rpm

各个版本的安装包的列表地址:
https://docs.taosdata.com/releases/tdengine/

运行

命令行工具 taos,类似于 mysql 的工具,可以建库建表,
在 Linux shell 下直接执行 taos 连接到 TDengine 服务,进入到 TDengine CLI 界面
输入 q 推出

性能测试

性能测试命令 taosBenchmark

开发指南

开发一个应用,如果你准备采用 TDengine 作为时序数据处理的工具,那么有如下几个事情要做:

  1. 确定应用到 TDengine 的连接方式。无论你使用何种编程语言,你总是可以使用 REST 接口, 但也可以使用每种编程语言独有的连接器进行方便的连接。
  2. 根据自己的应用场景,确定数据模型。根据数据特征,决定建立一个还是多个库;分清静态标签、采集量,建立正确的超级表,建立子表。
  3. 决定插入数据的方式。TDengine 支持使用标准的 SQL 写入,但同时也支持 Schemaless 模式写入,这样不用手工建表,可以将数据直接写入。
  4. 根据业务要求,看需要撰写哪些 SQL 查询语句。
  5. 如果你要基于时序数据做轻量级的实时统计分析,包括各种监测看板,那么建议你采用 TDengine 3.0 的流式计算功能,而不用额外部署 Spark, Flink 等复杂的流式计算系统。
  6. 如果你的应用有模块需要消费插入的数据,希望有新的数据插入时,就能获取通知,那么建议你采用 TDengine 提供的数据订阅功能,而无需专门部署 Kafka 或其他消息队列软件。
  7. 在很多场景下(如车辆管理),应用需要获取每个数据采集点的最新状态,那么建议你采用 TDengine 的 Cache 功能,而不用单独部署 Redis 等缓存软件。
  8. 如果你发现 TDengine 的函数无法满足你的要求,那么你可以使用用户自定义函数(UDF)来解决问题。

建立连接

Rest 连接

参考文档:
https://docs.taosdata.com/reference/taosadapter/
https://docs.taosdata.com/connector/rest-api/
需要启动服务 systemctl start taosadapter

原生连接

只有在没有安装 TDengine 服务端软件的系统上使用原生接口连接器才需要安装客户端驱动。

安装客户端驱动 taosc

注意,本地客户端的版本必须跟服务器端的版本号完全一致,例如,客户端为 3.0.1.5,那么服务器端的版本,也必须是 3.0.1.5,否则无法连接
然后再使用连接器,在程序中连接 TDengine
如果不是在代码中连接 TDengine。而是在 DataGrip 客户端中连接,应该使用 taos-jdbcdriver-3.0.0-dist.jar。其中包含第三方引用的依赖,
下载地址:Central Repository: com/taosdata/jdbc/taos-jdbcdriver/3.0.0

原生链接,选择    

Datagrip 更换驱动之后可以正常连接数据库了,但是还是无法直接通过双击表名来查看表的内容,需要通过 use 指定数据库或者,在 select from 表名的时候的时候指定模式名
可以在配置 URL 的时候手动指定表名
// use
// String jdbcUrl = "jdbc:TAOS://localhost:6030/dbName?user=root&password=taosdata";
// if you want to connect a specified database named "dbName".
如果是 RS 链接,找

无法建立连接的排查
https://blog.csdn.net/u013810234/article/details/121269395

数据建模

不同类型的数据采集点往往具有不同的数据特征,包括数据采集频率的高低,数据保留时间的长短,副本的数目,数据块的大小,是否允许更新数据等等。为了在各种场景下 TDengine 都能以最大效率工作,TDengine 建议将不同数据特征的表创建在不同的库里,因为每个库可以配置不同的存储策略。创建一个库时,除 SQL 标准的选项外,还可以指定保留时长、副本数、缓存大小、时间精度、文件块里最大最小记录条数、是否压缩、一个数据文件覆盖的天数等多种参数

CREATE DATABASE power KEEP 365 DURATION 10 BUFFER 16 WAL_LEVEL 1;

从 3.0.4.0 开始,如果后续需要订阅数据库,那么还要设置 WAL_RETENTION_PERIOD 参数

CREATE DATABASE power KEEP 365 DURATION 10 BUFFER 16 WAL_LEVEL 1 WAL_RETENTION_PERIOD 3600;

参数说明
语句变更

删除数据库

DROP DATABASE [IF EXISTS] db_name

上述语句将创建一个名为 power 的库,这个库的数据将保留 365 天(超过 365 天将被自动删除),每 10 天一个数据文件,每个 VNode 的写入内存池的大小为 16 MB,对该数据库入会写 WAL 但不执行 FSYNC。详细的语法及参数请见 数据库管理 章节。
创建库之后,需要使用 SQL 命令 USE 将当前库切换过来,例如:

USE power;

将当前连接里操作的库换为 power,否则对具体表操作前,需要使用“库名.表名”来指定库的名字。
使用 TDengine, 需要对每个类型的数据采集点创建一个超级表.

TDengine 建表语句,表名不能用短杠 -
在 TDengine 中,对无法识别的字符串,需要用 **</mark>** 包起来,比如删除aaa-bbb-ccc`这样的表:
drop table `aaa-bbb-ccc`

比如删除数字开头的主题

drop topic `1223topic`
CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);

TDengine 对每个数据采集点需要独立建表。与标准的关系型数据库一样,一张表有表名,Schema,但除此之外,还可以带有一到多个标签。创建时,需要使用超级表做模板,同时指定标签的具体值

CREATE TABLE d1001 USING meters TAGS ("California.SanFrancisco", 2);

TDengine 建议将数据采集点的全局唯一 ID 作为表名(比如设备序列号)。但对于有的场景,并没有唯一的 ID,可以将多个 ID 组合成一个唯一的 ID。不建议将具有唯一性的 ID 作为标签值。
在某些特殊场景中,用户在写数据时并不确定某个数据采集点的表是否存在,此时可在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表且后面的 USING 语句被忽略。比如:

INSERT INTO d1001 USING meters TAGS ("California.SanFrancisco", 2) VALUES (NOW, 10.2, 219, 0.32);

对于采集量,直接随时间更新,只要插入的数据的时间更新了,就会新插入一条数据,如果时间在表中已经存在了,则会覆盖原来的数据,但是 tag 数据不会被覆盖,每一个子表,插入第一行数据的时候,tag 即确定,后续写入的时候,即使传入的 tag 跟第一次传入的时候的 tag 不一样,也不会修改。
值得注意的是,单独查询子表的时候,是不会显示 tag 字段的,只有在查询超级表的时候,才会显示 tag 字段

TDengine 支持多列模型,只要物理量是一个数据采集点同时采集的(时间戳一致),这些量就可以作为不同列放在一张超级表里。但还有一种极限的设计,单列模型,每个采集的物理量都单独建表,因此每种类型的物理量都单独建立一超级表。比如电流、电压、相位,就建三张超级表。
TDengine 建议尽可能采用多列模型,因为插入效率以及存储效率更高。但对于有些场景,一个采集点的采集量的种类经常变化,这个时候,如果采用多列模型,就需要频繁修改超级表的结构定义,让应用变的复杂,这个时候,采用单列模型会显得更简单。

Out of dnodes

默认只能创建 CPU核心数*2 个数据库。明显不够
TDengine3.0 踩坑实录_51CTO博客_tdengine巨坑
TDengine Community edition, is there any limitation on the number of database? · Issue #17372 · taosdata/TDengine · GitHub
修改 /etc/taos/taos.cfgsupportVnodes 配置然后重启即可。

超级表的管理

https://docs.taosdata.com/taos-sql/stable/
DROP STABLE [IF EXISTS] [db_name.]stb_name
删除超级表之前,一定要把订阅了此超级表的主题删除。
删除表
DROP TABLE [IF EXISTS] [db_name.]tb_name

字段类型

字符串类型,在 TDengine 中,应该是 NCHAR(32),而不是 VARCHAR(32),如果用 VARCHAR(32) 保存,通过 jdbc 驱动在 Java 代码中拿到查询结果的时候,字符串的值是空字符串。

常见 SQL

use server_node_base;
-- select * from dock;
-- 查看所有的表
-- show tables;
-- 查看所有的超级表
-- show stables;
-- 查看表信息
-- describe dock;

表的 sql:https://docs.taosdata.com/taos-sql/table/
超级表的 sql:https://docs.taosdata.com/taos-sql/stable/
删除数据

use server_node_base;
delete from DOCK;

操作

在 Java 代码中,所有的数据库模式名,表名,尽量用小写,不要用大写。

日志