TDengine RSMA — 时间维度的滚动预聚合

分类:8.预聚合 |篇章:01 RSMA

适用版本:TDengine v3.x(v3.3.x / v3.4.x) | 最后更新:2026-07-06

RSMA(Rollup SMA,滚动小型聚合)让 TDengine 自动维护多层时间粒度的预聚合数据。原始秒级数据存几天 → 分钟级聚合存几个月 → 小时级聚合存几年,存储成本降数量级,长时间范围查询毫秒返回。

核心概念速查表

概念说明
RSMARollup SMA,滚动预聚合
Rollup Level聚合层级(如原始/1m/1h)
Retention各层级的保留时长
Funcs预聚合的聚合函数
Auto Rollup自动按时间滚动

详细解析

1. RSMA 的设计动机

时序数据的痛点: ① 原始数据量巨大: 1000 设备 × 每秒 1 次 × 1 年 = 315 亿行 → 存储成本高 ② 长时间范围查询慢: 一年的趋势图:要扫描 315 亿行 → 数分钟~小时 ③ 大多数查询不需要原始精度: 季度报表用日数据 年报表用月数据 原始秒数据浪费 RSMA 的解: 原始秒数据 → 自动滚动 → 分钟聚合 → 小时聚合 各层级独立保留期 查询时自动选择最合适的层级

2. RSMA 数据库配置

-- 创建带 RSMA 的数据库CREATEDATABASErsma_dbPRECISION'ms'KEEP365d DURATION10d MAXROWS4096-- RSMA 关键参数 --RETENTIONS'1d:30d,1m:60d,1h:1y';含义:-1d:30d → 原始数据保留30-1m:60d → 分钟聚合保留60-1h:1y → 小时聚合保留1年 RETENTIONS 格式:'<层级粒度>:<保留期>, ...'-层级粒度:1s,1m,1h,1d 等-保留期:单位 d/w/n/y 最多3层: 原始+第一层+第二层

3. RSMA 超级表

-- 创建支持 RSMA 的超级表CREATESTABLE meters(tsTIMESTAMP,currentFLOAT,voltageINT,phaseFLOAT)TAGS(locationVARCHAR(32),groupidINT)ROLLUP(AVG);-- 指定预聚合函数-- 多个聚合函数CREATESTABLE meters_full(tsTIMESTAMP,currentFLOAT,voltageINT)TAGS(locationVARCHAR(32))ROLLUP(AVG,MAX,MIN,SUM,FIRST,LAST);ROLLUP 支持的函数:-AVG,SUM,MAX,MIN,FIRST,LAST,COUNT-适合分布性聚合(满足结合律)

4. RSMA 数据流

数据流转过程: 写入: T0 (原始秒级数据) ↓ 原始数据存储 ↓ 自动滚动 (每分钟) ↓ 计算 AVG/MAX/MIN 等 ↓ 分钟聚合存储 ↓ 自动滚动 (每小时) ↓ 小时聚合存储 保留期管理: - 原始数据超过 30 天 → 自动删除 - 分钟聚合超过 60 天 → 自动删除 - 小时聚合超过 1 年 → 自动删除 存储节省(示例): 原始数据 1TB 分钟聚合 ~17GB (60倍压缩) 小时聚合 ~280MB (3600倍压缩)

5. RSMA 查询

查询自动选择层级: -- 查询最近 1 小时(命中原始) SELECT _wstart, AVG(current) FROM meters WHERE ts > now-1h INTERVAL(1m); → 使用原始数据 -- 查询最近 30 天(命中分钟聚合) SELECT _wstart, AVG(current) FROM meters WHERE ts > now-30d INTERVAL(1h); → 自动使用分钟聚合层 -- 查询最近 1 年(命中小时聚合) SELECT _wstart, AVG(current) FROM meters WHERE ts > now-1y INTERVAL(1d); → 自动使用小时聚合层 引擎的选择逻辑: ① 查询时间范围 ② 聚合粒度 (INTERVAL) ③ 所需函数(必须在 ROLLUP 列表中) ④ 选择满足所有条件的最高层级

6. RSMA 与流计算的区别

特性RSMA流计算
触发数据库内置显式创建
配置DDL(建库/表时)CREATE STREAM
查询透明(自动选层)查询不同表
灵活性低(固定函数)
适用通用聚合复杂业务逻辑
维护系统自动用户管理

7. RSMA 与传统数据归档对比

传统方式: 1. 手写 ETL 脚本 2. 定时任务调度 3. 中间数据库管理 4. 查询时手动选择源表 问题: - 维护复杂 - 时间窗口边界处理麻烦 - 重复代码 RSMA 优势: - 数据库内置 - 零维护 - 查询透明 - 时间精度精准

8. RSMA 限制与注意

