news 2026/6/23 12:42:41

TDengine 时序数据库实战笔记(20260622)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TDengine 时序数据库实战笔记(20260622)

文章目录

    • 1. 为什么需要时序数据库?(与传统数据库对比)
    • 2. 典型应用场景
    • 3. 为什么选 TDengine?
    • 4. 核心概念速览
    • 5. 逻辑表与物理表:MySQL vs TDengine
      • 5.1 MySQL:逻辑表与物理表
      • 5.2 TDengine:逻辑表与物理表(含时间分区与 vnode 分片)
    • 6. 核心操作速查
      • 6.1 建库(分区 + 保留 + 冷热分层)
      • 6.2 建超级表(带缺省值、分片)
      • 6.3 动态写入(伪代码)
      • 6.4 创建预聚合(TSMA)
    • 7. 性能基线
      • 时间裁剪示例(假设数据库 `duration 10d`)
    • 8. 生产部署架构
    • 9. 版本与资源

1. 为什么需要时序数据库?(与传统数据库对比)

对比维度传统关系型数据库 (如 MySQL)时序数据库 (以 TDengine 为例)
数据本质离散事务,增删改查均衡按时间顺序产生的结构化数据流,写多读少
时间处理时间只是一个普通字段时间是“第一公民”,自动分区、索引、裁剪
写入能力单机每秒几千~几万行单机每秒可达数百万行
查询模式多表关联、单条查询按时间范围聚合、降采样、趋势分析
存储压缩通用压缩,效率一般时序专用压缩,压缩比可达 10~30 倍
数据保留需手动清理历史数据内置自动过期 (KEEP),按分区直接删除文件

核心判断标准:如果业务是海量设备持续产生带时间戳的数据,且主要查询是看趋势或做统计,就应该选时序数据库。


2. 典型应用场景

  • 车联网:每辆车每秒上报 GPS、车速、电池状态等。
  • 工业物联网 (IIoT):工厂 PLC、传感器高频采集温度、压力、振动。
  • IT 监控:服务器 CPU、内存、网络流量等指标。
  • 金融科技:交易行情、风险指标计算。

3. 为什么选 TDengine?

  • 独特的“一设备一表”模型:单设备数据物理连续存储,顺序追加(无锁),查询极快。
  • 极简运维:内置时间分区、自动分片、冷热分层、预聚合,无需手动分库分表。
  • SQL 兼容:学习成本低,团队上手快。
  • 单机高性能:合理配置分片,4 核服务器也能支撑海量设备。
  • 开源版功能完整:分片、TSMA 预聚合、冷热分层、MQTT 订阅等全部免费。

4. 核心概念速览

概念说明
超级表 (STable)定义数据列结构、标签(TAGS)的模板,不存实际数据
子表 (Subtable)每个设备对应一张物理子表,用于存放该设备的所有数据
标签 (TAGS)设备静态属性(如位置、型号),自动建索引,用于分组过滤
时间分区 (duration)数据库级设置,按天/周/月自动切分物理数据文件
分片 (vgroups)超级表级设置,将子表打散到多个 vnode 并行处理,单机建议设为 CPU 核数
冷热分层 (tiered_storage)老数据自动从 SSD 迁移到 S3 对象存储
预聚合 (TSMA)提前计算每小时/每天的统计值,查询聚合结果时毫秒级返回
MQTT 订阅TDengine 可作为 MQTT Broker,反向推送数据给外部系统

5. 逻辑表与物理表:MySQL vs TDengine

5.1 MySQL:逻辑表与物理表

MySQL

1:1

逻辑表:sensor_data
(一张大表,包含所有设备)

物理文件:sensor_data.ibd
(所有设备数据混合存储)

实际例子

-- 创建一张表,所有设备共用CREATETABLEsensor_data(idINTAUTO_INCREMENTPRIMARYKEY,device_idVARCHAR(20),tsTIMESTAMP,currentFLOAT);-- 设备A、B、C的数据全部混插在一起INSERTINTOsensor_data(device_id,ts,current)VALUES('A',NOW(),10.5),('B',NOW(),12.1),('A',NOW(),10.7),('C',NOW(),9.8);-- 查设备A的数据,必须全表过滤 device_idSELECT*FROMsensor_dataWHEREdevice_id='A'ANDts>NOW()-INTERVAL7DAY;

5.2 TDengine:逻辑表与物理表(含时间分区与 vnode 分片)

物理层自动管理

逻辑层

VNode_2

VNode_1

USING 动态生成

USING 动态生成

数据按时间落入

落入

散列到不同 VNode

落入

超级表 meters
模板,定义列与标签

子表 d_A

子表 d_B

分区: 6.1-6.10

分区: 6.11-6.20

分区: 6.1-6.10

分区: 6.11-6.20

实际例子

-- 1. 建库:每10天一个分区CREATEDATABASEiot_db duration10d;-- 2. 建超级表:分4个vnode(单机4核)CREATESTABLE meters(tsTIMESTAMP,currentFLOAT)TAGS(locationINT)vgroups4;-- 3. 写入时自动生成子表INSERTINTOd_AUSINGmeters TAGS(1)VALUES('2026-06-01 08:00:00',10.5);-- 落入某vnode的6.1-6.10分区INSERTINTOd_AUSINGmeters TAGS(1)VALUES('2026-06-12 08:00:00',11.2);-- 落入6.11-6.20分区INSERTINTOd_BUSINGmeters TAGS(2)VALUES('2026-06-01 08:00:00',12.1);-- 散列到另一vnode-- 4. 查询设备A最近7天数据:只扫描d_A相关分区,无关数据自动跳过SELECT*FROMd_AWHEREts>=NOW-7d;

