大數據

物聯網數據庫 IoTDB 解析

Apache IoTDB 是專為物聯網時序數據打造的數據庫,提供數據採集、存儲、分析的功能。IoTDB 提供端雲一體化的解決方案,在雲端,提供高性能的數據讀寫以及豐富的查詢能力,針對物聯網場景定製高效的目錄組織結構,並與 Apache Hadoop、Spark、Flink 等大數據系統無縫打通;在邊緣端,提供輕量化的 TsFile 管理能力,端上的數據寫到本地 TsFile,並提供一定的基礎查詢能力,同時支持將 TsFile 數據同步到雲端。
image.png

TsFile

TsFile 是為物聯網設備時序數據存儲定製的文件格式,整體以樹狀目錄結構組織,一個 TsFile 裡可存儲多個設備的數據,每個設備包含多個 measurment(指標)。如下圖,TsFile 裡包含兩個設備數據,標識分別為 d1、d2;每個設備包含 s1、s2、s3 三個監測指標。

TsFile 整體是一個多級映射表,TsFileMetaData ==> TimeSeriesMetadata ==> ChunkMetadata ==> Chunk。

  1. TsFileMetadata  描述整個 TsFile ,包含格式版本信息, MetadataIndexNode  的位置,總的 chunk 數等元數據信息。
  2. MetadataIndexNode 包含多個 TimeSeriesMetadata ,每個 TimeSeriesMetadata 指向一個設備的元數據信息 ChunkMetadata  列表;
  3. ChunkMetadata 指向 ChunkHeader 位置,並對應最終的 Chunk Data。image.png

查詢引擎

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

image.png

元數據管理

IoTDB 的元數據模型採用樹狀結構組織,一個實例包含多個 Storage Group (類似於 Namespace、Database 的概念),一個 Storage Group  裡包含多個 Device ,每個 Device  包含多個 Measurement , Measurement  對應的時間序列數據最終存儲在 TsFile Chunk 裡。另外,為了方便數據過期,每個 Stroage Group  的數據會以時間範圍的形式切分存儲,默認以周為單位,使用不同的目錄存儲。

image.png

// Storage Group 分區存儲結構
data
-- sequence
---- [存儲組名1]
------ [時間分區ID1]
-------- xxxx.tsfile
-------- xxxx.resource
------ [時間分區ID2]
---- [存儲組名2]
-- unsequence

存儲引擎

image.png

IoTDB 存儲引擎基於 LSM Tree 結構設計,寫入的數據先記錄 WAL,再寫到內存 memtable,在後臺逐步刷到磁盤 TsFile;磁盤上的 TsFile 通過一定的規則進行 Compaction,保證查詢效率。

同步工具

IoTDB 支持在邊緣側、雲端部署,通常在邊緣側採集的數據有同步到遠端進一步分析處理的需求;IoTDB 提供了同步工具,支持將端/設備上的 TsFile 數據往雲端同步。
image.png

連接器

IoTDB 支持與現有的大數據處理系統,包括 Hive、Spark 等無縫連通,IoTDB 提供了 hive-tsfile 、 spark-tsfile 、 spark-iotdb  等連接器,讓 Hive、Spark 能直接訪問 tsfile 格式的數據,以及訪問 IoTDB 的數據。

總結

優勢

  1. 針對物聯網模型做了定製化,提供 JDBC 訪問方式,支持邊雲一體化部署。
  2. 存儲使用 Hadoop File system,並提供多種 connector,與現有大數據生態無縫打通。
  3. 開放的 TsFile 存儲格式,設備模型簡單易理解。

不足

  1. IoTDB TsFile 的結構,目前僅有 java 版本,資源佔用方面對邊緣輕量級設備不友好,限制了其在端/設備側的應用。
  2. 雲端版本目前僅有單節點版本,無法滿足海量設備數據接入雲端的需求。
  3. 存儲上支持使用 HDFS 或 本地盤,通過使用 HDFS 來存儲可保證存儲層高可用,但計算層沒有進一步的高可用保障。

Leave a Reply

Your email address will not be published. Required fields are marked *