当前位置: 首页 > news >正文

从零开始搭建使用 TDengine:新用户快速上手指南

在这里插入图片描述

从零开始搭建使用 TDengine:新用户快速上手指南

1. TDengine 简介

TDengine 是由涛思数据出品的一款专为物联网(IoT)、工业互联网、车联网等场景设计的高性能时序数据库。它具有以下特点:

  • 高性能:专为时序数据优化,写入和查询性能优异
  • 高压缩比:数据压缩比可达 5-20 倍
  • SQL 支持:兼容标准 SQL,学习成本低
  • 分布式架构:支持水平扩展
  • 多语言支持:提供 C/C++、Java、Python、Go 等多种语言连接器
  • 提供丰富的生态圈: 可以和大数据领域的很多工具无缝集成,如 SPARK , FLINK 及 BI 工具等。

2. 环境准备与安装

2.1 系统要求

  • 操作系统:Linux、Windows、macOS
  • CPU:x64 架构
  • 内存:建议 4GB 以上
  • 存储:建议使用 SSD

2.2 安装 TDengine

TDengine 可以通过安装包方式、DOCKER 方式及云服务三种方式快速体验 TDengine, 详细见 官网下载页面

2.3 启动 TDengine 服务

# Linux/macOS
sudo systemctl start taosd# 或直接启动
sudo taosd# 检查服务状态
sudo systemctl status taosd

3. 基础概念理解

3.1 核心概念

  • 数据库(Database):数据的逻辑容器
  • 超级表(Super Table):数据模型模板,定义数据结构
  • 子表(Sub Table):基于超级表创建的具体表,存储实际数据
  • 标签(Tag):超级表中用于标识和分组子表的静态属性
  • 时间戳(Timestamp):每条记录的主键,必须是时间类型,并且必须是第一列

3.2 数据类型

在 TDengine 中支持以下数据类型:

#类型Bytes说明
1TIMESTAMP8时间戳。缺省精度毫秒,可支持微秒和纳秒,详细说明见上节。
2INT4整型,范围 [-2^31, 2^31-1]
3INT UNSIGNED4无符号整数,[0, 2^32-1]
4BIGINT8长整型,范围 [-2^63, 2^63-1]
5BIGINT UNSIGNED8长整型,范围 [0, 2^64-1]
6FLOAT4浮点型,有效位数 6-7,范围 [-3.4E38, 3.4E38]
7DOUBLE8双精度浮点型,有效位数 15-16,范围 [-1.7E308, 1.7E308]
8BINARY自定义记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 NCHAR
9SMALLINT2短整型,范围 [-32768, 32767]
10SMALLINT UNSIGNED2无符号短整型,范围 [0, 65535]
11TINYINT1单字节整型,范围 [-128, 127]
12TINYINT UNSIGNED1无符号单字节整型,范围 [0, 255]
13BOOL1布尔型,{true, false}
14NCHAR自定义记录包含多字节字符在内的字符串,如中文字符。每个 NCHAR 字符占用 4 字节的存储空间。字符串两端使用单引号引用,字符串内的单引号需用转义字符 \'。NCHAR 使用时须指定字符串大小,类型为 NCHAR(10) 的列表示此列的字符串最多存储 10 个 NCHAR 字符。如果用户字符串长度超出声明长度,将会报错。
15JSONJSON 数据类型,只有 Tag 可以是 JSON 格式
16VARCHAR自定义BINARY 类型的别名
17GEOMETRY自定义几何类型,v3.1.0.0 开始支持
18VARBINARY自定义可变长的二进制数据,v3.1.1.0 开始支持
19DECIMAL8 或 16高精度数值类型,取值范围取决于类型中指定的 precision 和 scale,自 v3.3.6.0 开始支持

4. 连接 TDengine

4.1 使用 taos 命令行客户端

# 连接本地 TDengine
taos# 连接远程 TDengine
taos -h <hostname> -u <username> -p <password>

4.2 连接参数说明

  • 主机地址:默认 localhost
  • 端口号:默认 6030(原生连接)或 6041(RESTful 连接)
  • 用户名:默认 root
  • 密码:默认 taosdata

5. 实践操作:温度监控系统

让我们通过一个实际的温度监控系统来学习 TDengine 的使用。

5.1 创建数据库

-- 创建数据库
CREATE DATABASE IF NOT EXISTS db;-- 使用数据库
USE db;

5.2 创建超级表

