TDengine 簡介
TDengine 是一款集群開源、云原生的時序數據庫,為物聯網、工業互聯網等場景優化設計,能將物聯網設備產生的時序數據進行匯聚、存儲、分析和分發。
InfluxDB 簡介
InfluxDB 是一款開源時序數據庫,支持納秒級時間戳和高頻數據寫入,并集成數據采集工具與可視化工具,廣泛應用于物聯網、監控系統和實時分析場景。
綜合對比
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 將日志數據按照時間序列有序存儲,尤其適用于分布式系統和微服務架構下海量日志的管理。通過時間維度的有序組織,開發人員能更便捷地回溯、查詢和分析日志信息,實現系統運行問題診斷與優化