在工业物联网场景中,一台复杂设备往往配备多种传感器,各传感器的采集频次差异巨大。如何优雅地管理这些数据?TDengine时序数据库通过虚拟表机制,给出了创新性的解决方案。
一、传统建模的困境
1.1 复杂设备的建模挑战
“一个数据采集点一张表”以及”超级表”的设计解决了工业和物联网等场景下的大多数时序数据管理和分析难题。但在真实的场景中,一个设备往往有多种传感器,数据采集频次还相差很大。
以一台风机为例:
- 电气参数:高频采集,每秒多次
- 环境参数:中频采集,每分钟数次
- 机械参数:低频采集,每小时数次
各自的传感器和采集频次完全不一样,因此很难用一张表来描述一台设备,往往需要多张表。
1.2 传统方案的局限
当需要综合多个传感器的数据进行分析计算时,传统方案只能通过多级关联查询的方式来进行,这会导致:
- 易用性问题:SQL语句复杂,开发难度大
- 性能问题:多表关联开销大,查询效率低
如果建模之初直接采用”一个设备一张表”的设计,由于采集频次的不同,会导致每一个具体时间戳下,大量的列是空值,降低存储和查询的效率。
二、虚拟表的核心概念
2.1 什么是虚拟表
虚拟表(Virtual Table,简称为VTable)是一种不存储实际数据而可以用于分析计算的表。数据来源为其它真实存储数据的子表、普通表,通过将各个原始表的不同列的数据按照时间戳排序、对齐、合并的方式来生成虚拟表。
2.2 虚拟表的分类
同真实表类似,虚拟表也可以分为:
| 类型 | 说明 |
|---|---|
| 虚拟超级表 | 一个设备或一组分析计算所需数据的完整集合 |
| 虚拟子表 | 根据需要引用相同或不同的列,灵活定义 |
| 虚拟普通表 | 独立的虚拟表实例 |
2.3 虚拟表的特点
- 不存储数据:虚拟表不能写入、删除数据
- 动态生成:数据是每次查询计算时动态生成的
- 查询透明:在查询使用上和真实表相同
- 按需组合:只有一个查询中引用的列才会被合并进虚拟表中
三、虚拟表的核心功能
3.1 列选择与拼接
用户可以从多个原始表中选择指定的列,按需组合到一张虚拟表中,形成统一的数据视图。这使得:
- 不同采集频次的数据可以统一呈现
- 分析计算时无需关心底层表结构
- 业务视角与存储视角解耦
3.2 基于时间戳对齐
虚拟表以时间戳为依据对数据进行对齐:
- 如果多个表在相同时间戳下存在数据,则对应列的值组合成同一行
- 若部分表在该时间戳下无数据,则对应列填充为NULL
这种机制完美解决了不同采集频次数据的对齐问题。
3.3 动态更新
虚拟表根据原始表的数据变化自动更新,确保数据的实时性。虚拟表不需实际存储,计算在生成时动态完成,既节省存储空间,又保证数据一致性。
四、先写入后建模
4.1 传统建模流程
传统方式要求先设计好完整的表结构,再进行数据写入:
需求分析 → 表结构设计 → 创建表 → 数据写入 → 数据分析
这种方式的问题在于:
- 初期建模负担重
- 需求变化时修改困难
- 可能遗漏重要的采集量
4.2 虚拟表带来的变革
虚拟表机制让先写入后建模成为现实:
数据写入(按设备协议)→ 数据存储 → 按需建模(虚拟表)→ 数据分析
在数据采集和写入阶段,无需预先为复杂的业务分析设计表结构,可以按照最接近设备协议的方式(如单列模型)直接写入TDengine。待数据存储后,再根据实际的分析需求,通过虚拟表动态地创建适合业务视角的数据模型。
4.3 变革的价值
- 降低接入复杂度:无需预先规划所有分析需求
- 减轻初期建模负担:边采集边发现需求
- 灵活高效:数据处理流程更加灵活高效
五、虚拟表的应用场景
5.1 复杂设备管理
对于拥有多种传感器的复杂设备,虚拟超级表可以是一个设备或一组分析计算所需数据的完整集合。每个虚拟子表可以根据需要引用相同或不同的列,最终达到”千人千面”的效果。
5.2 跨库跨表分析
无论每个采集点如何建模(单列或多列),无论这些采集点的数据是分布在一个或多个库中,都可以通过定义虚拟表的方式:
- 跨库跨表任意指定数据源
- 通过虚拟超级表进行跨数据采集点、跨分析的聚合运算
5.3 业务视角统一
从用户的角度来看,”一个设备一张表”更为直观、容易操作。虚拟表机制让这一愿景彻底成为现实:
- 存储层:按采集点分散存储,保证性能
- 业务层:按设备统一呈现,提升易用性
六、虚拟表与真实表的对比
| 特性 | 真实表 | 虚拟表 |
|---|---|---|
| 数据存储 | 实际存储数据 | 不存储数据 |
| 写入操作 | 支持写入 | 不支持写入 |
| 删除操作 | 支持删除 | 不支持删除 |
| 查询操作 | 支持查询 | 支持查询(与真实表相同) |
| 数据来源 | 直接采集 | 来自其他表 |
| 更新机制 | 手动操作 | 动态生成 |
七、最佳实践建议
7.1 建模策略
- 存储层:按照最接近设备协议的方式建模,优先考虑写入性能
- 业务层:通过虚拟表构建业务视角的数据模型
- 分离关注点:存储优化与业务分析解耦
7.2 虚拟表设计
- 根据分析需求定义虚拟表结构
- 合理选择引用的原始表列
- 利用时间戳对齐机制处理频次差异
7.3 性能优化
- 虚拟表查询时动态生成,注意查询复杂度
- 合理设计原始表的索引
- 避免在虚拟表上执行过于复杂的聚合计算
总结
TDengine时序数据库的虚拟表机制是一项创新性设计,它巧妙地解决了复杂设备数据管理的难题。通过”先写入后建模”的方式,大幅降低了数据接入的复杂度;通过动态生成的虚拟表,实现了存储优化与业务便利的完美平衡。虚拟表机制让”一个设备一张表”从理想变为现实,为工业数据管理平台(IDMP)的建设提供了强有力的技术支撑。TDengine通过这一机制,进一步巩固了其在时序数据库领域的领先地位。

