核心区别

  • MySQL 逻辑与物理 1:1 映射,所有设备数据混杂。
  • TDengine 逻辑上一设备一子表,物理上数据被时间分区切分文件、vnode 分片并行处理,单设备查询无需扫描其他设备数据,性能极高。

6. 核心操作速查

6.1 建库(分区 + 保留 + 冷热分层)

-- 定义 S3 磁盘(可选)CREATEDISKs3_diskTYPE'S3's3_endpoint'https://s3.example.com's3_bucket'mybucket's3_access_key'your_access_key's3_secret_key'your_secret_key';-- 建库:10天一分区,保留365天,启用冷热分层CREATEDATABASEiot_db duration10d keep365d tiered_storage's3_disk';

6.2 建超级表(带缺省值、分片)

CREATESTABLE meters(tsTIMESTAMP,currentFLOAT,voltageFLOATDEFAULT220-- 不上报则自动填220)TAGS(locationINT,device_typeBINARY(32))vgroups4;-- 4核单机设4

6.3 动态写入(伪代码)

device_id=msg["deviceId"]loc=msg["locationId"]dev_type=msg["deviceType"]current=msg.get("current")voltage=msg.get("voltage")columns=["ts"]values=["now"]ifcurrentisnotNone:columns.append("current");values.append(str(current))ifvoltageisnotNone:columns.append("voltage");values.append(str(voltage))sql=f"INSERT INTO{device_id}USING meters TAGS ({loc}, '{dev_type}') ({', '.join(columns)}) VALUES ({', '.join(values)})"

6.4 创建预聚合(TSMA)

-- 每小时自动计算平均电流和最大电流CREATETSMA tsma_hourlyONmeters METRICS(avg(current),max(current))INTERVAL(1h);-- 查询过去7天每小时平均电流,自动命中TSMA,毫秒级返回SELECT_wstart,avg(current)FROMmetersWHEREts>=NOW-7dINTERVAL(1h);

7. 性能基线

  • 单表容量:无硬上限,推荐控制在千万行级。过大时配合时间裁剪预聚合(TSMA)解决。
  • 单行最大长度:48KB(TDengine 3.x)。
  • 慢查询优化:务必带时间条件WHERE ts >= ...开启时间裁剪,配合 TSMA 避免全表扫描。

时间裁剪示例(假设数据库duration 10d

不裁剪(全表扫描)

-- 无时间条件,扫描所有历史分区,几亿行数据全过一遍SELECTavg(current)FROMd_A;

裁剪(只扫描必要分区)

-- 加上时间条件,只扫描最近7天对应的分区(如6.11~6.20和6.21~6.30两个分区)SELECTavg(current)FROMd_AWHEREts>=NOW-7d;

效果:扫描量从几亿行骤降到几百万行,速度提升几十倍。

时间裁剪 + TSMA 联合优化

-- 查询过去30天每小时的均值SELECT_wstart,avg(current)FROMd_AWHEREts>=NOW-30dINTERVAL(1h);
  • 时间裁剪:只扫30天内的3个分区。
  • TSMA 命中:直接读取预计算好的每小时汇总表,不碰原始数据。
  • 结果:从几亿行原始数据 → 几千行汇总结果,毫秒级返回

8. 生产部署架构

设备 → MQTT Broker → Kafka(削峰) → 你的程序 → TDengine(SSD热 + S3冷) ↕ (可选) MQTT订阅 → 大屏/告警

9. 版本与资源

  • TDengine OSS (开源版):免费,功能完整。
  • TDengine Enterprise (企业版):收费,含 IDMP 工业平台、资产树、可视化、告警等。
  • 官方文档:https://docs.taosdata.com/
  • 下载地址:https://github.com/taosdata/TDengine/releases/latest
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 12:38:29

安全组网热门品牌推荐

企业选 SD-WAN,早年比的是"能不能连上、带宽够不够",现在这个选项题已经前置成了另一道题,网络和安全是不是一张皮、方案能不能落到几百个门店/工厂/仓里、长期养不养得起。尤其对零售连锁、智能制造、物流仓储、多分支互联网这类&…

作者头像 李华
网站建设 2026/6/23 12:28:50

基于KNN算法的健身会员个性化锻炼与饮食方案推荐研究

题目:基于KNN算法的健身会员个性化锻炼与饮食方案推荐研究 (一)研究背景 近年来,随着机器学习技术在各个领域的应用日益广泛,特别是在个性化推荐系统中展现出强大的潜力。KNN(K-近邻)算法作为一种经典的机器…

作者头像 李华
网站建设 2026/6/23 12:28:29

工业防潮柜揭秘:量子算力芯片VS传统算力芯片

摘要:量子算力芯片(QPU)对比传统 CPU/GPU 算力芯片核心优势。关键词:工业防潮柜,量子算力芯片,MSD烘烤箱尚鼎除湿撰:LG首次公开基于量子计算的优化技术研发成果的消息传开之后,又引起…

作者头像 李华
网站建设 2026/6/23 12:23:30

快捷、网关支付选型指南

快捷支付与网关支付均为支付机构线上通道。用户端:快捷支付绑卡一键支付,无需跳转;网关支付跳转支付页面,操作繁琐。商户端:快捷支付适配小程序、APP,拉高转化;网关支付多用于 PC 网页商城收款。…

作者头像 李华
网站建设 2026/6/23 12:18:25

GGUF 量化模型在 Strix Halo 上的表现,精度与速度的最佳平衡

为什么在 Strix Halo 上死磕 GGUF 量化? 拿到 AMD Ryzen AI Max 395(Strix Halo 架构)这台机器后,最让我兴奋的不是它能跑多少 3A 大作,而是那高达 128GB 的 LPDDR5X 统一内存。对于本地大模型玩家来说,这简…

作者头像 李华