首頁
>
資源
>
技術解析

時序數據庫濤思 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 將日志數據按照時間序列有序存儲,尤其適用于分布式系統和微服務架構下海量日志的管理。通過時間維度的有序組織,開發人員能更便捷地回溯、查詢和分析日志信息,實現系統運行問題診斷與優化