欢迎光临
我们一直在努力

TDengine vs TimescaleDB — 时序数据库对比

分类:16.对比 | 篇章:02 vs TimescaleDB 在这里插入图片描述 免费详情

TimescaleDB 是基于 PostgreSQL 的时序扩展,TDengine 是从底层重新设计的时序数据库。本文对比两者的架构、性能、特性、生态。

速查对比

维度TDengineTimescaleDB
基础 独立引擎 PostgreSQL 扩展
协议 TAOS / WS / REST PostgreSQL Wire
数据模型 STable + SubTable Hypertable + Chunks
查询语言 SQL PostgreSQL SQL
副本 内置 RAFT PG 流复制/集群
横向扩展 原生 Distributed Hypertable(部分)
压缩 列存高压缩 行存 + 列段压缩
关联查询 JOIN 时序优化 PG JOIN 强
生态 自有生态 PG 完整生态

详细对比

1. 架构差异

TDengine:
┌─────────────────────────┐
│ 独立时序数据库引擎 │
│ ───────────────── │
│ MNode + VNode + QNode │
│ TSDB 存储引擎 │
│ 多协议接入 │
└─────────────────────────┘

– 从零设计为时序
– 列存 + Tag 索引
– 内置分布式

TimescaleDB:
┌─────────────────────────┐
│ PostgreSQL 扩展 │
│ ───────────────── │
│ Hypertable (分块) │
│ PG 索引 + 列段压缩 │
│ PG 全功能 │
└─────────────────────────┘

– 基于 PG(多模型)
– 时序+关系混合
– 通过 PG 集群方案扩展

2. 数据模型

— TDengine
CREATE STABLE meters (
ts TIMESTAMP, current FLOAT
) TAGS (
location NCHAR(20)
);

— 写入自动创建子表
INSERT INTO d_001 USING meters TAGS ('Beijing') VALUES (NOW, 25.3);

— TimescaleDB
CREATE TABLE meters (
ts TIMESTAMPTZ NOT NULL,
device_id TEXT NOT NULL,
location TEXT,
current FLOAT
);

SELECT create_hypertable('meters', 'ts');
CREATE INDEX ON meters (device_id, ts DESC);

INSERT INTO meters VALUES (NOW(), 'd_001', 'Beijing', 25.3);

对比:

TDengine:
– 一设备一子表(隐式分片)
– Tag 索引天然按设备聚合
– 适合大量设备

TimescaleDB:
– 一个表 + Chunks
– 普通索引(B-Tree)
– 适合关系+时序混合

TDengine 优势:
– 千万级设备性能不衰减
– Tag 索引高效
– 列存压缩极致

TimescaleDB 优势:
– JOIN 丰富表数据
– 灵活 schema
– PG 类型系统强大

3. 查询性能

— 查询 1: 单设备最新(两者都快)
— TDengine
SELECT * FROM meters
WHERE device_id = 'd_001'
ORDER BY ts DESC LIMIT 1;

— TimescaleDB
SELECT * FROM meters
WHERE device_id = 'd_001'
ORDER BY ts DESC LIMIT 1;

— 查询 2: 大范围聚合
— TDengine(用 TSMA 数十毫秒)
SELECT _wstart, AVG(current)
FROM meters
WHERE ts > NOW 30d
INTERVAL(1d);

— TimescaleDB(Continuous Aggregate)
CREATE MATERIALIZED VIEW meters_daily
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 day', ts) AS day, AVG(current)
FROM meters
GROUP BY day;

SELECT * FROM meters_daily
WHERE day > NOW() INTERVAL '30 days';

— 查询 3: 大量设备分组
— TDengine(PARTITION BY 高效)
SELECT device_id, AVG(current)
FROM meters
WHERE ts > NOW 1h
PARTITION BY device_id;

— TimescaleDB
SELECT device_id, AVG(current)
FROM meters
WHERE ts > NOW() INTERVAL '1 hour'
GROUP BY device_id;

性能参考:

10 亿行 30 天聚合:
TDengine(带 TSMA):~500ms
TimescaleDB(带 CAGG):~1s

10 万设备分组:
TDengine:~200ms
TimescaleDB:~500ms

小范围明细:双方相近

4. 写入性能

单节点写入吞吐(参考):

TDengine:
– STMT2: ~10M points/sec
– InfluxDB Line: ~3M points/sec

TimescaleDB:
– COPY: ~2M rows/sec
– INSERT: ~500K rows/sec

TDengine 优势:
– 多种高效写入接口
– 列存压缩高
– 分布式天然支持

TimescaleDB 优势:
– PG 兼容(用 PG 写工具)
– 事务保证

5. 高可用与扩展

