
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?
✅ 适合的场景
- 数据具有时间戳特征:每条数据都有明确的时间属性
- 写多读少:数据持续写入,查询相对较少
- 数据量大:每天产生 GB 到 TB 级别的数据
- 实时性要求高:需要实时采集、处理和展示数据
- 多个数据源:有大量设备或传感器持续产生数据
❌不太适合的场景
- 数据没有时间维度:如用户账号信息、商品库存等
- 频繁更新历史数据:时序数据通常只追加,不修改
- 复杂的关系型查询:如多表 JOIN、事务处理等
- 数据量很小:每天只有几千条数据
🚀 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/10
- 超高性能:写入和查询速度远超传统时序数据库
- 易于使用:支持标准 SQL,学习成本低
- 云原生:支持 Kubernetes 部署,弹性扩展
- AI 智能:内置 TDgpt 智能体,提供预测、异常检测等功能
📖 进一步学习
- 官方文档:https://docs.taosdata.com
- GitHub 仓库:https://github.com/taosdata/TDengine
- 云服务体验:https://cloud.taosdata.com
- 社区支持:https://www.taosdata.com/community
💬 常见问题
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 社区交流。