在物聯(lián)網(wǎng)和工業(yè)場景中,采集的數(shù)據(jù)往往是結構化的,如何高效存儲、快速寫入并便捷查詢,成為時序數(shù)據(jù)庫面臨的核心挑戰(zhàn)。TDengine 創(chuàng)新性地采用“一個數(shù)據(jù)采集點一張表”的設計策略,在保留關系型數(shù)據(jù)庫易用性的同時,充分發(fā)揮了時序數(shù)據(jù)的特性。
關系型模型,降低學習門檻
TDengine 沿用傳統(tǒng)關系型數(shù)據(jù)庫的數(shù)據(jù)模型來管理結構化數(shù)據(jù),用戶無需重新學習新的數(shù)據(jù)組織方式,即可輕松上手。這種設計既滿足了工業(yè)與物聯(lián)網(wǎng)用戶的數(shù)據(jù)結構需求,也保障了與主流分析工具的兼容性。
一個數(shù)據(jù)采集點一張表
每個數(shù)據(jù)采集點在 TDengine 中對應一張獨立的表。例如,如果系統(tǒng)中部署了一千萬塊智能電表,則需在 TDengine 中創(chuàng)建一千萬張表,每張表只記錄一塊電表的全部時序數(shù)據(jù)。表名通常以采集點 ID 命名(如 d1001),采集的各項指標(如電流、電壓、相位等)在表中以列形式存在。
這種設計方式帶來了顯著優(yōu)勢:
- 無鎖寫入,極致性能:每個采集點是獨立的數(shù)據(jù)源,只有一個寫入者,天然避免了并發(fā)寫入沖突,TDengine 可采用無鎖機制,顯著提升寫入速度。
- 追加寫入,順序優(yōu)化:時序數(shù)據(jù)按時間遞增產(chǎn)生,可順序追加寫入,有效降低系統(tǒng)開銷,加快處理效率。
- 塊狀存儲,高效查詢:單個采集點的數(shù)據(jù)在存儲上是連續(xù)的、以塊為單位組織,讀取特定時間段數(shù)據(jù)時,幾乎無需隨機 I/O,查詢性能提升數(shù)量級。
- 列式壓縮,節(jié)省空間:數(shù)據(jù)塊內(nèi)部采用列式存儲,不同數(shù)據(jù)類型匹配不同壓縮算法,結合采集量變化的低頻特性,壓縮率遠高于傳統(tǒng)方式。
如果采用傳統(tǒng)方式將多個數(shù)據(jù)采集點的數(shù)據(jù)寫入同一張表,由于網(wǎng)絡延遲不可控,各采集點數(shù)據(jù)到達服務器的順序無法保障,系統(tǒng)必須引入鎖機制來確保寫入一致性。同時,不同采集點的數(shù)據(jù)難以實現(xiàn)連續(xù)存儲,影響后續(xù)查詢效率與壓縮效果。相比之下,采用“一個數(shù)據(jù)采集點一張表”的方式,可最大程度保障每個采集點的數(shù)據(jù)寫入和查詢性能,同時實現(xiàn)更優(yōu)的數(shù)據(jù)壓縮率。
在 TDengine 中,通常以數(shù)據(jù)采集點的名稱(如 d1001)作為表名。每個采集點可對應多個采集量(如電流、電壓、相位等),每個采集量在表中占據(jù)一列,數(shù)據(jù)類型可以為整數(shù)、浮點數(shù)、字符串等。每張表的首列必須為時間戳(Timestamp 類型),TDengine 會基于該時間戳建立索引,并采用列式存儲方式進行數(shù)據(jù)組織。對于結構復雜的設備(如汽車),由于存在多個數(shù)據(jù)采集點,通常需要為同一設備創(chuàng)建多張表分別管理。
搭配“超級表”,實現(xiàn)統(tǒng)一建模與靈活查詢
為了解決大規(guī)模數(shù)據(jù)管理中的結構統(tǒng)一性問題,TDengine 進一步引入了“超級表”機制。在保留“一個數(shù)據(jù)采集點一張表”的基礎上,用戶只需定義一次表結構,即可通過超級表模板批量創(chuàng)建同類采集點的子表。同時,每個子表可通過標簽(如地理位置、設備型號、安裝時間等)區(qū)分,實現(xiàn)靈活篩選與聚合分析。
這一設計充分結合了“結構統(tǒng)一 + 存儲獨立”的優(yōu)勢,使 TDengine 在管理千萬級、甚至十億級設備時,仍然能夠保持高性能寫入、低成本存儲與靈活查詢分析的能力。



互聯(lián)網(wǎng).png)



-1.png)












伙伴.png)



