首页
>
资源
>
技术解析

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

TDengine 简介

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

InfluxDB 简介

InfluxDB 是一款开源时序数据库,支持纳秒级时间戳和高频数据写入,并集成数据采集工具与可视化工具,广泛应用于物联网、监控系统和实时分析场景。

综合对比

TDengine

InfluxDB

官网

https://www.taosdata.com/

https://www.influxdata.com/

技术文档

https://docs.taosdata.com/

https://docs.influxdata.com/

初始版本时间

2019

2013

是否开源

底层语言

C

Go、Rust

支持操作系统

Linux、Windows、MacOS

Linux、Windows、MacOS

支持编程语言

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

.Net
Clojure
Erlang
Go
Haskell
Java
JavaScript
JavaScript (Node.js)
Lisp
Perl
PHP
Python
R
Ruby
Rust
Scala

语法

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

InfluxQL(类 SQL 语法)、Flux(脚本语言)

是否支持分布式

云服务

TDengine Cloud
https://cloud.taosdata.com/auth

InfluxDB Cloud
https://www.influxdata.com/products/influxdb-cloud/

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 接口

InfluxDB 功能

1. 写入与存储

  • 写入优化:通过 TSM 引擎优化,每秒可处理数百万数据点,适用于物联网、工业传感器等高频写入场景

  • 压缩存储:采用 TSM 格式实现高效数据压缩,降低存储空间占用。

2. 查询与分析

  • 多语言查询支持:支持 InfluxQL 语法,兼容传统 SQL 习惯,同时提供脚本式语言 Flux,支持复杂分析

  • 查询扩展功能:支持滑动窗口计算、窗口函数等功能,适用于实时指标监控场景

3. 可视化与监控

  • Grafana 集成:原生支持,快速创建仪表盘。

  • 内置 UI:InfluxDB 2.x 提供数据探索和可视化界面

  • 告警功能:通过 Flux 或 API 设置阈值告警

4. 生态集成

  • 开发者友好接口:内置 HTTP API,提供便捷的 SDK 集成方案

  • Telegraf:轻量级数据采集代理

  • Chronograf:官方可视化工具,2.x 中整合到 Web UI

  • Kapacitor:流式处理与告警引擎,2.x 由 Flux 替代

5. 运维管理

  • 数据保留策略:支持自定义数据生命周期策略,自动清理过期数据

  • 权限控制:提供用户分级授权机制,支持数据库访问权限的精细化控制

6. 分布式架构

  • 分布式集群:多节点部署,保障分布式架构高扩展、高可用

  • 数据分片、复制:支持数据分片和复制,保障系统稳定性,提升系统容错

7. 安全和管理

  • 用户管理:支持多用户、多权限管理

  • HTTPS 支持:HTTPS 保障数据传输安全

  • 数据加密:支持数据加密存储和传输

TDengine 数据建模概念

  • 采集量:通过各种传感器、设备或其他类型的采集点所获取的物理量

  • 标签:附着在传感器、设备或其他类型采集点上的静态属性,这些属性不会随时间发生变化

  • 数据采集点:在一定的预设时间周期内或受到特定事件触发时,负责采集物理量的硬件或软件设备

  • :TDengine 采取了“一个数据采集点一张表”的设计策略,即要求为每个数据采集点单独建立一张表

  • 超级表:能将某一特定类型的数据采集点聚集在一起,形成一张逻辑上的统一表

  • 子表:数据采集点在逻辑上的一种抽象表示,它是隶属于某张超级表的具体表

  • 虚拟表:一种不存储实际数据而可以用于分析计算的表,数据来源为其它真实存储数据的子表、普通表,通过将各个原始表的不同列的数据按照时间戳排序、对齐、合并的方式来生成虚拟表

  • :用于管理一组表的集合

  • 时间戳:每一条上报的时序数据自带的时间戳

