本文介紹Lindorm時序引擎的數據模型以及相關術語。
基本概念
物聯網、應用監控、工業互聯網等典型的時序場景下,數據源(Data Source)通常按一定的周期持續產生時序數據,一條時序數據由Tag、Timestamp、Field等元素共同來描述,具有相同特征的一類數據存放在同一張表中,表的時序數據元素分類如下圖:
元素 | 描述 |
表名(Table) | 時序表代表一系列同類時序數據的集合,例如為空氣質量傳感器建立一個Table,存儲所有傳感器的監測數據。 |
標簽(Tag) | Tag描述數據源的特征,通常不隨時間變化,例如傳感器設備,包含設備DeviceId、設備所在的Region等Tag信息,數據庫內部會自動為Tag建立索引,支持根據Tag來進行多維檢索查詢。Tag由Tag Key、Tag Value組成,兩者均為String類型。 在定義時序數據表時,還可以指定特定標簽列作為分區鍵來顯式指定數據在多個節點上分片(Data Sharding)時的分片規則,從而實現貼合業務場景的性能提升。 |
時間戳(Timestamp) | Timestamp代表數據產生的時間點,可以寫入時指定,也可由系統自動生成。 |
量測值(Field) | Field描述數據源的量測指標,通常隨著時間不斷變化,例如傳感器設備包含溫度、濕度等Field,Field列無需提前創建固定的Schema,可以在運行過程中動態增減;Field由Field名和Field值組成,Field名為字符串類型,Field值支持多種數據類型。 |
數據點(Data Point) | 數據源在某個時間產生的某個量測指標值(Field值)稱為一個數據點,數據庫查詢、寫入時按數據點數來作為統計指標。 |
時間線(Time Series) | 數據源的某一個指標隨時間變化,形成時間線,Tag的組合確定一條時間線。針對時序數據的計算包括降采樣、聚合(sum、count、max、min等)、插值等都基于時間線維度進行;數據庫在存儲數據時,會將同一條時間線的數據盡量聚類存儲,提升時間線數據訪問效率,同時更好的支持時序數據壓縮。 在時序表中,Tag列的值都相同的一系列數據行構成了一條時間線。 |
時序數據庫提供一系列特有的數據訪問操作,包括聚合(Aggregation)、降采樣(Downsample)、插值(Interpolation)等,同時還提供數據生命周期(數據時效)的管理機制。
元素 | 描述 |
聚合(Aggregation) | 對同一時間線、或不同時間線上的數據點進行分組、求和、計數等計算操作。 |
降采樣(Downsample) | 查詢時間區間跨度較長,且原始數據采樣頻率較高時,可通過降采樣降低數據的查詢展現精度,例如按秒采集的數據,查詢時按小時級別采樣,減少結果集的數據點數。 |
插值(Interpolation) | 時間線中間缺失部分數據點時,可通過插值算法進行數據點自動填充。 |
數據時效(TTL) | 數據時效是指數據保存有效期,超過有效期的數據會被自動清理,默認數據有效期為永久保存。 |
場景示例
某風力電廠包含一系列的智能風力發電機設備,創建名為Wind-generators
的table來存儲所有設備的信息,設備由ID
、型號
、廠商
等Tag信息描述,每個設備會持續上報功率
、風速
等Field指標,指標數據通過時序數據庫的API實時寫入到云端時序數據庫。
上述場景中三個設備產生的數據如下圖所示。
時序數據庫除了支持高并發的寫入吞吐以及高壓縮率,還能高效的滿足如下類型的查詢請求:
查詢某條時間線一段時間內的數據點。
例如:查詢
ID=7AD45EC
的設備,在2020-10-24T00:00:00Z ~ 2020-10-24T00:30:00Z
30分鐘時間范圍內,運行風速
指標值。查詢多條時間線一段時間內的數據點,并按5分鐘粒度降采樣。
例如:查詢
ID=7AD45EC
的設備,在2020-10-24T00:00:00Z ~ 2020-10-25T00:00:00Z
一天時間范圍內,功率
、風速
的指標值明細,按5分鐘
粒度采樣返回數據。對某條時間線按時間范圍做聚合。
例如:查詢
ID=7AD45EC
的設備,在2020-10-24T00:00:00Z ~ 2020-10-24T00:30:00Z
時間范圍內,運行功率
的平均值。查詢多條時間線的最新點。
例如:查詢
ID=7AD45EC
的設備,最新的功率
、風速
。按Tag做時間線聚合查詢。
例如:查詢
廠商=KingWind
的設備,在2020-10-24T00:00:00Z
的平均風速
。