TDengine(开源):
✓ 内置 RAFT REPLICA 3
✓ 自动故障转移
✓ 一键扩容(CREATE DNODE)
✓ 100+ 节点验证

TimescaleDB(开源):
✓ PG 流复制(主从)
✓ Patroni 等 HA 工具
✓ Distributed Hypertable(已弃用部分场景)

TimescaleDB Cloud:
✓ 全托管
✓ 高可用
✓ 自动备份

对比:
– 开源版扩展性:TDengine 占优
– PG 工具链:TimescaleDB 完整

6. 关系/JOIN 能力

— TimescaleDB:PG 原生 JOIN 强大
SELECT
m.ts, m.current,
d.model, d.installer
FROM meters m
JOIN device_info d ON m.device_id = d.id
WHERE m.ts > NOW() INTERVAL '1 day';

— 还可 LATERAL、WINDOW FUNCTION、CTE 等

— TDengine:JOIN 支持但场景化
— 强于时序场景(按 ts 对齐)
SELECT m1.ts, m1.current, m2.voltage
FROM meters m1
JOIN voltage_table m2 ON m1.ts = m2.ts
WHERE m1.device_id = 'd_001';

对比:

关系型 JOIN:
– TimescaleDB 完整 PG 能力
– TDengine 简化但够用

时序 JOIN:
– TDengine 优化好(按 ts 对齐)
– TimescaleDB 通用 JOIN

7. 生态对比

TDengine:
✓ taosAdapter 多协议网关
✓ Grafana 官方插件
✓ Telegraf / collectd / Prometheus / StatsD
✓ Java/Python/Go/Rust/C/C#/Node 客户端
✓ Flink/Spark/Kafka Connect
✓ 工业协议(OPC UA, Modbus 等)
✓ 自有 Explorer Web UI

TimescaleDB:
✓ 整个 PostgreSQL 生态
✓ pgAdmin/DBeaver/任意 PG 工具
✓ Grafana PG 数据源
✓ 所有 PG 驱动/ORM
✓ Hasura/PostgREST 等
✓ PG 扩展(PostGIS 等)

结论:
– PG 生态广度:TimescaleDB 完胜
– 时序专用工具:TDengine 完整

8. 选型建议

选 TDengine 的场景:

✓ 海量时序数据(百万+设备)
✓ 高吞吐写入需求
✓ 高压缩比要求
✓ 开源版需要分布式 HA
✓ 工业 OT 场景
✓ 主要是时序查询

选 TimescaleDB 的场景:

✓ 已有 PostgreSQL 体系
✓ 时序+关系数据混合
✓ 复杂 JOIN/事务
✓ PG 扩展依赖(PostGIS 等)
✓ 数据量中等
✓ 团队 PG 经验丰富

两者皆可:
– 中小规模时序
– DevOps 监控
– 用 SQL 的项目

代码示例

同样需求两种实现

— 需求:分析每月每个城市最大温度

— TDengine
SELECT
_wstart AS month,
city,
MAX(temperature) AS max_temp
FROM sensors
WHERE ts > NOW 1y
PARTITION BY city
INTERVAL(1n);

— TimescaleDB
SELECT
time_bucket('1 month', ts) AS month,
city,
MAX(temperature) AS max_temp
FROM sensors
WHERE ts > NOW() INTERVAL '1 year'
GROUP BY month, city
ORDER BY month;

TimescaleDB 迁移到 TDengine

# 思路:用 SQL 导出 + 转换 + 导入

# 1. 从 TimescaleDB 读
import psycopg2
pg = psycopg2.connect("…")
cur = pg.cursor()
cur.execute("SELECT * FROM meters WHERE ts > '2020-01-01'")

# 2. 转换写入 TDengine
import taosws
td = taosws.connect("…")

batch = []
for row in cur:
ts, device, location, current = row
batch.append((ts, device, location, current))
if len(batch) >= 10000:
write_to_td(batch)
batch = []

# 或用 taosX 配置 PostgreSQL Source

性能考量

写入对比

场景TDengineTimescaleDB
单条 INSERT 弱(不推荐)
批量 INSERT
高吞吐 (1M+/s)

存储对比

数据TDengineTimescaleDB
原始 100 GB ~10 GB ~30 GB
含索引 ~12 GB ~50 GB

FAQ

Q1: SQL 兼容性?

  • TDengine:自有 SQL(接近标准)
  • TimescaleDB:完整 PG SQL
  • 迁移需调整少量函数

Q2: 事务支持?

  • TDengine:单写入操作原子,无传统事务
  • TimescaleDB:完整 ACID

Q3: PG 扩展(PostGIS)可用吗?

  • TimescaleDB:是
  • TDengine:内置 GEOMETRY 类型部分能力

