TDengine 小白入门指南

TDengine 小白入门指南

📘 TDengine 是什么?

TDengine 是一款开源、高性能、云原生、AI 驱动的时序数据库(Time-Series Database,简称 TSDB)。简单来说,它是一个专门为时间序列数据设计的数据库系统,特别擅长处理按时间顺序生成的大量数据。

与传统数据库(如 MySQL、PostgreSQL)不同,TDengine 针对时序数据的特点进行了深度优化,在写入速度、查询性能和存储效率方面都有显著优势。

🎯 TDengine 用在哪儿?

TDengine 广泛应用于以下领域:

  • 物联网(IoT):智能家居、智慧城市、工业传感器数据采集
  • 工业互联网:设备监控、生产线数据分析、预测性维护
  • 车联网:车辆位置追踪、驾驶行为分析、车况监测
  • IT 运维:服务器监控、应用性能管理(APM)、日志分析
  • 金融领域:股票行情、交易数据、风险监控
  • 能源行业:电力监控、能耗分析、智能电网

💡 TDengine 能解决什么问题?

1. 海量数据写入难题

传统数据库面对每秒数百万次的数据写入会力不从心,TDengine 通过创新的存储引擎设计,写入性能比通用数据库快 10 倍以上

2. 存储成本高昂

时序数据通常数据量巨大,TDengine 采用高效的压缩算法,存储空间仅为通用数据库的 1/10

3. 系统架构复杂

传统方案需要集成 Kafka(消息队列)、Redis(缓存)、Spark(流式计算)等多个组件,TDengine 内置这些功能,大幅降低系统复杂度。

4. 实时查询性能差

TDengine 针对时序数据特点优化了查询引擎,提供超快的聚合查询和时间范围查询能力。

5. 难以扩展

TDengine 采用云原生分布式架构,支持水平扩展,可轻松应对数据量和并发量的增长。

🔍 什么场景适合使用 TDengine?

✅ 适合的场景

  1. 数据具有时间戳特征:每条数据都有明确的时间属性
  2. 写多读少:数据持续写入,查询相对较少
  3. 数据量大:每天产生 GB 到 TB 级别的数据
  4. 实时性要求高:需要实时采集、处理和展示数据
  5. 多个数据源:有大量设备或传感器持续产生数据

❌不太适合的场景

  1. 数据没有时间维度:如用户账号信息、商品库存等
  2. 频繁更新历史数据:时序数据通常只追加,不修改
  3. 复杂的关系型查询:如多表 JOIN、事务处理等
  4. 数据量很小:每天只有几千条数据

🚀 Hello World:快速上手

下面通过一个简单的例子,演示如何使用 TDengine 存储和查询温度传感器数据。

1. 安装 TDengine

macOS 用户:

下载地址:https://www.taosdata.com/tdengine-resources

启动服务

taosd