限制: ① 必须建库时配置 RETENTIONS(不可后改) ② 必须建表时指定 ROLLUP ③ 最多 3 层(原始 + 2 层聚合) ④ 仅支持分布性聚合函数 ⑤ Tag 不参与聚合 注意事项: - 滚动计算消耗 CPU - 占用磁盘(但远少于原始) - 一旦数据到达保留上限 → 不可恢复 不适合 RSMA 的场景: - 需要任意精度的历史数据 - 复杂聚合(PERCENTILE 等) - 业务变更频繁需重算

代码示例

完整 RSMA 配置

-- 1. 创建数据库CREATEDATABASEpower_dbPRECISION'ms'KEEP1825-- 5 年DURATION30d RETENTIONS'1s:7d,1m:30d,1h:5y';USEpower_db;-- 2. 创建超级表CREATESTABLE meters(tsTIMESTAMP,currentFLOAT,voltageINT,phaseFLOAT)TAGS(locationVARCHAR(32),groupidINT)ROLLUP(AVG,MAX,MIN);-- 3. 写入数据INSERTINTOd001USINGmeters TAGS('Beijing',1)VALUES(NOW,25.3,220,0.5);-- 自动后台滚动聚合-- 4. 查询SELECT_wstart,AVG(current)FROMmetersWHEREts>now-1yINTERVAL(1d);-- 自动使用小时聚合层

检查 RSMA 状态

-- 查看数据库 RSMA 配置SELECTname,precision,retentions,keepFROMinformation_schema.ins_databasesWHEREname='power_db';-- 查看超级表 ROLLUP 设置SELECT*FROMinformation_schema.ins_stablesWHEREstable_name='meters';

性能考量

RSMA 存储节省

层级数据量比例适用查询
原始(1s)100%< 1 天范围
分钟(1m)~1.7%1 天~1 月
小时(1h)~0.03%1 月~1 年+

查询性能提升

查询范围不用 RSMA用 RSMA
1 小时100ms100ms
1 天1 秒1 秒
1 月30 秒1 秒
1 年6 分钟5 秒

写入开销

RSMA 滚动计算异步进行,对写入吞吐影响 < 10%。

FAQ

Q1: 建库后能修改 RSMA 配置吗?

不可以。必须建库时确定。如需调整,新建库迁移数据。

Q2: ROLLUP 函数可以增加吗?

不可以。建表后固定。如需增加新函数,需重建表。

Q3: 查询某些条件不命中 RSMA 怎么办?

引擎自动降级到原始层。WHERE 含数据列过滤通常会降级(聚合层无单行数据)。

Q4: RSMA 数据可见吗?

不直接可见。用户查询超级表,引擎自动选择层级,对用户透明。

Q5: RSMA 和 TSMA 区别?

  • RSMA:固定层级(时间维度),自动滚动
  • TSMA:按 INDEX 配置,更灵活,支持任意聚合表达式

参考

系统构架篇

  • 01-《TDengine 整体架构全景》
  • 02-《集群拓扑深度解析》
  • 03-《MNode 内部机制深度解析》
  • 04-《RPC 通信层深度解析》
  • 05-《VNode 生命周期》
  • 06-《RAFT 共识协议》
  • 07-《端到端的消息流》

数据模型

  • 01-《数据库创建与参数详解》
  • 02-《超级表/子表/普通表》
  • 03-《支持数据类型深度解析》
  • 04-《TDengine Tag 设计哲学与 Schema 变更机制》
  • 05-《TDengine 虚拟表实现原理》

存储引擎

  • 01-《TDengine 存储引擎概览》
  • 02-《TDengine MemTable 深度解析》
  • 03-《TDengine WAL 预写日志机制》
  • 04-《TDengine 数据文件格式》
  • 05-《TDengine Commit 与 Flush 机制 》
  • 06-《TDengine Compaction 合并策略 》
  • 07-《TDengine 数据保留与 TTL》
  • 08-《TDengine 压缩编码机制》
  • 09-《TDengine Cache 与 Last 查询加速》
  • 10-《TDengine 逻辑计划生成》

查询引擎

  • 01-《TDengine 查询引擎概览》
  • 02-《TDengine SQL 解析与词法分析》
  • 03-《TDengine 语义分析与 AST 重写》
  • 04-《TDengine 逻辑计划生成》
  • 05-《TDengine 物理计划生成》
  • 06-《TDengine 扫描算子》
  • 07-《TDengine 聚合算子》
  • 08-《TDengine 聚合算子》
  • 09-《TDengine 连接算子》
  • 10-《TDengine 排序、填充与投影》
  • 11-《TDengine 分布式查询执行》
  • 12-《TDengine EXPLAIN 与查询优化》

数据写入

  • 01-《TDengine SQL INSERT》
  • 02-《TDengine 无模式写入》
  • 03-《TDengine STMT 写入》
  • 04-《TDengine 写入内部流程》
  • 05-《TDengine 数据更新删除》

数据订阅

  • 01-《TDengine 数据订阅》
  • 02-《TDengine 订阅 vs Kafka》
  • 03-《TDengine TMQ 消费流程》
  • 04-《TDengine 内部机制》
  • 05-《TDengine 内部机制》

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。