上一章聊到時序數據是什麼樣,物聯網行業中的時序數據的特色:存量數據大、新增數據多(採集頻率高、設備量多)。詳情請見:sql
時序數據庫 Apache-IoTDB 源碼解析以前言(一)數據庫
這一章主要想聊一聊:網絡
IoTDB
的功能特色及系統架構由於本人是在作車聯網行業,因此對這個行業的信息瞭解更深刻一些,可以拿到一些更具體的數字來講明這個行業的具體狀況。在上一篇文中的數據是出於本身的理解,爲了讓你們容易明白而編造的數據,但實際狀況要複雜的多。架構
以上示意圖可能很是簡單,但我以爲足夠代表一個總體架構。 當一臺設備、一輛車鏈接到協議網關後,便開始了真正的收發數據。通常通訊的方式都是基於 tcp
,搞一段二進制協議,因此協議網關基本要作的工做就是完成對鏈接對管理、完成對數據的收發及編解碼。tcp
當數據完成編解碼以後通常會發往 消息隊列當中,通常都是 Kafka
之中。用來解耦生產和消費兩端,提供一層緩衝,不管消費服務是死是活仍是速度慢,包治百病,甚至還能治未病。性能
數據發往消息隊列的過程當中,或以後花活兒就多起來了。但主要的我認爲無非仍是三種處理方式:大數據
上一章提到了基本的數據質量,但實際工做中,每每質量會出現各類意想不到但數據,下面是工程中影響數據質量的幾個比較大的問題:.net
汽車裏具備很是複雜的電路系統和傳感器設備,我印象當中的粗略估算應該是有 120 項左右,而且這些數據項並非車內數據的所有。隨着自動駕駛的到來,汽車的傳感器會愈來愈多,數據項就會更多。設計
若是按照傳統的 Mysql 存儲,那麼因爲行式存儲,因此在取回數據時候就會很是影響效率,這個介紹到 TsFile 模塊時候再聊。3d
咱們按照寶馬汽車 2019 銷售量估計,252 萬量,咱們假定 4 年前就已經具有了聯網模塊那就是 1000 萬量汽車。按照每條數據 1K,天天採樣上傳 1 次,應該是 天天 9G 數據。但由於車不可能一直都點火開,因此要假設一個 30% 的在線率,那就是 3G 數據。
3 年大約就會存儲 3TB 數據,可能你以爲 3T 數據對於時下最熱的大數據來說並非一個很是龐大的數字,但若是整個數據裏面不包含任何圖片、音視頻甚至都沒有文字,所有是由整數、浮點數堆積起來的,那你能夠試想一下這個數據庫裏面到底有多少數據,若是你一個不當心執行了 count(*)
你以爲會卡死不?
汽車不一樣於其餘傳感器的地方是,他是一個處在時刻運動當中的物體,若是須要作一些高階的計算模型,好比說:碰撞檢測、行駛軌跡糾偏等,那麼相應的數據採集頻率有可能要達到秒級。
固然我說完這句話,可能你感觸並非很深,可是結合前面說到的兩點:120項數據、1000萬量車,將採集頻率提升到 1 秒一採集,那麼這個頻率下,一天產生的數據大小就是 259T。這時候你找 DBA 說,哥們咱們的需求要 1 天寫入 259T 數據,我以爲反正我是沒臉找人家,讓產品去跟 DBA 聊吧。
咱們公司也採用了多種嘗試,從開始的 MySql 到 MongoDB 再到 Hbase 等等,它們總存在這一點或多點的讓你以爲就是不知足的地方,以下圖:
到此爲止,總體需求基本明確,做爲一款物聯網的時序數據庫須要處理的問題:
IoTDB 完成了上述問題中的幾乎全部功能,並且能夠靈活對接多生態,高性能優點等。那麼 IoTDB 是如何完成這些優點項,如何作到?
對照上面的圖,大體瞭解一下 IoTDB 的結構,邏輯上被分爲 3 個大部分,其中:
Engine 和 Storage 中主要包含:
Server
模塊.Session
模塊JDBC
模塊聊到這裏,咱們基本介紹了行業內的特色,做爲數據庫須要解決的痛點,以及 IoTDB 在完成功能的同時所具備的自身的優點。同時還簡單介紹了 IoTDB 的基礎架構,樸實無華且枯燥。那麼 TsFile 到底是什麼樣的結構才能完成以上所介紹的高速寫入、高壓縮比、高速查詢呢?Native API 又是什麼?歡迎繼續關注。。。