Apache IoTDB:更適合工業物聯網場景的新型數據庫,存、查、用不再是難題
隨著步入工業 4.0 時代,數字化和自動化的引入,生產環境變得更加高效。同時智能設備帶來的海量數據的潛在價值被人們關注,可如何高效地存儲智能設備產生的數據,如何更好地對海量數據進行分析成為了難題。傳統的數據庫模型和存儲方式儼然已經無法適應這樣的需求。于是有了時序數據庫,旨在實現高效地存儲、查詢數據,幫助更好地發掘數據潛在的價值。
面對這樣的狀況,清華大學于 2015 年啟動了 IoTDB 的研制。2020 年 9 月 23 日 Apache IoTDB 畢業成為 Apache 頂級項目 (Top-Level Project),是目前唯一由我國高校發起的 Apache 基金會頂級項目,也是 Apache 基金會旗下唯一物聯網數據管理領域開源項目。2021 年 10 月,Apache IoTDB 核心團隊創立了天謀科技,繼續運營 IoTDB,幫助工業用戶解決數據 “存、查、用” 難題。
對于 Apache IoTDB 研發的核心技術,幾位參與者聯合發表了一篇綜述論文,對于 IoTDB 的設計進行了詳細而完整的闡述。文章以一個需要管理上萬臺挖掘機的工業公司入手,描述了需求 “數據首先被打包到設備中,然后通過 5G 移動網絡發送到服務器。在服務器中,數據被寫入時間序列數據庫,用于 OLTP 查詢。最后,數據科學家可以將數據從數據庫加載到大數據平臺,用于復雜的分析和預測,即 OLAP 任務。”
- 論文地址:https://dl.acm.org/doi/abs/10.1145/3589775
- 項目地址:https://github.com/apache/iotdb
論文重點講述了如下幾個部分:
1. 數據模型的設計:時間序列在邏輯層次上的組織方式和在物理模式中的存儲;
2. TsFile 文件格式:自研的列式存儲文件格式,同時滿足寫入、查詢等的高效性;
3. IoTDB 引擎:主要包括存儲引擎、查詢引擎等;
4. 分布式解決方案。
接下來,對這幾個重點部分做出更加詳細的解讀。
詳細解讀
1. 數據模型設計
(1)如下圖,采用樹的結構,滿足極高強度的寫入操作,并能夠有效處理物聯網場景中常見的延遲數據到達問題。
在樹中,每一個葉子節點對應一個傳感器,每個傳感器都有其對應的歸屬設備,正如圖中最下面兩層所示,向上同理。
(2)前文闡述了邏輯結構,現在我們來看物理結構的實現,主要為時間序列 ( Time series )和序列簇( Series family )兩部分組成。下圖展現了每個時間序列是由時間和值兩個屬性組成,時間序列通過根節點到葉子節點的完整路徑來定位。上圖中則展示了序列簇的概念,一個序列簇中可能包含多個設備,它們的數據將一起存儲在 TsFile(一種文件結構,在后文中會講解)中。
2. TsFile 文件格式的設計
TsFile 是 Apache IoTDB 自研列式存儲文件格式。結構如下圖:
TsFile 在設計過程中,研究團隊主要解決的問題:
- 節省空間,盡可能壓縮數據
- 減少文件數量
- 會一起查詢的時間序列在物理位置上的接近
- 減少磁盤碎片
- 高效訪問
主要給出的解決方案:
- 列式存儲:消除了空值,節省了磁盤占用;數據訪問局部性
- 時間序列編碼:利用物聯網場景時間序列的獨特特征
- 頻域編碼:信號處理中廣泛進行時間序列的頻域分析
- 具體的結構解析:頁面( Page )是基本存儲單位,Chunk 中包含多個 Page,一個 chunk 中的 page 屬于同一個時間序列,大小可變;Chunk Group 包含多個 Chunk,一個組中的多個 chunk 屬于同一段時間內寫入的一個或多個系列的設備,將他們放在連續的磁盤空間,是因為他們經常會被一起查詢;Block 是在內存中的,寫入的塊組先在內存中進行緩沖,當內存達到閾值時,將所有塊組刷新到 TsFile 中;索引(FileIndex)于文件末尾記錄信息,用于數據訪問。
3.IoTDB 引擎
在這部分,研究者們主要考慮了物聯網場景下的延遲到達、高效查詢處理、類 SQL 查詢的設計。IoTDB 引擎結構如下圖:
圖中我們可以看到主要是用于處理 TsFile 的寫入、讀取、和管理的存儲引擎部分,在這部分中運用了自動延遲分離技術(如下圖):
對于大多數都在正常的 TsFile 中,沒有時間范圍重疊時,推薦使用延遲數據分離;對于大多數數據是無序的情況,延遲數據分離則不被推薦使用。
另一重要組成是查詢引擎,這部分負責將 SQL 查詢轉換為可在數據庫中執行的操作符。同時,為了適應工業物聯網場景,Apache IoTDB 設計了對時間序列數據的豐富查詢。
4. 分布式的解決方案
TsFile 可以分布在 HDFS 中,并由 Spark 操作。此外還提供了更好的數據分布和查詢處理的原生解決方案,主要為分區復制、NB-Raft 復制和 DYNAMIC 讀一致性。
對比結果
論文中提供了 TsFile 與 IoTDB 分別與工業中廣泛使用的最先進的文件格式和時序數據庫的比較結果,展現了 Apache IoTDB 在多個方面的優勢,如下圖:
以上兩張圖,展現了 TsFile 在寫吞吐量、讀取時間成本、同步的性能上,均優于目前廣泛使用的方案。這主要是由于 TsFile 的物聯網感知結構設計,避免了存儲 deviceId 等冗余信息。而磁盤占用之所以沒有明顯優勢,則是因為構建了更加精細的索引,導致占用了更多空間,但是這樣的犧牲可以在查詢時間上帶來非凡的改善,我們可以看到讀取時間成本的明顯優勢。
上圖中可以看到 IoTDB 在幾乎所有測試中都表現出更好的性能,更高的寫吞吐量和更低的寫延遲。
在上圖的實驗中,我們可以看到,當查詢數據規模較大時,IoTDB 具有更好的性能,IoTDB 的優勢在大規模數據聚合中尤為顯著。
總結
該論文介紹了一款新的時序數據管理系統 Apache IoTDB ,其開放式架構專門設計用于支持物聯網應用的實時查詢和大數據分析。該系統包括一個新的時序文件格式,TsFile ,采用列存儲的方式存儲時間和值,以避免空值并實現有效的壓縮。在 TsFile 的基礎上,IoTDB 引擎采用類似 LSM 樹的策略來處理極高強度的寫入,并處理在物聯網場景中非常普遍的延遲數據到達。豐富的可擴展查詢,以及在 TsFile 中預計算的統計信息,使 IoTDB 能夠在 OLTP 和 OLAP 任務中實現高效處理。
基于上述的這些技術,IoTDB 已經成為能夠更好面對工業物聯網場景的新型數據庫。