時間序列資料庫簡稱時序資料庫(Time Series Database),用於處理帶時間標簽(按照時間的順序變化,即時間序列化)的數據,帶時間標簽的數據也稱為時間序列數據。 時序數據的幾個特點 1. 基本上都是插入,沒有更新的需求。 2. 數據基本上都有時間屬性,隨著時間的推移不斷產生新的數據。 3 ...
時間序列資料庫簡稱時序資料庫(Time Series Database),用於處理帶時間標簽(按照時間的順序變化,即時間序列化)的數據,帶時間標簽的數據也稱為時間序列數據。
時序數據的幾個特點
1. 基本上都是插入,沒有更新的需求。
2. 數據基本上都有時間屬性,隨著時間的推移不斷產生新的數據。
3. 數據量大,每秒鐘需要寫入千萬、上億條數據
業務方常見需求
1. 獲取最新狀態,查詢最近的數據(例如感測器最新的狀態)
2. 展示區間統計,指定時間範圍,查詢統計信息,例如平均值,最大值,最小值,計數等。。。
3. 獲取異常數據,根據指定條件,篩選異常數據
常見業務場景
監控軟體系統: 虛擬機、容器、服務、應用
監控物理系統: 水文監控、製造業工廠中的設備監控、國家安全相關的數據監控、通訊監控、感測器數據、血糖儀、血壓變化、心率等
資產跟蹤應用: 汽車、卡車、物理容器、運貨托盤
金融交易系統: 傳統證券、新興的加密數字貨幣
事件應用程式: 跟蹤用戶、客戶的交互數據
商業智能工具: 跟蹤關鍵指標和業務的總體健康情況
在互聯網行業中,也有著非常多的時序數據,例如用戶訪問網站的行為軌跡,應用程式產生的日誌數據等等。
一些基本概念(不同的時序資料庫稱呼略有不同)
Metric: 度量,相當於關係型資料庫中的 table。
Data point: 數據點,相當於關係型資料庫中的 row。
Timestamp:時間戳,代表數據點產生的時間。
Field: 度量下的不同欄位。比如位置這個度量具有經度和緯度兩個 field。一般情況下存放的是隨時間戳而變化的數據。
Tag: 標簽。一般存放的是不隨時間戳變化的信息。timestamp 加上所有的 tags 可以視為 table 的 primary key。
例如採集有關風的數據,度量為 Wind,每條數據都有時間戳timestamp,兩個欄位 field:direction(風向)、speed(風速),兩個tag:sensor(感測器編號)、city(城市)。第一行和第三行,存放的都是 sensor 編號為86F-2RT8的設備,城市是深圳。隨著時間的變化,風向和風速發生了改變,風向從56.4變為45.6,風速從2.9變為3.6。
需要解決的幾個問題
時序數據的寫入:如何支持每秒鐘成千上億條數據的寫入。
時序數據的讀取:如何支持在秒級對上億條數據的分組聚合運算。
成本敏感:海量數據存儲帶來的成本問題。如何以更低成本存儲數據,將成為時序資料庫需要解決的重中之重。
常見時序資料庫
時序資料庫出現的時間較晚,目前較成熟的時序資料庫都僅有2、3年的歷史。
InfluxDB(單機版免費,集群版收費)最成熟,Kairosdb(底層使用Cassandra),OpenTsdb(底層使用HBase),beringei(Facebook開源),TimeScaleDB(底層基於PostgreSQL),TSDB(百度開源),HiTSDB(阿裡開源,底層是PostgreSQL)。