You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何选择TDengine的普通表(normal table)与超级表(stable)?

如何选择TDengine的超级表(Stable)和普通表(Normal Table)

我当初刚上手TDengine的时候也纠结过这个问题,踩过几次坑后才慢慢摸清楚两者的适用场景,分享给你参考下:

核心区别先搞懂

超级表(Stable)本质是同结构子表的集合,自带标签(Tag)用于区分不同子表;普通表就是独立的单表,没有标签属性,结构固定且唯一。

什么时候选超级表?

  • 多同类型实体的时间序列数据:比如物联网场景下的成百上千个温湿度传感器、运维监控里的数十台服务器,它们的采集字段完全一致,只是所属实体(传感器ID、服务器IP)不同。
    用超级表的优势是:可以通过标签快速过滤、聚合跨实体的数据,比如直接查询「上海区域所有传感器的今日平均温度」,不用手动拼接多个表的查询结果,效率提升非常明显。
    举个简单的创建示例:
    -- 创建超级表,定义通用字段和标签
    CREATE STABLE sensors (ts TIMESTAMP, temp FLOAT, humi INT) TAGS (sensor_id INT, location VARCHAR(20));
    -- 为每个传感器创建子表
    CREATE TABLE sensor_beijing_001 USING sensors TAGS (1, "Beijing");
    CREATE TABLE sensor_shanghai_001 USING sensors TAGS (2, "Shanghai");
    
  • 有明确分组查询/聚合需求:如果你的业务经常需要按某个维度(比如设备型号、机房位置)做统计分析,超级表的标签索引会比普通表的联合查询高效很多,而且逻辑更简洁。
  • 后期需要扩展同类型实体:提前用超级表设计,后续新增设备/传感器时,直接创建子表即可,完全不用修改原有查询逻辑。

什么时候选普通表?

  • 单一实体的时间序列数据:比如只有一个气象站的历史监测数据,或者单台服务器的性能日志,没有多实体分组的需求,用普通表足够,没必要增加超级表的复杂度。
  • 不同实体的数据结构差异大:比如你同时需要存储温湿度数据和电压电流数据,两者的字段完全不同,没法归到同一个超级表下,就各自创建普通表来管理。
  • 临时/一次性数据存储:比如某个临时实验的日志数据,后续不会有扩展或跨表查询需求,普通表更轻便。

选型小技巧

如果一开始拿不准,优先考虑用超级表的模式设计——因为子表本质也是普通表,就算后期发现不需要跨实体查询,单独查询子表也完全没问题;但如果先建了普通表,后期要合并成超级表就需要重新导数据,成本很高。

内容的提问来源于stack exchange,提问作者xiaolei

火山引擎 最新活动