-- 创建温度监控超级表
CREATE STABLE IF NOT EXISTS temperature_sensors (ts TIMESTAMP,           -- 时间戳(主键)temperature FLOAT,      -- 温度值humidity FLOAT,         -- 湿度值status INT             -- 设备状态(0=正常,1=异常)
) TAGS (device_id NCHAR(50),   -- 设备IDlocation NCHAR(100),   -- 设备位置device_type NCHAR(50)  -- 设备类型
);

5.3 创建子表

-- 创建具体的传感器子表
CREATE TABLE sensor_001 USING temperature_sensors 
TAGS ('SENSOR_001', '办公室A', '温湿度传感器');CREATE TABLE sensor_002 USING temperature_sensors 
TAGS ('SENSOR_002', '机房B', '温湿度传感器');CREATE TABLE sensor_003 USING temperature_sensors 
TAGS ('SENSOR_003', '仓库C', '温度传感器');

5.4 插入数据

-- 插入单条数据
INSERT INTO sensor_001 VALUES (NOW, 25.6, 60.5, 0);-- 批量插入数据
INSERT INTO sensor_001 VALUES 
('2024-01-01 08:00:00', 24.5, 58.2, 0)
('2024-01-01 08:05:00', 24.8, 59.1, 0)
('2024-01-01 08:10:00', 25.2, 60.3, 0);-- 多表同时插入
INSERT INTO 
sensor_001 VALUES ('2024-01-01 09:00:00', 26.1, 61.2, 0)
sensor_002 VALUES ('2024-01-01 09:00:00', 22.8, 55.6, 0)
sensor_003 VALUES ('2024-01-01 09:00:00', 28.3, 0, 0);

5.5 查询数据

-- 查询最新数据
SELECT * FROM sensor_001 ORDER BY ts DESC LIMIT 10;-- 查询指定时间范围的数据
SELECT ts, temperature, humidity 
FROM sensor_001 
WHERE ts >= '2024-01-01 08:00:00' AND ts < '2024-01-01 10:00:00';-- 聚合查询:计算平均温度
SELECT AVG(temperature) as avg_temp, MAX(temperature) as max_temp 
FROM sensor_001 
WHERE ts >= NOW - 1h;-- 按时间窗口聚合
SELECT _wstart, AVG(temperature) as avg_temp 
FROM sensor_001 
WHERE ts >= NOW - 24h 
INTERVAL(1h);

5.6 超级表查询

-- 查询所有传感器的最新数据
SELECT last_row(*) FROM temperature_sensors;-- 按设备位置分组统计
SELECT location, AVG(temperature) as avg_temp, COUNT(*) as data_count
FROM temperature_sensors 
WHERE ts >= NOW - 1d 
GROUP BY location;-- 查询异常设备
SELECT DISTINCT device_id, location 
FROM temperature_sensors 
WHERE status = 1 AND ts >= NOW - 1h;

6. 高级功能

6.1 时间窗口查询

-- 滑动窗口:每小时的平均温度
SELECT _wstart, _wend, AVG(temperature) 
FROM sensor_001 
WHERE ts >= NOW - 7d 
INTERVAL(1h) SLIDING(30m);-- 会话窗口:设备连续工作时间段
SELECT _wstart, _wend, COUNT(*) 
FROM sensor_001 
WHERE ts >= NOW - 1d 
SESSION(ts, 10m);

6.2 流计算

-- 创建流计算:实时监控温度异常
CREATE STREAM temp_alert_stream INTO temp_alerts AS
SELECT _wstart, device_id, AVG(temperature) as avg_temp
FROM temperature_sensors 
WHERE temperature > 30 
INTERVAL(5m);

6.3 数据订阅(TMQ)

-- 创建主题
CREATE TOPIC temp_topic AS SELECT * FROM temperature_sensors;

7. 编程接口示例

7.1 Python 连接示例

import taos# 建立连接
conn = taos.connect(host='localhost', user='root', password='taosdata', database='monitoring')# 执行查询
cursor = conn.cursor()
cursor.execute("SELECT * FROM sensor_001 LIMIT 10")# 获取结果
results = cursor.fetchall()
for row in results:print(row)# 关闭连接
cursor.close()
conn.close()

7.2 Java 连接示例