InfluxDB 数据建模概念

  • Database: 数据库名,在 InfluxDB 中可以创建多个数据库

  • 时间戳 Time:每条数据记录的时间,也是数据库自动生成的主索引,默认为当前系统的时间戳(纳秒)

  • 字段 Field:包含数据的实际值,可以是各种数据类型,字段在查询时可以进行数学运算

  • 标签 Tag:用于索引和过滤数据

  • Point:表里面的一行数据,由时间戳(timestamp)、标签(tag)、字段(field)和组成

  • Measurement: 存储具有相似特征或属于同一类别的数据点集合,包含了列 Timestamp 时间戳,Field 字段和Tag 标签

  • Field Set:每组 field key 和 field value 的集合

  • Tag Set: 不同的每组 tag key 和 tag value 的集合

  • Retention Policy:定义了数据在数据库中的保存期限。当数据超过了指定的时间限制,它们将自动被删除

  • Series:共同 Retention Policy,Measurement 和 Tag set 的集合

TDengine 数据模型

在工业物联网领域,结构化数据采集是常态。为了降低用户的使用门槛,TDengine 沿用传统关系型数据库模型进行数据管理。同时,考虑到时序数据的独特属性,TDengine 采用 “一个数据采集点一张表” 的设计方案,即每个数据采集点都对应一张独立的数据表。

这一设计虽能对单个数据采集点实现高效管理,但随着设备数量的爆发式增长,表数量也呈指数级上升,给表的维护管理和跨表聚合操作带来困难。为解决该问题,TDengine 引入超级表概念。超级表结构包含至少一个时间戳列、多个采集量列以及标签列,其中,普通表代表具体数据采集点,超级表则作为具有相同属性的数据采集点集合,有效简化了表管理和聚合查询流程。

然而,实际应用场景更为复杂,一台设备往往搭载多种传感器,且各传感器数据采集频率差异显著,难以用单张表完整描述设备数据。若需整合多传感器数据进行分析,只能依赖多级关联查询,不仅影响使用便捷性,还会降低系统性能。针对这一问题,TDengine 推出虚拟表机制,涵盖虚拟超级表、虚拟子表和虚拟普通表类型。虚拟表仅支持查询操作,无法写入或删除数据,但其在查询功能上与真实表保持一致。

InfluxDB 数据模型

数据库服务器包含逻辑数据库,逻辑数据库包含表,表包含列。V3 与之前的 InfluxDB 版本相比,在 V2 版本中,用户可以将数据库视为存储桶(bucket),在 V1 版本中,则可以将其视为 db/retention_policy。

表相当于一个测量值(measurement),其列可以是 tag(字符串字典)、int64、float64、uint64、bool 或 string 类型,最后,每个表都有一个时间列,该列的精度为纳秒级时间戳。

在 InfluxDB 3 中,每个表都有一个主键(标签和时间的有序集合),用于存储其数据。所有创建的 Parquet 文件都使用主键进行排序。当创建表时(无论是通过显式调用还是首次将数据写入表),系统都会按照标签到达的顺序将主键设置为标签的主键。这是不可变的。表的标签列定义也是不可变的。

标签应包含唯一的标识信息,例如 sensor_id、building_id 或 trace_id。所有其他数据应保存在字段中。用户将能够为任何列(无论是字段还是标签)添加后 N 个值和不同值查找功能。

TDengine 应用场景

  • 智慧城市:存储和管理城市交通、照明、环境监测(PM2.5、PM10)、给排水、燃气监测等数据

  • 智慧工厂:存储生产设备的工业传感器数据(如电流、电压、设备状态)

  • 智慧水务:在水环境治理系统中存储液位、电流、硫化氢、雨量等数据

  • 地震监测与预警:存储地震波形数据,实现实时波形展示

  • 能源电力:管理风机/电表等上报的数据,实现了设备监测与预测

  • 车联网:处理车辆电池、自动驾驶传感器数据,方便分析与维护

InfluxDB 应用场景

  • 监控运维:在企业服务器集群中,InfluxDB 能快速采集 CPU 负载、内存占用等性能指标,记录网络流量变化情况,保存应用程序响应时间等数据。这些数据为管理员和开发人员提供了实时系统状态视图,便于及时发现异常波动,快速定位故障点,提升系统运维效率

  • 实时数据分析:对于海量实时数据的分析处理需求,InfluxDB 支持数据持续高速写入,配合查询机制可快速完成时序数据可视化图表生成、异常数据自动检测、实时阈值报警等操作

  • 日志数据管理:InfluxDB 将日志数据按照时间序列有序存储,尤其适用于分布式系统和微服务架构下海量日志的管理。通过时间维度的有序组织,开发人员能更便捷地回溯、查询和分析日志信息,实现系统运行问题诊断与优化