无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

TDengine 流計算實踐指南:從平均風速到復雜流計算解析

圖片
?

在新能源行業中,多采用數據中臺來管理業務數據,使用時序數據庫(Time Series Database)來管理時序數據,他們的數據都來自數采網關以(yi)風力發(fa)電場景為例,需要實時(shi)計(ji)算(suan)風機的各種 KPI 指標(biao),往往通(tong)過數據中臺的定時(shi)任務來(lai)完成這些計(ji)算(suan)。目前,現有的方(fang)案存在幾個方(fang)面(mian)的問題:

  • 首(shou)先,由(you)于是定時任務,KPI 計(ji)算的(de)實時性(xing)無法保證,特別是在(zai) KPI 的(de)計(ji)算需要多個(ge)步驟才能完成的(de)情(qing)況下(xia),延(yan)遲可能會長達幾分(fen)鐘甚至十幾分(fen)鐘。

  • 其次,由于數據中臺基于 Hadoop 生(sheng)態,架構臃腫、組件繁(fan)多,需(xu)要大(da)量服務器,不(bu)僅導致業(ye)務應用開發成(cheng)本高(gao)(gao)昂、同時(shi)也導致系統(tong)的(de)運維成(cheng)本居(ju)高(gao)(gao)不(bu)下(xia)。

因此,為了提高業務響應速度和實時性,客戶希望將 KPI 計算任務卸載到 TDengine。希望借助 TDengine 的流式計算功能,大幅度提升 KPI 計算的效率和實時性。采用 TDengine 流計算后,簡單的 SQL 即可實現 KPI 計算需求,業務響應時間(流計算的開發時長)從數周縮短一兩天甚至數小時,極大地提高了業務響應能力顯著地提高了企業的競爭力。

此外,引入 TDengine 流計算后,KPI 計算的延遲從幾分鐘甚至十幾分鐘縮短到秒級甚至毫秒級,大幅度地提升了實時性。從基于 Hadoop 生態的批任務到基于 SQL 的流計算,不僅降低了開發復雜度和開發測試成本,還減少了數據中臺的服務器集群規模,顯著降低了成本和運維復雜度,實現了降本增效的目標

本文將(jiang)從“實時計算(suan) 95 個風機(ji)的(de)平均風速”到“復雜(za) KPI 的(de)流計算(suan)”兩大場景進行(xing)闡述,從代碼(ma)層面為你(ni)解讀 TDengine 流計算(suan)的(de)強(qiang)大功能,助力(li)新(xin)能源行(xing)業的(de)應用。

實時計算 95 個風機的平均風速

為盡可能還原(yuan)真實業務場景(jing),我(wo)們模擬 95 個(ge)風機,1 秒鐘上(shang)報(bao) 1 條(tiao)數(shu)據的場景(jing)。

創建數據庫(ku)

-- 創建風力發電(dian)數據庫
create database wind;

創(chuang)建超級表

-- 創建風機的(de)超級表
create table wind_turbine (ts timestamp, wind_speed double,  conn_state bool) tags (site_id varchar(20));

?創建子表

-- 創建遙測風機(ji)子表
(YC_FJ_001)create table YC_FJ_001 using wind_turbine tags ('YC_FJ_001');
            ……
create table YC_FJ_095 using wind_turbine tags ('YC_FJ_095');
注(zhu)意:流計(ji)算會考(kao)慮過期數(shu)據(ju)(ju)(ju)以(yi)及亂序數(shu)據(ju)(ju)(ju),如果原來(lai)的(de)表中已經有(you)數(shu)據(ju)(ju)(ju),新寫(xie)入的(de)數(shu)據(ju)(ju)(ju)時間若(ruo)早于已有(you)數(shu)據(ju)(ju)(ju),有(you)可能因為(wei)數(shu)據(ju)(ju)(ju)過期被(bei)丟(diu)棄。如果數(shu)據(ju)(ju)(ju)被(bei)丟(diu)棄,有(you)可能無法生成新的(de)流計(ji)算結(jie)果。
模擬 95 個風機(ji),1 秒鐘(zhong)上報 1 條數據的(de)場景:
taosBenchmark -f insert_1s1row.json
其中關鍵參(can)數(shu)如下:
"non_stop_mode": "yes", # 持續寫入不停止
"interlace_rows": 1, # 交叉向每個子表寫入
"insert_interval": 1000, # 保持1000毫秒插入一條