复制代码
**Linux 用户:**
```bash
# 下载安装包(以 Ubuntu 为例)
wget https://www.taosdata.com/assets-download/3.0/TDengine-server-3.3.6.0-Linux-x64.tar.gz
tar -xzvf TDengine-server-3.3.6.0-Linux-x64.tar.gz
cd TDengine-server-3.3.6.0
sudo ./install.sh

# 启动服务
sudo systemctl start taosd

Windows 用户:

下载地址:https://www.taosdata.com/tdengine-resources

2. 连接 TDengine

打开命令行终端,输入:

bash 复制代码
taos

看到类似下面的提示,说明连接成功:

复制代码
taos> 

3. 创建数据库

sql 复制代码
-- 创建一个名为 sensor_db 的数据库
CREATE DATABASE IF NOT EXISTS sensor_db;

-- 使用这个数据库
USE sensor_db;

4. 创建超级表(模板)

超级表是 TDengine 的特色功能,相当于一个数据模板,用于定义相同类型设备的数据结构。

sql 复制代码
-- 创建温度传感器超级表
-- ts: 时间戳
-- temperature: 温度值
-- humidity: 湿度值
-- location: 传感器位置(标签)
-- device_id: 设备编号(标签)
CREATE STABLE IF NOT EXISTS temp_sensor (
    ts TIMESTAMP,
    temperature FLOAT,
    humidity FLOAT
) TAGS (
    location BINARY(50),
    device_id BINARY(20)
);

5. 创建子表(实际设备)

sql 复制代码
-- 为办公室的温度传感器创建子表
CREATE TABLE office_sensor USING temp_sensor TAGS ('办公室', 'SENSOR001');

-- 为仓库的温度传感器创建子表
CREATE TABLE warehouse_sensor USING temp_sensor TAGS ('仓库', 'SENSOR002');

6. 插入数据

sql 复制代码
-- 向办公室传感器插入数据
INSERT INTO office_sensor VALUES 
    (NOW, 25.5, 60.2),
    (NOW + 1s, 25.6, 60.5),
    (NOW + 2s, 25.4, 60.1);

-- 向仓库传感器插入数据
INSERT INTO warehouse_sensor VALUES 
    (NOW, 18.3, 75.8),
    (NOW + 1s, 18.5, 75.5),
    (NOW + 2s, 18.2, 76.1);

7. 查询数据

sql 复制代码
-- 查询办公室最新的温度数据
SELECT * FROM office_sensor ORDER BY ts DESC LIMIT 5;

-- 查询所有传感器的最新温度
SELECT LAST(*) FROM temp_sensor GROUP BY tbname;

-- 查询最近1小时内温度超过20度的记录
SELECT ts, temperature, location, device_id 
FROM temp_sensor 
WHERE ts > NOW - 1h AND temperature > 20;

-- 查询每个传感器的平均温度
SELECT location, device_id, AVG(temperature) as avg_temp, AVG(humidity) as avg_humidity
FROM temp_sensor 
WHERE ts > NOW - 1h
GROUP BY location, device_id;

8. 使用 Python 连接 TDengine

首先安装 Python 连接器:

bash 复制代码
pip install taospy

创建一个 Python 脚本 hello_tdengine.py

python 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
TDengine Hello World 示例
演示如何使用 Python 连接 TDengine 并进行基本操作
"""

import taos
from datetime import datetime

def main():
    # 1. 连接到 TDengine 服务器
    print("正在连接 TDengine...")
    conn = taos.connect(
        host="127.0.0.1",      # TDengine 服务器地址
        user="root",           # 用户名
        password="taosdata",   # 密码
        database="sensor_db"   # 数据库名
    )
    print("✓ 连接成功!\n")
    
    # 2. 创建游标对象
    cursor = conn.cursor()
    
    # 3. 创建数据库(如果不存在)
    print("创建数据库...")
    cursor.execute("CREATE DATABASE IF NOT EXISTS sensor_db")
    cursor.execute("USE sensor_db")
    print("✓ 数据库准备就绪\n")
    
    # 4. 创建超级表(如果不存在)
    print("创建超级表...")
    cursor.execute("""
        CREATE STABLE IF NOT EXISTS temp_sensor (
            ts TIMESTAMP,
            temperature FLOAT,
            humidity FLOAT
        ) TAGS (
            location BINARY(50),
            device_id BINARY(20)
        )
    """)
    print("✓ 超级表创建成功\n")
    
    # 5. 创建子表
    print("创建子表...")
    cursor.execute("CREATE TABLE IF NOT EXISTS room_sensor USING temp_sensor TAGS ('会议室', 'SENSOR003')")
    print("✓ 子表创建成功\n")
    
    # 6. 插入数据
    print("插入数据...")
    current_time = int(datetime.now().timestamp() * 1000)  # 毫秒级时间戳
    
    for i in range(5):
        temp = 22.0 + i * 0.2
        humidity = 55.0 + i * 0.5
        cursor.execute(
            f"INSERT INTO room_sensor VALUES ({current_time + i * 1000}, {temp}, {humidity})"
        )
    print(f"✓ 成功插入 5 条数据\n")
    
    # 7. 查询数据
    print("查询数据...")
    cursor.execute("SELECT * FROM room_sensor ORDER BY ts DESC LIMIT 5")
    
    # 获取列名
    column_names = [desc[0] for desc in cursor.description]
    print(f"列名: {column_names}")
    print("-" * 80)
    
    # 获取并显示数据
    rows = cursor.fetchall()
    for row in rows:
        ts = datetime.fromtimestamp(row[0] / 1000).strftime('%Y-%m-%d %H:%M:%S')
        print(f"时间: {ts}, 温度: {row[1]:.2f}°C, 湿度: {row[2]:.2f}%")
    
    print("\n" + "=" * 80)
    
    # 8. 统计查询
    print("\n统计分析...")
    cursor.execute("""
        SELECT 
            AVG(temperature) as 平均温度,
            MAX(temperature) as 最高温度,
            MIN(temperature) as 最低温度,
            AVG(humidity) as 平均湿度
        FROM room_sensor
    """)
    
    result = cursor.fetchone()
    print(f"平均温度: {result[0]:.2f}°C")
    print(f"最高温度: {result[1]:.2f}°C")
    print(f"最低温度: {result[2]:.2f}°C")
    print(f"平均湿度: {result[3]:.2f}%")
    
    # 9. 关闭连接
    cursor.close()
    conn.close()
    print("\n✓ 连接已关闭")
    print("\n🎉 Hello TDengine 示例运行完成!")

if __name__ == "__main__":
    main()

运行脚本:

bash 复制代码
python hello_tdengine.py

预期输出:

复制代码
正在连接 TDengine...
✓ 连接成功!

创建数据库...
✓ 数据库准备就绪

创建超级表...
✓ 超级表创建成功

创建子表...
✓ 子表创建成功

插入数据...
✓ 成功插入 5 条数据

查询数据...
列名: ['ts', 'temperature', 'humidity']
--------------------------------------------------------------------------------
时间: 2025-12-26 10:30:04, 温度: 22.80°C, 湿度: 57.00%
时间: 2025-12-26 10:30:03, 温度: 22.60°C, 湿度: 56.50%
时间: 2025-12-26 10:30:02, 温度: 22.40°C, 湿度: 56.00%
时间: 2025-12-26 10:30:01, 温度: 22.20°C, 湿度: 55.50%
时间: 2025-12-26 10:30:00, 温度: 22.00°C, 湿度: 55.00%

================================================================================

统计分析...
平均温度: 22.40°C
最高温度: 22.80°C
最低温度: 22.00°C
平均湿度: 56.00%

✓ 连接已关闭

🎉 Hello TDengine 示例运行完成!

📚 核心概念解释

1. 超级表(Super Table)

超级表是 TDengine 的核心概念,它定义了一类设备的数据结构模板。通过超级表,可以方便地管理成千上万个相同类型的设备。

2. 子表(Sub Table)

子表代表具体的设备或数据采集点,继承超级表的结构,并通过标签(TAGS)区分不同设备。

3. 标签(TAGS)

标签是设备的静态属性,如位置、型号、编号等,用于过滤和分组查询。

4. 时间戳(TIMESTAMP)

每条记录的主键,TDengine 会自动按时间排序和优化存储。

🌟 TDengine 的独特优势

  1. 极简架构:一个数据库搞定消息队列、缓存、流式计算等功能
  2. 高压缩比:相同数据量,存储空间仅为传统数据库的 1/10
  3. 超高性能:写入和查询速度远超传统时序数据库
  4. 易于使用:支持标准 SQL,学习成本低
  5. 云原生:支持 Kubernetes 部署,弹性扩展
  6. AI 智能:内置 TDgpt 智能体,提供预测、异常检测等功能

📖 进一步学习

💬 常见问题

Q1: TDengine 是免费的吗?

A: TDengine 的核心功能(包括集群)完全开源免费,企业版提供更多高级功能和技术支持。

Q2: TDengine 支持哪些编程语言?

A: 支持 C/C++、Java、Python、Go、Rust、Node.js、C#、PHP、R 等主流语言。

Q3: TDengine 可以用于生产环境吗?

A: 当然可以!全球已有超过 135,000+ 个运行实例,广泛应用于工业、金融等关键领域。

Q4: 如何从其他数据库迁移到 TDengine?

A: TDengine 提供了数据导入工具和迁移指南,支持从 InfluxDB、OpenTSDB 等时序数据库迁移。

Q5: TDengine 如何保证数据可靠性?

A: 支持多副本机制、数据持久化、故障自动切换等企业级特性。


恭喜你! 🎉 你已经完成了 TDengine 的入门学习。现在你可以开始使用 TDengine 构建自己的时序数据应用了。

祝你使用愉快!如有问题,欢迎访问 TDengine 社区交流

相关推荐
打不了嗝 ᥬ᭄2 小时前
【MySQL】表的约束与基本查询
数据库·mysql
无心水2 小时前
【神经风格迁移:性能】24、神经风格迁移全链路监控实战:基于Prometheus+Grafana的性能调优指南
数据库·人工智能·深度学习·机器学习·grafana·prometheus·神经风格迁移:性能
augisTrench2 小时前
LatentFlowx是一种非令牌的、状态驱动的推理运行时,旨在通过以下方式降低计算成本并提高可控性
数据库
橘子真甜~2 小时前
Reids命令原理与应用2 - Redis网络层与优化,pipeline,发布订阅与事务
数据库·redis·缓存·事务·发布订阅·lua脚本·acid特性
源代码•宸2 小时前
goframe框架签到系统项目开发(用户认证中间件、实现Refresh-token接口)
数据库·经验分享·后端·算法·中间件·跨域·refreshtoken
建群新人小猿2 小时前
陀螺匠 企业助手-经我审批
服务器·数据库·php
码农阿豪2 小时前
从 Oracle 到电科金仓:一次性能优化视角下的深度迁移体验
数据库·oracle·性能优化·金仓数据库
txzz88882 小时前
Linux系统db_load命令
数据库·翻译·db_load命令
2401_876221342 小时前
数据库系统概论(第6版)模拟题1
数据库