TDengine是一高效的時序空間大數(shù)據處理引擎,因為充分利用物聯(lián)網、車聯(lián)網、工業(yè)互聯(lián)網等場景的數(shù)據特點并做了很多優(yōu)化,因此性能上遠勝通用的大數(shù)據平臺。但TDengine的核心功能是時序數(shù)據庫(Time-Series Database),而大數(shù)據處理平臺往往還需要有消息隊列、緩存、流式計算等功能,怎么能不要Redis、Kafak和Spark這些軟件了呢?本文將給出詳細解答。
消息隊列
與互聯(lián)網應用不一樣的是,物聯(lián)網場景中,只要指定聯(lián)網設備數(shù)量,數(shù)據采集頻次,系統(tǒng)所需要的流量是可較為準確估算出來的,流量是較為平穩(wěn)的。而互聯(lián)網場景中,流量不平穩(wěn),比如雙11的時候,電商的流量可以幾十倍的變化。同時,物聯(lián)網設備都有一定的數(shù)據緩存能力,不能僅僅依靠云端的緩存來解決。因為即使整個系統(tǒng)都工作正常,但網絡任何部分都可能出現(xiàn)中斷,數(shù)據就無法傳輸,物聯(lián)網設備必須有能力把數(shù)據先緩存起來,因此物聯(lián)網平臺對消息隊列的需求沒有那么強烈。而TDengine內部實現(xiàn)了一簡單的消息隊列,任何收到的消息都會寫進WAL日志,只要回復確認了的消息,就一定不會丟失。同時TDengine提供訂閱功能,用戶可以訂閱原始數(shù)據,一個數(shù)據子集、時間軸上聚合計算的結果,或是多條時間線定時聚合的結果,這樣就不需要使用Kafka等類似的消息隊列軟件。使用TDengine,將數(shù)據寫入消息隊列,就是標準的SQL insert指令,訂閱數(shù)據,C/C++語言的接口是:
taos_subscribe(char *host, char *user, char *pass, char *db, char *table, long time, int mseconds)
這個API里的參數(shù)是鏈接數(shù)據庫所需要的IP地址、用戶名、密碼、數(shù)據庫以及表的名字,但參數(shù)mseconds控制了多快返回一次數(shù)據給應用,參數(shù)time是指離現(xiàn)在多長時間之前的數(shù)據需要返回給應用,如果沒有返回過的話。其他語言的API可以參考TDengine的用戶手冊。
緩存
TDengine對數(shù)據庫分配了固定的內存池,新插入的數(shù)據,會先寫入內存池。每個數(shù)據采集設備或是每張表,都會從內存池中分配到一個或多個數(shù)據塊。對于互聯(lián)網應用,需要緩存的數(shù)據往往是用戶讀取頻次較高的數(shù)據,取決于用戶行為。比如某頭條文章或微博,一天之后還很有熱度,需要緩存才行。而物聯(lián)網數(shù)據,絕大部分情況下,剛剛采集的數(shù)據才是熱數(shù)據,歷史數(shù)據一般情況下都是冷數(shù)據。因此TDengine按照先進先出的原則對內存池進行管理,內存不足時,老的數(shù)據會被持久化存儲,而內存里的老數(shù)據會被最新的覆蓋掉。TDengine還保證了任何一臺設備最后一條記錄一定在內存中,如果應用要獲取每個設備的最新數(shù)據或狀態(tài),都將從內存里直接獲取。系統(tǒng)提供了一個特殊的函數(shù)SQL last_row專門用來返回最后一條記錄。如果使用TDengine超級表,還可以快速返回所有設備或一組設備的最后一條記錄,便于應用顯示系統(tǒng)實時狀態(tài)。比如查詢所有北京的溫度傳感器的最新溫度值,使用下面的SQL即可:
select last_row(*) from thermometers where location=’beijing’
這樣的設計讓系統(tǒng)可以不再需要Redis這類軟件。
流式計算
物聯(lián)網數(shù)據是一個流數(shù)據,需要實時流式計算來進行各種預警、預測或生成實時報表?;诨瑒哟翱?,TDengine后臺可定時的拉起查詢計算,提供了一簡化的流式計算,便于做各種實時的統(tǒng)計聚合操作。比如,某個溫度傳感器每隔10秒鐘采集一次溫度,但系統(tǒng)需要每隔1分鐘計算一下剛過去的三分鐘的溫度平均值,TDengine里就可以使用如下SQL語句實現(xiàn):
select avg(degree) from thermometer interval(3m) sliding(1m)
其中的選項interval是指滑動窗口的時間長度,sliding是指窗口多快滑動一次。這樣對于一般的物聯(lián)網場景,不再需要使用Spark等類型的流式計算軟件。
全棧的數(shù)據處理引擎
綜上所述,TDengine提供了大數(shù)據處理所需要的緩存、消息隊列、流式計算等系列功能。但一個物聯(lián)網、車聯(lián)網大數(shù)據平臺,往往還有很多業(yè)務數(shù)據需要處理。這些業(yè)務數(shù)據包括人員、設備的管理數(shù)據,交易記錄等等,這些數(shù)據不是時序的,而且往往有復雜的關系查詢,無法由TDengine處理,還需要使用傳統(tǒng)的關系型數(shù)據庫,比如MySQL來處理。只不過,這些業(yè)務數(shù)據的量都不大,根本不需要大數(shù)據技術來處理。
在典型的物聯(lián)網、車聯(lián)網場景里,采集的數(shù)據量占有整個系統(tǒng)的數(shù)據量的99%以上,使用TDengine,就能很好的解決整個平臺的大數(shù)據問題,完全可拋棄掉Kafka、HDFS、HBase、Spark和Redis等一大堆軟件,大幅簡化數(shù)據平臺的設計,降低研發(fā)成本大,降低運維門檻。而且系統(tǒng)將更加健壯,數(shù)據的一致性更有保證。
最后值得一提的是,對于私有化部署的物聯(lián)網、車聯(lián)網平臺,因為TDengine部署簡單,增加一個節(jié)點幾秒搞定,無歷史數(shù)據實時數(shù)據之分,數(shù)據備份恢復全部自動,相對于通用的大數(shù)據平臺而言,將大幅節(jié)省現(xiàn)場實施和后續(xù)的維護成本。



互聯(lián)網.png)



-1.png)












伙伴.png)



