Apache IoTDB 是專為物聯網時序數據打造的數據庫,提供數據採集、存儲、分析的功能。IoTDB 提供端雲一體化的解決方案,在雲端,提供高性能的數據讀寫以及豐富的查詢能力,針對物聯網場景定製高效的目錄組織結構,並與 Apache Hadoop、Spark、Flink 等大數據系統無縫打通;在邊緣端,提供輕量化的 TsFile 管理能力,端上的數據寫到本地 TsFile,並提供一定的基礎查詢能力,同時支持將 TsFile 數據同步到雲端。
TsFile
TsFile 是為物聯網設備時序數據存儲定製的文件格式,整體以樹狀目錄結構組織,一個 TsFile 裡可存儲多個設備的數據,每個設備包含多個 measurment(指標)。如下圖,TsFile 裡包含兩個設備數據,標識分別為 d1、d2;每個設備包含 s1、s2、s3 三個監測指標。
TsFile 整體是一個多級映射表,TsFileMetaData ==> TimeSeriesMetadata ==> ChunkMetadata ==> Chunk。
-
TsFileMetadata
描述整個 TsFile ,包含格式版本信息,MetadataIndexNode
的位置,總的 chunk 數等元數據信息。 - MetadataIndexNode 包含多個
TimeSeriesMetadata
,每個TimeSeriesMetadata
指向一個設備的元數據信息ChunkMetadata
列表; -
ChunkMetadata
指向 ChunkHeader 位置,並對應最終的 Chunk Data。
查詢引擎
IoTDB 內置查詢引擎負責所有用戶命令的解析、生成計劃、交給對應的執行器、返回結果集。IoTDB 通過查詢引擎提供了 JDBC 訪問 API,簡單易用。
IoTDB> CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN
IoTDB> CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE
IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp,status) values(100,true);
IoTDB> INSERT INTO root.ln.wf01.wt01(timestamp,status,temperature) values(200,false,20.71)
IoTDB> SELECT status FROM root.ln.wf01.wt01
+-----------------------+------------------------+
| Time|root.ln.wf01.wt01.status|
+-----------------------+------------------------+
|1970-01-01T08:00:00.100| true|
|1970-01-01T08:00:00.200| false|
+-----------------------+------------------------+
Total line number = 2
元數據管理
IoTDB 的元數據模型採用樹狀結構組織,一個實例包含多個 Storage Group
(類似於 Namespace、Database 的概念),一個 Storage Group
裡包含多個 Device
,每個 Device
包含多個 Measurement
, Measurement
對應的時間序列數據最終存儲在 TsFile Chunk 裡。另外,為了方便數據過期,每個 Stroage Group
的數據會以時間範圍的形式切分存儲,默認以周為單位,使用不同的目錄存儲。
// Storage Group 分區存儲結構
data
-- sequence
---- [存儲組名1]
------ [時間分區ID1]
-------- xxxx.tsfile
-------- xxxx.resource
------ [時間分區ID2]
---- [存儲組名2]
-- unsequence
存儲引擎
IoTDB 存儲引擎基於 LSM Tree 結構設計,寫入的數據先記錄 WAL,再寫到內存 memtable,在後臺逐步刷到磁盤 TsFile;磁盤上的 TsFile 通過一定的規則進行 Compaction,保證查詢效率。
同步工具
IoTDB 支持在邊緣側、雲端部署,通常在邊緣側採集的數據有同步到遠端進一步分析處理的需求;IoTDB 提供了同步工具,支持將端/設備上的 TsFile 數據往雲端同步。
連接器
IoTDB 支持與現有的大數據處理系統,包括 Hive、Spark 等無縫連通,IoTDB 提供了 hive-tsfile
、 spark-tsfile
、 spark-iotdb
等連接器,讓 Hive、Spark 能直接訪問 tsfile 格式的數據,以及訪問 IoTDB 的數據。
總結
優勢
- 針對物聯網模型做了定製化,提供 JDBC 訪問方式,支持邊雲一體化部署。
- 存儲使用 Hadoop File system,並提供多種 connector,與現有大數據生態無縫打通。
- 開放的 TsFile 存儲格式,設備模型簡單易理解。
不足
- IoTDB TsFile 的結構,目前僅有 java 版本,資源佔用方面對邊緣輕量級設備不友好,限制了其在端/設備側的應用。
- 雲端版本目前僅有單節點版本,無法滿足海量設備數據接入雲端的需求。
- 存儲上支持使用 HDFS 或 本地盤,通過使用 HDFS 來存儲可保證存儲層高可用,但計算層沒有進一步的高可用保障。