創建(jian)流計算

-- 創建流計算,95個風機的平均風速(連接狀態斷開的風機不(bu)參(can)與計算)
create stream stream_avg_speed trigger at_once into avg_speed_95as select _wstart as time, avg(wind_speed) as avg_speed from wind_turbine where conn_status = true interval(1s)

查詢流計算結(jie)果(guo)

-- 查詢流計算最新結果
select * from avg_speed_95 order by time desc limit 5;

taos> select * from avg_speed_95 order by time desc limit 5;
time | avg_speed | group_id |
==============================================================================
2024-06-26 01:22:23.000 | 26.166599999999992 | 0 |
2024-06-26 01:22:22.000 | 22.864500000000000 | 0 |
2024-06-26 01:22:21.000 | 1.101700000000000 | 0 |
2024-06-26 01:22:20.000 | 29.485700000000001 | 0 |
2024-06-26 01:22:19.000 | 24.481799999999996 | 0 |
Query OK, 5 row(s) in set (0.009711s)

taos> select * from avg_speed_95 order by time desc limit 5;
time | avg_speed | group_id |
==============================================================================
2024-06-26 01:22:50.000 | 31.460899999999992 | 0 |
2024-06-26 01:22:49.000 | 8.252200000000000 | 0 |
2024-06-26 01:22:48.000 | 19.568899999999996 | 0 |
2024-06-26 01:22:47.000 | 5.945700000000001 | 0 |
2024-06-26 01:22:46.000 | 29.533400000000007 | 0 |
Query OK, 5 row(s) in set (0.006516s)

復雜流計算場景

該場景(jing)的(de)(de) KPI 計(ji)算(suan)規則復(fu)雜,并(bing)且數據模擬的(de)(de)難(nan)度非常大,因此,本演示(shi)只展(zhan)示(shi)復(fu)雜 KPI 計(ji)算(suan)邏輯,不展(zhan)示(shi)流(liu)計(ji)算(suan)實時計(ji)算(suan)的(de)(de)過程。

業務(wu)需求

該 KPI 的計算公式,如下:
圖片
其中:
  • n 為該日的(de)樣(yang)本總數,15 分鐘(zhong)一個點記作 i;pmi 為 i 時刻(ke)的(de)實際功率;ppi 為 i 時刻(ke)的(de)短期(qi)預測(ce)功率;
  • 若 pmi = 0,則 i 時刻的預測值直接 = 0;
  • 若 ppi > 2 * pmi,則(ze) i 時刻(ke)的結(jie)果直接 = 1;
  • 否則,預測(ce)值(zhi)按照(zhao)上面的公式計(ji)算。

創建超級表

-- 創建超級表
create table power_predict (ts timestamp, ppi double, pmi double) tags (site_id varchar(20));
-- 發電預測表
create table YC_FJ001_PREDICT using power_predict tags ("YC_FJ001_PREDICT");

創建(jian)一階(jie)段流計算

-- KPI計算規則:
-- 1. 當 pmi == 0時, ppi_percent = 0.0
-- 2. 當 ppi > 2*pmi 時, ppi_percent = 1.0
-- 3. 其他情況, ppi_percent = 1-sqrt(avg(pow(((pmi-ppi)/pmi), 2)))
create stream stream_ppi_percent_1 trigger at_once into st_ppi_percent_1 as SELECT ts, ppi, pmi, case when pmi <= 0.0001 then 0.0 when ppi > 2*pmi then 1.0 else pow(((pmi-ppi)/pmi), 2) end as ppi_percent from power_predict
partition by tbname; -- 這個必不可少

