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