详解遥测数据
正文与配图来自原稿。一切以官方英文文档为准:
https://thingsboard.io/docs/user-guide/telemetry/
1、什么是遥测数据?
设备随时间变化上报的数据,就是遥测数据(Telemetry)。
2、什么是数据点?
ThingsBoard 内部把遥测看作带时间戳的键值对。单个带时间戳的键值对称为一个数据点(data point)。
- 键:始终是字符串
- 值:可以是字符串、布尔、双精度、整数或 JSON
2.1、遥测示例 1
下面 JSON 含 5 个数据点:temperature(双精度)、humidity(整数)、hvacEnabled(布尔)、hvacState(字符串)、configuration(JSON):
json
{
"temperature": 42.2,
"humidity": 70,
"hvacEnabled": true,
"hvacState": "IDLE",
"configuration": {
"someNumber": 42,
"someArray": [1, 2, 3],
"someNestedObject": {"key": "value"}
}
}该 JSON 没有时间戳时,ThingsBoard 使用当前服务器时间。
2.2、遥测示例 2
消息中可自带时间戳:
json
{
"ts": 1527863043000,
"values": {
"temperature": 42.2,
"humidity": 70
}
}3、遥测数据存储
可通过 thingsboard.yml(或环境变量)选择存储方式,支持:
- SQL:PostgreSQL
- NoSQL:Cassandra 或 Timescale
经验阈值(原稿):
| 规模 | 建议 |
|---|---|
| 数据点 < 约 5000/秒 | 可用 PostgreSQL |
| 数据点 > 约 5000/秒 | 建议 Cassandra |
4、遥测数据保留(TTL)
策略取决于所选存储。
Cassandra
支持按插入行的 TTL。可用环境变量 TS_KV_TTL 配置系统默认 TTL;也可在 Save Timeseries 规则节点覆盖,或使用消息 metadata 的 TTL 字段,以优化存储。TTL 最大允许约 5 年。
Save Timeseries 节点的 TTL 常与租户配置中的默认存储 TTL 天数相关,可在 TbMsgTimeseriesNode 中看到:

PostgreSQL / Timescale
不支持按行 TTL。需用 SQL_TTL_* 等环境变量配置定期清理时序数据的例程。
补充(辅)
- 「最新遥测」与「历史时序」可分库存;高频场景可 跳过最新遥测更新。
- 存储与压测实践:初始化 Cassandra、性能测试。