創建二階段(duan)流計算

create stream stream_ppi_percent trigger at_once into st_ppi_percent as select _wstart as ts, 1-sqrt(avg(ppi_percent)) from st_ppi_percent_1 interval(1d);

向源表寫(xie)入數據

insert into YC_FJ001_PREDICT values
('2024-06-25 12:00:00', 5500.00, 0.00)
('2024-06-25 13:00:00', 5000, 5500.00)
('2024-06-25 14:00:00', 15500, 5500.00)
('2024-06-26 12:00:00', 5500.00, 5000.00)
('2024-06-26 13:00:00', 5000, 0.00)
('2024-06-25 14:00:00', 15500, 5500.00);

查(cha)詢計(ji)算結果

-- 查詢流計算結果
taos> select * from st_ppi_percent_1 order by ts desc limit 20;
ts | ppi | pmi | ppi_percent | group_id |
======================================================================================================================================
2024-06-27 14:00:00.000 | 15500.000000000000000 | 5500.000000000000000 | 1.000000000000000 | 7041101957555052029 |
2024-06-27 13:00:00.000 | 5000.000000000000000 | 0.000000000000000 | 0.000000000000000 | 7041101957555052029 |
2024-06-27 12:00:00.000 | 5500.000000000000000 | 5000.000000000000000 | 0.010000000000000 | 7041101957555052029 |
2024-06-26 14:00:00.000 | 15500.000000000000000 | 5500.000000000000000 | 1.000000000000000 | 7041101957555052029 |
2024-06-26 13:00:00.000 | 5000.000000000000000 | 5500.000000000000000 | 0.008264462809917 | 7041101957555052029 |
2024-06-26 12:00:00.000 | 5500.000000000000000 | 0.000000000000000 | 0.000000000000000 | 7041101957555052029 |
Query OK, 6 row(s) in set (0.007745s)

taos> select * from st_ppi_percent order by ts desc limit 20;
ts | 1-sqrt(avg(ppi_percent)) | group_id |
==============================================================================
2024-06-27 00:00:00.000 | 0.419770160482360 | 0 |
2024-06-26 00:00:00.000 | 0.420268894857303 | 0 |
Query OK, 2 row(s) in set (0.007535s)

寫在(zai)最后

通(tong)過本(ben)文的介紹和(he)示(shi)例,我(wo)們可(ke)以清(qing)晰地(di)看到 TDengine 在(zai)處理(li)大規模時(shi)(shi)(shi)序數據和(he)實時(shi)(shi)(shi)流計(ji)算(suan)方面的強大功(gong)能。它不(bu)僅顯著提高(gao)了業(ye)務響應速度和(he)實時(shi)(shi)(shi)性,還大幅降低了系統的開發和(he)運(yun)維成(cheng)本(ben)。在(zai)新能源(yuan)領(ling)域 KPI 計(ji)算(suan)的實際應用中,TDengine 成(cheng)功(gong)地(di)解決了定時(shi)(shi)(shi)任務的延(yan)遲問題,實現了秒(miao)級甚(shen)至(zhi)毫秒(miao)級的實時(shi)(shi)(shi)計(ji)算(suan)。

未來(lai)(lai),隨著(zhu)業務(wu)需求的(de)不(bu)斷增長和(he)復雜性提升(sheng),TDengine 的(de)流計(ji)算能(neng)力將為更多場景提供高效、可靠的(de)解決方案(an)。希(xi)望本文(wen)的(de)分析(xi)和(he)實(shi)操示(shi)例能(neng)為廣大用戶帶來(lai)(lai)啟發和(he)幫助,讓大家在實(shi)際項目中充(chong)分發揮 TDengine 的(de)優勢,實(shi)現更高效的(de)業務(wu)管理和(he)數據處理。

關于(yu) TDengine 流計算的(de)更詳細(xi)信息可查閱官方文檔:

作者 | 李(li)明軍

編輯 | 馬(ma)爾悅

圖片