Q4: 物化视图怎么对比?

  • TDengine:流计算(实时增量)
  • TimescaleDB:Continuous Aggregate(增量刷新)

Q5: 商业支持?

  • TDengine:北京涛思
  • Timescale:美国 Timescale Inc.

参考

系统构架篇

  • 01-《TDengine 整体架构全景》
  • 02-《集群拓扑深度解析》
  • 03-《MNode 内部机制深度解析》
  • 04-《RPC 通信层深度解析》
  • 05-《VNode 生命周期》
  • 06-《RAFT 共识协议》
  • 07-《端到端的消息流》

数据模型

  • 01-《数据库创建与参数详解》
  • 02-《超级表/子表/普通表》
  • 03-《支持数据类型深度解析》
  • 04-《TDengine Tag 设计哲学与 Schema 变更机制》
  • 05-《TDengine 虚拟表实现原理》

存储引擎

  • 01-《TDengine 存储引擎概览》
  • 02-《TDengine MemTable 深度解析》
  • 03-《TDengine WAL 预写日志机制》
  • 04-《TDengine 数据文件格式》
  • 05-《TDengine Commit 与 Flush 机制 》
  • 06-《TDengine Compaction 合并策略 》
  • 07-《TDengine 数据保留与 TTL》
  • 08-《TDengine 压缩编码机制》
  • 09-《TDengine Cache 与 Last 查询加速》
  • 10-《TDengine 逻辑计划生成》

查询引擎

  • 01-《TDengine 查询引擎概览》
  • 02-《TDengine SQL 解析与词法分析》
  • 03-《TDengine 语义分析与 AST 重写》
  • 04-《TDengine 逻辑计划生成》
  • 05-《TDengine 物理计划生成》
  • 06-《TDengine 扫描算子》
  • 07-《TDengine 聚合算子》
  • 08-《TDengine 连接算子》
  • 09-《TDengine 排序、填充与投影》
  • 10-《TDengine 分布式查询执行》
  • 11-《TDengine EXPLAIN 与查询优化》

数据写入

  • 01-《TDengine SQL INSERT》
  • 02-《TDengine 无模式写入》
  • 03-《TDengine STMT 写入》
  • 04-《TDengine 写入内部流程》
  • 05-《TDengine 数据更新删除》

数据订阅

  • 01-《TDengine 数据订阅》
  • 02-《TDengine 订阅 vs Kafka》
  • 03-《TDengine TMQ 消费流程》
  • 04-《TDengine 内部机制》
  • 05-《TDengine TMQ 最佳实践》

预聚合

  • 01-《TDengine RSMA》
  • 02-《TDengine TSMA — 时间维度的物化聚合视图》
  • 03-《TDengine SMA 内部实现》

索引

  • 01-《TDengine Tag 索引》
  • 02-《TDengine SMA 索引》

SQL 语句

  • 01-《TDengine DDL》
  • 02-《TDengine DML SELECT》
  • 03-《TDengine DML 函数完整参考》
  • 04-《TDengine JOIN 完整语法》
  • 05-《TDengine 窗口完整语法》
  • 06-《TDengine 操作符与表达式》
  • 07-《TDengine 系统表》
  • 08-《TDengine SQL 与标准 SQL 差异》

客户端与连接器

  • 01-《TDengine 的连接方式》
  • 02-《TDengine C/C++ 连接器》
  • 03-《TDengine java 连接器》
  • 04-《TDengine Python 连接器》
  • 05-《TDengine Go 与 Rust 连接器》
  • 06-《TDengine Node.js 与 C# 连接器》

运维

  • 01-《TDengine 部署指南》
  • 02-《TDengine 配置详解》
  • 03-《TDengine 监控系统》
  • 04-《TDengine 备份与恢复》
  • 05-《TDengine 版本升级》
  • 06-《TDengine 加密使用指南》

安全

  • 01-《TDengine 认证与权限》
  • 02-《TDengine 认证与权限》
  • 03-《TDengine 审计日志》

生态

  • 01-《TDengine taosAdapter》
  • 02-《TDengine taosX 与 Explorer》
  • 03-《TDengine Grafana 集成》
  • 04-《TDengine 第三方工具》

应用案例

  • 01-《TDengine IoT 设备监控》
  • 02-《TDengine 工业大数据与智能制造》
  • 03-《TDengine 车联网与新能源汽车》
  • 04-《TDengine 能源与电力监控》
  • 05-《TDengine IT 运维与可观测性》

产品对比

  • 01-《TDengine vs InfluxDB》

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

赞(0)
未经允许不得转载:171主机测评 » TDengine vs TimescaleDB — 时序数据库对比
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址