隨(sui)著物聯(lian)網(wang)、車(che)聯(lian)網(wang)、工業物聯(lian)網(wang)等(deng)領域的(de)(de)(de)快速(su)發展,時序數(shu)據(ju)的(de)(de)(de)處理需求也在(zai)不斷增加。為(wei)了滿足這一需求,時序數(shu)據(ju)庫應(ying)運而生,為(wei)高頻數(shu)據(ju)寫(xie)入和實(shi)時分析提供了強有(you)力的(de)(de)(de)支(zhi)持。在(zai)這一領域,TDengine 和 InfluxDB 是兩大領先的(de)(de)(de)解(jie)決方案(an)。盡(jin)管兩者(zhe)都具有(you)強大的(de)(de)(de)時序數(shu)據(ju)處理能(neng)力,但在(zai)流式(shi)計算方面(mian),二者(zhe)存在(zai)顯著差(cha)異(yi)。
實(shi)際上,InfluxDB 僅提供基礎的連續查詢功能,嚴(yan)格意義上來說并(bing)不(bu)算真正的“流(liu)(liu)式計算”,僅適(shi)用于某些場景,無法(fa)滿足(zu)復雜實(shi)時數(shu)據(ju)流(liu)(liu)的處理(li)需求(qiu)。而(er) TDengine 則具備真正的流(liu)(liu)式計算能力,可以(yi)無縫(feng)集成(cheng)與處理(li)來自各種(zhong)數(shu)據(ju)源的實(shi)時數(shu)據(ju)流(liu)(liu),避免了依賴 Spark 或 Flink 等外部框架(jia)進行(xing)復雜的流(liu)(liu)數(shu)據(ju)處理(li)。這(zhe)樣不(bu)僅簡化了架(jia)構設計,還顯著降低了運維成(cheng)本。
流式計算功能對比
InfluxDB 不具備真正的流式計算功能
InfluxDB 只提供簡單(dan)(dan)的(de)(de)連續查詢(Continuous Query)功能(neng)(neng),支持簡單(dan)(dan)的(de)(de)滑動(dong)窗口(kou)(kou)計算。滑動(dong)窗口(kou)(kou)是(shi)一種基于固定(ding)時間間隔的(de)(de)計算方式,計算結果會隨(sui)著(zhu)時間推移動(dong)態更(geng)新。例如,可以對每(mei)一分(fen)鐘的(de)(de)數據進行(xing)聚(ju)合(he)分(fen)析。然而(er),InfluxDB 的(de)(de)流式計算功能(neng)(neng)相對簡單(dan)(dan),基本上只能(neng)(neng)處理滑動(dong)窗口(kou)(kou)和基礎的(de)(de)聚(ju)合(he)任務,難以滿足更(geng)加(jia)復雜的(de)(de)應用場(chang)景。
使用 InfluxDB 的(de)(de)用戶,往往還(huan)(huan)需要依賴 Spark、Flink 等(deng)外(wai)部流處(chu)(chu)理框架來(lai)補充流式(shi)計算(suan)的(de)(de)功能(neng)(neng),以(yi)實現(xian)更復雜(za)的(de)(de)數據處(chu)(chu)理和(he)(he)實時分(fen)析。這種做(zuo)法(fa)不(bu)僅增(zeng)加(jia)了(le)架構(gou)的(de)(de)復雜(za)性,還(huan)(huan)需要額外(wai)的(de)(de)運維(wei)(wei)成本來(lai)管理和(he)(he)維(wei)(wei)護多個系(xi)統的(de)(de)協調工(gong)作(zuo)。此外(wai),數據在不(bu)同平臺之間的(de)(de)傳輸和(he)(he)同步也可能(neng)(neng)帶來(lai)延遲和(he)(he)性能(neng)(neng)瓶(ping)頸,尤其(qi)是在高(gao)(gao)并(bing)發、高(gao)(gao)頻次的(de)(de)數據寫入和(he)(he)查(cha)詢場景下。
TDengine 的流式計算
TDengine 則在流式計算方(fang)面提供(gong)了(le)更加豐(feng)富和靈活的(de)功能(neng)。除了(le)支持基礎的(de)滑動(dong)窗(chuang)(chuang)(chuang)口外,TDengine 還提供(gong)了(le)多種(zhong)窗(chuang)(chuang)(chuang)口類型,包括狀態窗(chuang)(chuang)(chuang)口、會(hui)話(hua)窗(chuang)(chuang)(chuang)口、計數窗(chuang)(chuang)(chuang)口、事件窗(chuang)(chuang)(chuang)口等(deng)。這些窗(chuang)(chuang)(chuang)口類型允許用戶根據不同需求(qiu)切分(fen)數據并進行聚合(he)分(fen)析。
事件驅動的流式計算
TDengine 支(zhi)持事(shi)件驅動的(de)流(liu)式計(ji)(ji)算,這(zhe)(zhe)使得用戶可以根據(ju)業務事(shi)件的(de)發生來(lai)觸發計(ji)(ji)算,而不僅僅是(shi)依賴固定的(de)時間間隔。這(zhe)(zhe)一特性在處(chu)理與(yu)實際業務事(shi)件緊(jin)密相關的(de)數(shu)據(ju)時尤為重要,可以大幅降低計(ji)(ji)算延(yan)遲并提高系統的(de)響應(ying)速度(du)。
豐富的窗口類型
TDengine 在窗(chuang)(chuang)口類型(xing)的設計上(shang)具(ju)有顯著優勢(shi),能(neng)夠(gou)滿足(zu)更復雜的時序數據(ju)分(fen)析(xi)需求。以下是(shi) TDengine 支(zhi)持的幾種窗(chuang)(chuang)口類型(xing):
- 時間窗口
時(shi)(shi)間窗(chuang)口(kou)(kou)是最常用(yong)(yong)的(de)窗(chuang)口(kou)(kou)類型,能夠按(an)時(shi)(shi)間間隔(ge)對數(shu)據進行切分(fen),適(shi)用(yong)(yong)于大多數(shu)時(shi)(shi)序數(shu)據分(fen)析場(chang)景(jing)。在 TDengine 中(zhong),時(shi)(shi)間窗(chuang)口(kou)(kou)不僅支持滑(hua)動(dong)時(shi)(shi)間窗(chuang)口(kou)(kou),還支持翻轉時(shi)(shi)間窗(chuang)口(kou)(kou),進一步增強了靈活性。
- 滑動時間窗口:隨著時間的推移,計算窗口會動態向前滑動,允許對最新的數據進行連續聚合計算。
- 翻轉時間窗口:不同于滑動窗口,翻轉窗口不會產生重疊,每次計算一個獨立的時間段,適用于不需要重疊數據的場景。
- 狀態窗口
狀(zhuang)態(tai)(tai)(tai)窗(chuang)口通過(guo)根(gen)據數(shu)(shu)據的(de)狀(zhuang)態(tai)(tai)(tai)變化進行(xing)聚合計算,適用于需要捕捉不同狀(zhuang)態(tai)(tai)(tai)之間變化的(de)數(shu)(shu)據處(chu)理。例如(ru),在監控系統中,可以(yi)利(li)用狀(zhuang)態(tai)(tai)(tai)窗(chuang)口來計算某(mou)一設備從(cong)正常狀(zhuang)態(tai)(tai)(tai)到故障狀(zhuang)態(tai)(tai)(tai)的(de)持續時間。
- 會話窗口
會話(hua)窗(chuang)口根(gen)據(ju)數(shu)據(ju)之間的(de)“會話(hua)”進行分組,適合用來(lai)分析(xi)(xi)需要根(gen)據(ju)某些事件或者行為聚(ju)集的(de)數(shu)據(ju)。例如,在用戶行為分析(xi)(xi)中,你可以通過會話(hua)窗(chuang)口計算每個用戶的(de)一次(ci)完整活動(dong)周期。
- 計數窗口
計數(shu)窗口(kou)(kou)根據固定的數(shu)據行數(shu)進(jin)行劃分。默(mo)認(ren)情況下,數(shu)據首先按時(shi)間戳排(pai)序(xu),然后根據 count_val(每個窗口(kou)(kou)中包(bao)含(han)的最大(da)數(shu)據行數(shu))的值(zhi)將(jiang)數(shu)據分成多個窗口(kou)(kou),并進(jin)行聚(ju)合計算(suan)。
- 事件窗口
事(shi)件(jian)窗口更為特殊,它允(yun)許(xu)用戶(hu)基于(yu)特定(ding)的事(shi)件(jian)觸發來進行數據聚(ju)合分析。通過設定(ding)事(shi)件(jian)的起(qi)始和結(jie)束(shu)條(tiao)件(jian),用戶(hu)可(ke)以靈活地(di)控制計算(suan)窗口的范圍和內容(rong)。
計算性能和延遲
高吞吐量和低延遲
TDengine 的流式計(ji)算(suan)(suan)引(yin)擎具有非(fei)常高(gao)(gao)的吞吐量,能夠在(zai)(zai)高(gao)(gao)頻數據寫(xie)入的同時(shi)保持毫秒級(ji)的計(ji)算(suan)(suan)延遲(chi)。這對于實時(shi)監控、預測性維護等應用場景尤為重(zhong)要。例如,在(zai)(zai)智能電(dian)表的應用中,電(dian)表每 10 秒采集一次(ci)數據,而用戶(hu)往往需要每 1 分鐘查(cha)詢(xun)一次(ci)溫度的平(ping)均值(zhi),TDengine 的流式計(ji)算(suan)(suan)能夠高(gao)(gao)效完成(cheng)這類任務。
輕量級替代方案
與傳統的(de)(de)復(fu)雜流處(chu)理系(xi)統相比,TDengine 提供(gong)了一(yi)個(ge)輕量級的(de)(de)流式(shi)計(ji)算解決(jue)方案。它通過(guo)內建的(de)(de)窗口子(zi)句和(he)簡單的(de)(de) SQL 語法,使得(de)用戶無需(xu)引入額外的(de)(de)流處(chu)理引擎便能夠進行實時數據處(chu)理,這樣不僅降低了系(xi)統復(fu)雜度,還節(jie)省了計(ji)算資源。
窗口子句的語法及使用
TDengine 的窗(chuang)口子(zi)句非常靈活(huo),支(zhi)持通過 SQL 語法輕松實(shi)現各種窗(chuang)口計(ji)算。下(xia)面是窗(chuang)口子(zi)句的一些基本(ben)語法示例:
SELECT tbname, _wstart, _wend, avg(voltage)
FROM meters
WHERE ts >= "2022-01-01T00:00:00+08:00"
AND ts < "2022-01-01T00:05:00+08:00"
PARTITION BY tbname
INTERVAL(1m, 5s) SLIDING(2s)
SLIMIT 1;
在這(zhe)個查詢中,數據首先按照子表名進行切(qie)分,然(ran)后按 1 分鐘的時間窗口(kou)進行聚合,窗口(kou)每 2 秒(miao)滑(hua)動(dong)一次。TDengine 支(zhi)持多種窗口(kou)類型和聚合函(han)數,用戶(hu)可以根據需求(qiu)靈(ling)活組合使用。
結語
與(yu) InfluxDB 相比(bi),TDengine 在流(liu)式(shi)計算(suan)的(de)(de)基礎上,還(huan)具備強(qiang)大的(de)(de) ETL 能力——它不僅能處(chu)(chu)理時(shi)序數(shu)據(ju)(ju),還(huan)能自動進行(xing)數(shu)據(ju)(ju)清洗(xi)與(yu)轉換(huan),幫(bang)助用戶實現更加高效(xiao)(xiao)、靈活的(de)(de)數(shu)據(ju)(ju)處(chu)(chu)理。這(zhe)一優(you)勢使得 TDengine 能在更多復(fu)雜(za)的(de)(de)應用場景(jing)中提供卓越的(de)(de)性(xing)能,尤其是(shi)對于需要(yao)實時(shi)數(shu)據(ju)(ju)分析和高效(xiao)(xiao)數(shu)據(ju)(ju)處(chu)(chu)理的(de)(de)行(xing)業,提供了更為完善的(de)(de)解決方案。
TDengine 內建(jian)的(de)流式計算能力使(shi)得用(yong)戶能夠更(geng)加(jia)高效(xiao)地進(jin)行數據(ju)(ju)實(shi)時分析,減少了多平臺整(zheng)合、運維(wei)監(jian)控等額(e)外開銷,實(shi)現了更(geng)優的(de)性能和更(geng)低的(de)運維(wei)復(fu)雜度,尤其在大規模(mo)物聯網(wang)(wang)、車(che)聯網(wang)(wang)等實(shi)時數據(ju)(ju)處(chu)理場景中(zhong),優勢更(geng)加(jia)明顯(xian)。
如果你也想體驗(yan)一把 TDengine 流計算,可以訪問,詳細了解其配置和(he)使用方(fang)法,充分發揮 TDengine 在(zai)實時數據(ju)處理中的(de)強(qiang)大(da)優勢。


























