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