時序數據庫的流計算支持
一、時序數據及其特點
時序數據(Time Series Data)是基於相對穩定頻率持續產生的一系列指標監測數據,比如一年內的道瓊斯指數、一天內不同時間點的測量氣温等。時序數據有以下幾個特點:
- 歷史數據的不變性
- 數據的有效性
- 數據的時效性
- 結構化的數據
- 數據的大量性
二、時序數據庫基本架構
針對時序數據的特點,時序數據庫一般具有以下特性:
- 高速的數據入庫
- 數據的生命週期管理
- 數據的流處理
- 高效的數據查詢
- 定製的數據壓縮
三、流計算介紹
流計算主要是指針對實時獲取來自不同數據源的海量數據,經過實時分析處理,從而獲得有價值的信息。常見的業務場景包括實時事件的快速反應,市場變化的實時告警,實時數據的交互分析等。流計算一般包括如下幾方面的功能:
1)過濾和轉換 (filter & map)
2)聚合以及窗口函數 (reduce,aggregation/window)
3)多數據流合併以及模式匹配 (joining & pattern detection)
4)從流到塊處理
四、時序數據庫對流計算的支持
-
案例一:使用定製化的流計算 API,如下面例子所示:
from(bucket: "mydb")
|> range(start: -1h)
|> filter(fn: (r) => r["_measurement"] == "mymeasurement")
|> map(fn: (r) => ({ r with value: r.value * 2 }))
|> filter(fn: (r) => r.value > 100)
|> aggregateWindow(every: 1m, fn: sum, createEmpty: false)
|> group(columns: ["location"])
|> join(tables: {stream1: {bucket: "mydb", measurement: "stream1", start: -1h}, stream2: {bucket: "mydb", measurement: "stream2", start: -1h}}, on: ["location"])
|> alert(name: "value_above_threshold", message: "Value is above threshold", crit: (r) => r.value > 100)
|> to(bucket: "mydb", measurement: "output", tagColumns: ["location"])
-
案例二:使用類 SQL 指令,創建流計算以及定義流計算規則,如下:
CREATE STREAM current_stream
TRIGGER AT_ONCE
INTO current_stream_output_stb AS
SELECT
_wstart as start,
_wend as end,
max(current) as max_current
FROM meters
WHERE voltage <= 220
INTEVAL (5S) SLIDING (1s);
「其他文章」