TDengine 简介
TDengine 是一款集群开源、云原生的时序数据库,为物联网、工业互联网等场景优化设计,能将物联网设备产生的时序数据进行汇聚、存储、分析和分发。
TimescaleDB 简介
TimescaleDB 是一款由 Timescale 公司(于 2025 年 6 月 17 日更名为“TigerData”)开发的开源时序数据库。该数据库基于 PostgreSQL 扩展,通过额外的 SQL 函数和表结构,专门为大规模时序数据提供了存储优化、性能提升及分析功能支持。
综合对比
TDengine 功能
1. 写入数据
完全兼容 SQL,允许用户使用标准的 SQL 语法进行数据写入
支持无模式写入
2. 查询数据
提供标准 SQL 查询语法
针对时序数据特点新增语法和功能,如降采样、插值、时间加权平均等
支持用户自定义函数(UDF)
3. 流式计算
提供实时处理写入数据流的能力
支持连续查询
支持事件驱动的流式计算
4. 数据订阅
可以通过 SQL 控制订阅的数据内容,
使用和 Kafka 相同的 API 来订阅一张表、一组表、全部列或部分列、整个数据库的数据
5. 集群功能
通过增加节点线性提升系统处理能力,实现水平扩展
通过多副本技术提供高可用性
6. 集成工具
能够和 Grafana、Google Data Studio、Power BI、Tableau 以及国产 BI 工具集成,并提供图形化管理页面
提供交互式命令行程序
7. 语言连接器
提供多种语言的连接器,包括 C/C++、Java、Go、Python、C# 等。
提供 RESTful 接口
TimescaleDB 功能
1. 时序存储管理
超表(Hypertable):自动按时间维度分区,支持跨维度分区(如设备 ID+时间)
混合行列式存储引擎(Hypercore):行式存储用于存储最新数据,列式存储用于提高分析性能
分布式架构:如果主实例不可用,将自动故障转移到高可用性 (HA) 副本
2. 时序数据写入
写入数据:可以使用 INSERT、UPDATE 和 DELETE 语句在常规表和超表中添加和修改数据
3. 持续聚合引擎
增量刷新机制:基于 Postgres 物化视图的持续聚合,仅计算变更数据而非全量更新
近实时聚合:支持低延迟的聚合数据查询,降低资源消耗
4. 高性能时序处理
时段函数(Time Bucket):提供灵活的时间粒度聚合
超函数(Hyperfunction):旨在高效处理、聚合和分析海量数据,同时保持高性能
5. 全生命周期数据管理
分层存储策略(Tiered Storage):高性能存储层存储最新且最常查询的数据,对象存储层存储很少访问且性能要求较低的数据
数据保留策略(Data Retention):自动清理过期数据,支持与持续聚合联动实现数据降采样
生态支持:支持写入、查询、流处理、可视化、系统管理等维度软件生态集成
6. 无缝兼容性
完整 SQL 支持:100% 兼容 PostgreSQL 生态,支持所有 PG 工具链
TDengine 数据建模概念
采集量:通过各种传感器、设备或其他类型的采集点所获取的物理量
标签:附着在传感器、设备或其他类型采集点上的静态属性,这些属性不会随时间发生变化
数据采集点:在一定的预设时间周期内或受到特定事件触发时,负责采集物理量的硬件或软件设备
表:TDengine 采取了“一个数据采集点一张表”的设计策略,即要求为每个数据采集点单独建立一张表
超级表:能将某一特定类型的数据采集点聚集在一起,形成一张逻辑上的统一表
子表:数据采集点在逻辑上的一种抽象表示,它是隶属于某张超级表的具体表
虚拟表:一种不存储实际数据而可以用于分析计算的表,数据来源为其它真实存储数据的子表、普通表,通过将各个原始表的不同列的数据按照时间戳排序、对齐、合并的方式来生成虚拟表
库:用于管理一组表的集合
时间戳:每一条上报的时序数据自带的时间戳
TimescaleDB 数据建模及部分功能概念
超表(Hypertable):基于普通的 PostgreSQL 表创建,可以使用标准 SQL 语法对超表进行插入和查询等操作,并在普通表的基础上超表添加了自动分区、压缩和连续聚合的功能,以更高效地存储和查询时间序列数据。
块(Chunk):Hypertable 按照时间范围分割成的多个连续的数据块,以存储时序数据。
时段(Time Buckets):实现实时分析的核心功能,可以将 Hypertable 中的数据按时间粒度聚合为不同的时段单元。
TDengine 数据模型
在工业物联网领域,结构化数据采集是常态。为了降低用户的使用门槛,TDengine 沿用传统关系型数据库模型进行数据管理。同时,考虑到时序数据的独特属性,TDengine 采用 “一个数据采集点一张表” 的设计方案,即每个数据采集点都对应一张独立的数据表。
这一设计虽能对单个数据采集点实现高效管理,但随着设备数量的爆发式增长,表数量也呈指数级上升,给表的维护管理和跨表聚合操作带来困难。为解决该问题,TDengine 引入超级表概念。超级表结构包含至少一个时间戳列、多个采集量列以及标签列,其中,普通表代表具体数据采集点,超级表则作为具有相同属性的数据采集点集合,有效简化了表管理和聚合查询流程。
然而,实际应用场景更为复杂,一台设备往往搭载多种传感器,且各传感器数据采集频率差异显著,难以用单张表完整描述设备数据。若需整合多传感器数据进行分析,只能依赖多级关联查询,不仅影响使用便捷性,还会降低系统性能。针对这一问题,TDengine 推出虚拟表机制,涵盖虚拟超级表、虚拟子表和虚拟普通表类型。虚拟表仅支持查询操作,无法写入或删除数据,但其在查询功能上与真实表保持一致。
TimescaleDB 数据模型
TimescaleDB 的底层数据结构为 Hypertable(超表),是一种逻辑上的时间分区表。每个 Hypertable 可以自动将数据按时间分割成多个块(Chunk),以实现对时序数据的高效管理。
时间分区方面,每个 Hypertable 块都会被分配一个时间范围,并且仅包含该范围内的数据。当运行查询时,TimescaleDB 会识别正确的块并对其运行查询,而无需遍历整个表。默认情况下,每个 Hypertable 块会保存 7 天的数据,用户可以根据自己的需求进行更改。
空间分区方面,TimescaleDB 支持在创建超表时(即表为空时),在非时间列(如位置或设备 UUID)上添加分区维度,并指定分区数量,以适配特定条件查询。随着数据增长,用户也可以调整分区数量以提升查询性能。
TDengine 应用场景
智慧城市:存储和管理城市交通、照明、环境监测(PM2.5、PM10)、给排水、燃气监测等数据
智慧工厂:存储生产设备的工业传感器数据(如电流、电压、设备状态)
智慧水务:在水环境治理系统中存储液位、电流、硫化氢、雨量等数据
地震监测与预警:存储地震波形数据,实现实时波形展示
能源电力:管理风机/电表等上报的能源数据,实现了设备监测与预测
车联网:处理车辆电池、自动驾驶传感器数据,方便分析与维护
TimescaleDB 应用场景
能源消耗分析:利用能源消耗数据制定数据驱动型决策。
交通与地理空间数据分析:通过地理空间交通数据优化收益。
比特币区块链分析:基于比特币区块链开展自主研究,挖掘交易、区块、费用与收益之间的关联。
金融交易数据解析:绘制关注股票的交易高低点走势图。
物联网传感器数据分析:生成模拟物联网传感器数据集并执行基础查询。