import java.sql.*;public class TDengineExample {public static void main(String[] args) {String jdbcUrl = "jdbc:TAOS://localhost:6030/monitoring";try {// 建立连接Connection conn = DriverManager.getConnection(jdbcUrl, "root", "taosdata");// 执行查询Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM sensor_001 LIMIT 10");// 处理结果while (rs.next()) {System.out.println(rs.getTimestamp("ts") + ", " + rs.getFloat("temperature"));}// 关闭连接rs.close();stmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}
}

8. 性能优化建议

8.1 数据模型设计

  • 合理使用标签:标签用于分组和过滤,不宜过多
  • 时间戳顺序写入:时间戳顺序写入性能更好,大量乱序写入不仅影响写入性能,而且对查询性能影响
  • 批量写入:使用批量插入提高写入性能

8.2 查询优化

-- 使用标签过滤(高效)
SELECT * FROM temperature_sensors WHERE device_id = 'SENSOR_001';-- 避免全表扫描
SELECT * FROM temperature_sensors WHERE ts > NOW - 1h;-- 使用 LIMIT 限制结果集
SELECT * FROM sensor_001 ORDER BY ts DESC LIMIT 1000;

8.3 配置优化

# 编辑配置文件
sudo vim /etc/taos/taos.cfg# 关键配置项
maxVgroupsPerDb 1000        # 每个数据库最大虚拟组数
maxTablesPerVnode 1000000   # 每个虚拟节点最大表数
maxConnections 5000         # 最大连接数

9. 监控与运维

9.1 系统监控

-- 查看数据库信息
SHOW DATABASES;-- 查看表信息
SHOW TABLES;-- 查看系统资源使用情况
SHOW DNODE 1;

9.2 数据备份

# 使用 taosdump 工具备份
taosdump -o /backup/path -D monitoring# 恢复数据
taosdump -i /backup/path

10. 常见问题与解决方案

10.1 连接问题

# 检查服务状态
sudo systemctl status taosd# 检查端口是否开放
netstat -tlnp | grep 6030# 检查防火墙设置
sudo firewall-cmd --list-ports

10.2 性能问题

  • 写入慢:检查是否使用批量插入
  • 查询慢:添加时间范围条件,使用标签过滤
  • 存储空间大:检查数据压缩配置

10.3 错误处理

-- 查看错误日志
SHOW LOGS;-- 检查表结构
DESCRIBE sensor_001;

11. 总结

通过本文的学习,您已经掌握了:

  1. TDengine 的基本概念和架构
  2. 安装和配置 TDengine 环境
  3. 创建数据库、超级表和子表
  4. 数据的插入、查询和分析
  5. 高级功能如流计算和数据订阅
  6. 编程接口的使用
  7. 性能优化和运维技巧

TDengine 作为专业的时序数据库,特别适合处理大量的时间序列数据。随着您对 TDengine 理解的深入,可以进一步探索其分布式部署、高可用配置等高级特性。

12. 进一步学习资源

  • TDengine 官方文档
  • TDengine GitHub 仓库
  • TDengine 社区论坛
http://www.xdnf.cn/news/1407079.html

相关文章:

  • windows docker 中的mysql 无法被外部浏览器访问如何解决
  • 自动驾驶中的传感器技术37——Lidar(12)
  • Ansible 临时命令与常用模块实操指南
  • 【人工智能99问】LLaMA中的RoPE是什么?(35/99)
  • Paimon——官网阅读:Spark 引擎
  • Spark内存管理
  • Nginx 502 Bad Gateway:从 upstream 日志到 FastCGI 超时复盘
  • 腾讯浑元最新技术:具有表征对齐的多模态扩散,用于高保真拟音音频生成
  • 【嵌入式DIY实例】-空中鼠标
  • LeetCode算法日记 - Day 27: 计算右侧小于当前元素的个数、翻转对
  • 高校心理教育辅导系统的设计与实现|基于SpringBoot高校心理教育辅导系统的设计与实现
  • USB虚拟化应用5:VirtualFIDO2 虚拟硬件安全密钥,智能卡,yubico,支持X,FB,GITHUB等各种网站双重认证,让你的账户登录绝对安全
  • 在集群级别应用 Pod 安全标准
  • opencv 梯度提取
  • 数据化管理是什么意思?企业该如何进行数据化管理
  • 《SVA断言系统学习之路》【01】即时断言概览
  • 北京博乐科技有限公司2025届程序技术类笔试题
  • 性能测试工具-SkyWalking
  • 元宇宙与旅游产业:虚实融合的文旅新体验
  • Python毕业设计推荐:基于Django+MySQL的养老社区服务管理系统
  • 从 WPF 到 Avalonia 的迁移系列实战篇4:控件模板与 TemplatedControl
  • UniApp 基础开发第一步:HBuilderX 安装与环境配置
  • 【AI智能体技术】如何学习多智能体系统知识并实现SOTA算法?
  • SDL3.0 学习随笔:其一
  • 自底向上了解CPU的运算
  • 嵌入式常见架构
  • 【MYSQL】从混乱到清晰:联合查询帮你打通数据孤岛
  • 算法:插入排序
  • 公益免费二级域名
  • 解锁Tensor Core性能:深入探索CUDA Warp矩阵操作