首页
>
资源
>
技术解析

时序数据库涛思 TDengine 与 TimescaleDB 对比

TDengine 简介

TDengine 是一款集群开源、云原生的时序数据库,为物联网、工业互联网等场景优化设计,能将物联网设备产生的时序数据进行汇聚、存储、分析和分发。

TimescaleDB 简介

TimescaleDB 是一款由 Timescale 公司(于 2025 年 6 月 17 日更名为“TigerData”)开发的开源时序数据库。该数据库基于 PostgreSQL 扩展,通过额外的 SQL 函数和表结构,专门为大规模时序数据提供了存储优化、性能提升及分析功能支持。

综合对比

TDengine

TimescaleDB

官网

https://www.taosdata.com/

https://www.tigerdata.com/

技术文档

https://docs.taosdata.com/

https://docs.tigerdata.com/#TimescaleDB

初始版本时间

2019

2017

是否开源

底层语言

C

C

支持操作系统

Linux、Windows、MacOS

Linux、OS X、Windows

支持编程语言

C
C#
C++
Go
Java
JavaScript (Node.js)
PHP
Python
Rust

.Net
C
C++
Delphi
Java
JavaScript
Perl
PHP
Python
R
Ruby
Scheme
Tcl

语法

标准 SQL,针对时序数据特点新增语法和功能

提供完整的 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 应用场景

  • 能源消耗分析:利用能源消耗数据制定数据驱动型决策。

  • 交通与地理空间数据分析:通过地理空间交通数据优化收益。

  • 比特币区块链分析:基于比特币区块链开展自主研究,挖掘交易、区块、费用与收益之间的关联。

  • 金融交易数据解析:绘制关注股票的交易高低点走势图。

  • 物联网传感器数据分析:生成模拟物联网传感器数据集并执行基础查询。