大數據有很多處理工具,最流行的當屬Hadoop系統。Hadoop生態包括HDFS、HBase、Hive、YARN、Storm、Spark和Zookeeper等(deng)系(xi)列(lie)工(gong)具。整個大數(shu)(shu)據(ju)平(ping)臺(tai)中往往還(huan)有(you)Kafka, Redis等(deng)類似(si)的(de)消息隊列(lie)、緩存軟件。這些(xie)軟件較好的(de)解(jie)決(jue)了通用大數(shu)(shu)據(ju)問題(ti),但是(shi)物聯(lian)(lian)網、車聯(lian)(lian)網、工(gong)業(ye)互聯(lian)(lian)網等(deng)場景的(de)數(shu)(shu)據(ju)有(you)其獨特(te)性,如果充分利用這些(xie)獨特(te)之處(chu),可(ke)以推出一個專有(you)的(de)物聯(lian)(lian)網大數(shu)(shu)據(ju)處(chu)理平(ping)臺(tai),數(shu)(shu)量級的(de)提升數(shu)(shu)據(ju)處(chu)理能力,并(bing)減少研發和運維成本。剛(gang)剛(gang)開源的(de)TDengine就是(shi)這樣的(de)產(chan)品。
TDengine專為物聯網、車聯網等時序空間大數據設計,其核心功能是時序數據庫(Time-Series Database)。但為減少大(da)數據平臺的(de)研發和(he)運維的(de)復雜度(du),更進一步降低計算資源,TDengine還提供大(da)數據處理所需要的(de)消息(xi)隊列、消息(xi)訂閱(yue)、緩(huan)存、流式計算等功能。TDengine的(de)優勢十(shi)分明(ming)顯,主要表現在以下幾個(ge)方面。
1: 大幅提升數據插入和查詢性能
物聯(lian)網的(de)數(shu)據(ju)是(shi)結構化(hua)的(de),因此TDengine采取(qu)的(de)是(shi)結構化(hua)存(cun)儲,而(er)不是(shi)流行(xing)的(de)KV存(cun)儲。物聯(lian)網場景(jing)里,每個數(shu)據(ju)采集(ji)點(dian)(dian)的(de)數(shu)據(ju)源是(shi)唯(wei)一(yi)的(de),數(shu)據(ju)是(shi)時序的(de),而(er)且用戶關心的(de)往(wang)往(wang)是(shi)一(yi)個時間段的(de)數(shu)據(ju),而(er)不是(shi)某個特殊時間點(dian)(dian)。基于(yu)這些(xie)特點(dian)(dian),TDengine要(yao)求對每個采集(ji)設(she)備(bei)單獨建表。如果有1000萬個設(she)備(bei),就需要(yao)建1000萬張表。
基于這(zhe)樣(yang)的(de)(de)(de)(de)設計,任何一(yi)(yi)(yi)臺設備(bei)(bei)采(cai)集的(de)(de)(de)(de)數(shu)據(ju)(ju)在存(cun)儲(chu)介質里可以是(shi)一(yi)(yi)(yi)塊(kuai)一(yi)(yi)(yi)塊(kuai)連續的(de)(de)(de)(de)存(cun)放的(de)(de)(de)(de),而且按(an)照時(shi)(shi)間排(pai)序(xu)。因(yin)此查詢(xun)單個(ge)(ge)設備(bei)(bei)一(yi)(yi)(yi)個(ge)(ge)時(shi)(shi)間段的(de)(de)(de)(de)數(shu)據(ju)(ju),查詢(xun)性(xing)能就(jiu)有數(shu)量(liang)級的(de)(de)(de)(de)提(ti)(ti)升。另外一(yi)(yi)(yi)方面,雖然(ran)不同(tong)設備(bei)(bei)由于網(wang)絡的(de)(de)(de)(de)原因(yin),到(dao)達服(fu)務器的(de)(de)(de)(de)時(shi)(shi)間無法控(kong)制,是(shi)完全亂序(xu)的(de)(de)(de)(de),但對于同(tong)一(yi)(yi)(yi)個(ge)(ge)設備(bei)(bei)而言,數(shu)據(ju)(ju)點(dian)的(de)(de)(de)(de)時(shi)(shi)序(xu)是(shi)保(bao)證(zheng)的(de)(de)(de)(de)。一(yi)(yi)(yi)個(ge)(ge)設備(bei)(bei)一(yi)(yi)(yi)張表(biao),就(jiu)保(bao)證(zheng)了一(yi)(yi)(yi)張表(biao)插入的(de)(de)(de)(de)數(shu)據(ju)(ju)是(shi)有時(shi)(shi)序(xu)保(bao)證(zheng)的(de)(de)(de)(de),這(zhe)樣(yang)數(shu)據(ju)(ju)插入操作就(jiu)變(bian)成了一(yi)(yi)(yi)個(ge)(ge)簡單的(de)(de)(de)(de)追(zhui)加操作,插入性(xing)也能大幅度提(ti)(ti)高(gao)。

KV存(cun)儲(chu)的(de)(de)(de)好處是不用定義數據庫(ku)表結(jie)(jie)構,每條記(ji)錄都可以變換格(ge)式(shi)。但物聯網、車聯網這些場(chang)景里,一(yi)般(ban)數據格(ge)式(shi)是固定的(de)(de)(de),改動(dong)的(de)(de)(de)頻次很低,而且(qie)TDengine實現了一(yi)種高效(xiao)的(de)(de)(de)修改表結(jie)(jie)構的(de)(de)(de)方法(fa),因此TDengine采取格(ge)式(shi)化存(cun)儲(chu)不會帶來(lai)太(tai)大的(de)(de)(de)不便。
2: 大幅降低硬件或云服務成本:
由于數據插入查詢性能(neng)大幅度提升(sheng),系統所需要的計算資源(yuan)就大幅減少(shao)。另(ling)外(wai)一(yi)方面,物聯網采集(ji)的物理量(liang)的值是(shi)隨時間(jian)(jian)改變的,但正常情況下(xia),是(shi)漸變的,因此(ci)TDengine采取列(lie)式存儲,將同一(yi)個物理量(liang)在多個時間(jian)(jian)點采集(ji)的值連續存放(fang),這(zhe)樣能(neng)成(cheng)倍的提高(gao)壓(ya)縮效(xiao)率。而且TDengine針對(dui)不(bu)同的數據類型采取不(bu)同的壓(ya)縮方法(fa),比如delta-delta 編碼、simple 8B方法(fa)、zig-zag等(deng)等(deng),這(zhe)樣更(geng)進一(yi)步(bu)的提高(gao)壓(ya)縮率。與通(tong)用數據庫(ku)相比,在已經測試過的物聯網場(chang)景(jing)中,TDengine存儲空間(jian)(jian)不(bu)到1/5,大幅節省存儲資源(yuan)。在TDengine公(gong)布的對(dui)比測試報(bao)告(gao)里,有如下(xia)的結果(guo):
3: 大幅簡化大數據系統架構
與互(hu)聯(lian)網(wang)應用不(bu)一(yi)(yi)樣的(de)(de)是(shi),物(wu)聯(lian)網(wang)場景中(zhong),只要(yao)指定(ding)聯(lian)網(wang)設備(bei)數量,數據(ju)采集(ji)頻(pin)次,系統(tong)所需(xu)(xu)要(yao)的(de)(de)流量是(shi)可較為(wei)準確(que)估算(suan)出來的(de)(de),不(bu)像(xiang)雙11,電商的(de)(de)流量可以幾十倍的(de)(de)變化,而(er)物(wu)聯(lian)網(wang)的(de)(de)流量是(shi)較為(wei)平(ping)穩的(de)(de)。同時(shi),物(wu)聯(lian)網(wang)設備(bei)都有一(yi)(yi)定(ding)的(de)(de)數據(ju)緩存(cun)能力,以防(fang)止網(wang)絡連接失敗,因此物(wu)聯(lian)網(wang)平(ping)臺(tai)對消(xiao)息隊(dui)列的(de)(de)需(xu)(xu)求沒(mei)有那么(me)強烈(lie)。TDengine內部(bu)實現了一(yi)(yi)簡單的(de)(de)消(xiao)息隊(dui)列,同時(shi)提供訂閱功能,這樣就不(bu)需(xu)(xu)要(yao)使用Kafka等(deng)類(lei)似的(de)(de)消(xiao)息隊(dui)列軟件。
TDengine對(dui)數(shu)(shu)據(ju)庫分(fen)配了固定(ding)的(de)(de)(de)內(nei)存(cun)區域,新插入的(de)(de)(de)數(shu)(shu)據(ju),會(hui)先(xian)寫入內(nei)存(cun)。內(nei)存(cun)按照(zhao)先(xian)進(jin)先(xian)出(chu)的(de)(de)(de)原則進(jin)行管理,內(nei)存(cun)不足(zu)時,老(lao)的(de)(de)(de)數(shu)(shu)據(ju)會(hui)被持久化存(cun)儲,而內(nei)存(cun)里(li)的(de)(de)(de)老(lao)數(shu)(shu)據(ju)會(hui)被最新的(de)(de)(de)覆蓋掉(diao)。TDengine還保(bao)證(zheng)了任何一臺(tai)設備最后一條記錄一定(ding)在內(nei)存(cun)中(zhong),如果應用(yong)要(yao)獲取(qu)每個設備的(de)(de)(de)最新數(shu)(shu)據(ju)或狀態,都將(jiang)從內(nei)存(cun)里(li)直接獲取(qu),這樣(yang)的(de)(de)(de)設計(ji)讓系統可(ke)以不再需要(yao)Redis這類軟件。
物(wu)聯網(wang)(wang)數據是一個流(liu)數據,基于(yu)滑動窗口,TDengine后(hou)臺(tai)定時(shi)的拉起查(cha)詢(xun)計(ji)算(suan),提(ti)供了(le)一簡化的流(liu)式(shi)計(ji)算(suan),可以做各種實時(shi)的統計(ji)聚(ju)合操作,這樣對于(yu)一般的物(wu)聯網(wang)(wang)場景(jing),不再需要使(shi)用Spark等類型的流(liu)式(shi)計(ji)算(suan)軟件。
因此TDengine提(ti)供了大數(shu)據(ju)(ju)處(chu)理所需要的數(shu)據(ju)(ju)庫、緩(huan)存(cun)、消息隊列(lie)、流式計算等系列(lie)功(gong)能。使用TDengine,在物(wu)聯網大數(shu)據(ju)(ju)平(ping)臺(tai)中完全(quan)可以拋棄掉Kafka、HDFS、HBase、Spark和Redis等軟件,大幅簡化大數(shu)據(ju)(ju)平(ping)臺(tai)的設計,降低研發成本(ben)大,而且系統將更加健(jian)壯(zhuang),數(shu)據(ju)(ju)的一致性更有保證。
4: 強大的歷史數據分析能力:
TDengine設計上讓用(yong)(yong)戶對(dui)歷史(shi)數(shu)(shu)據(ju)和實時(shi)(shi)數(shu)(shu)據(ju)的(de)(de)處理完全透明,不(bu)區(qu)分歷史(shi)數(shu)(shu)據(ju)和實時(shi)(shi)數(shu)(shu)據(ju)。用(yong)(yong)戶只需要(yao)在SQL語句(ju)里(li)指定(ding)時(shi)(shi)間段,TDengine自動決定(ding)是(shi)否從(cong)(cong)內存(cun)(cun)、從(cong)(cong)本地硬(ying)盤,還是(shi)從(cong)(cong)網絡存(cun)(cun)儲上獲取數(shu)(shu)據(ju),這樣(yang)應用(yong)(yong)的(de)(de)實現變的(de)(de)簡(jian)單。
每(mei)個設備的(de)數據(ju)按塊(kuai)存(cun)儲(chu),而且每(mei)個數據(ju)塊(kuai)都(dou)已經做(zuo)了預聚合(比(bi)如和、最大(da)、最小值等),這樣執行(xing)一(yi)個設備一(yi)個時間段的(de)各(ge)種統計(ji)操作,有(you)可(ke)能(neng)不用掃描原始(shi)數據(ju),就能(neng)計(ji)算出來,性(xing)能(neng)大(da)幅提升。即使有(you)的(de)計(ji)算需(xu)要(yao)掃描原始(shi)數據(ju),但(dan)由于(yu)數據(ju)是(shi)一(yi)塊(kuai)一(yi)塊(kuai)連續存(cun)儲(chu)的(de),讀取速度遠超通用數據(ju)庫,計(ji)算分(fen)析(xi)(xi)速度也是(shi)大(da)幅提升。而且由于(yu)結構(gou)化(hua)存(cun)儲(chu),解壓后,不用做(zuo)任何解析(xi)(xi),讀進內存(cun)就可(ke)以直接計(ji)算,相對于(yu)NoSQL數據(ju)庫,計(ji)算分(fen)析(xi)(xi)速度也是(shi)大(da)幅提升。
TDengine定義了一(yi)(yi)新的(de)(de)(de)概念——超級表(STable),用(yong)以(yi)(yi)描(miao)述同一(yi)(yi)類型(xing)的(de)(de)(de)設(she)備(bei)。給每個設(she)備(bei)或表打(da)上靜態(tai)標簽后(hou),就可(ke)以(yi)(yi)用(yong)標簽值篩出(chu)一(yi)(yi)部分(fen)滿(man)足過濾條(tiao)件(jian)的(de)(de)(de)設(she)備(bei),然后(hou)對這(zhe)一(yi)(yi)部分(fen)設(she)備(bei)的(de)(de)(de)數(shu)據進行聚合。TDengine還設(she)計了一(yi)(yi)特殊的(de)(de)(de)機制,對于多個設(she)備(bei)數(shu)據聚合,僅(jin)(jin)僅(jin)(jin)需要掃描(miao)一(yi)(yi)次數(shu)據文件(jian),這(zhe)樣大幅(fu)減少IO操作次數(shu),提高(gao)聚合計算速度。為提高(gao)易用(yong)性,用(yong)戶可(ke)以(yi)(yi)通過TDengine自帶的(de)(de)(de)shell,或者Python、R、Matlab等工(gong)具直接(jie)進行各種Ad Hoc的(de)(de)(de)查詢或分(fen)析。TDengine用(yong)來做物聯網、車聯網、工(gong)業互聯網的(de)(de)(de)數(shu)據倉庫,會是一(yi)(yi)個理想(xiang)的(de)(de)(de)選擇。
5: 零運維管理,零學習成本
TDengine 安裝包不到10M,下載(zai)、安裝幾秒鐘搞(gao)定。對于企業版,把一臺機器加入集群一條命(ming)令就能完成,而且數據庫(ku)是(shi)實(shi)時(shi)自(zi)動(dong)(dong)備(bei)份,不用(yong)手動(dong)(dong)分(fen)(fen)庫(ku)分(fen)(fen)表,運維極其(qi)簡單。系統使用(yong)標準的(de)SQL,支(zhi)持C/C++、Java、Python和(he)Go等(deng)各種(zhong)語言開(kai)發接口,支(zhi)持JDBC,支(zhi)持RESTful接口。使用(yong)起來象(xiang)是(shi)在使用(yong)MySQL,幾乎不需要學(xue)習(xi)成本。
6: 與第三方工具無縫集成
目前TDengine在數據采集側,已經(jing)支持(chi)Telegraf、Kafka,后(hou)續還將支持(chi)MQTT、OPC等。在應用側,已經(jing)支持(chi)Grafana可視化(hua)工(gong)(gong)具(ju),支持(chi)Matlab、R以(yi)及(ji)一(yi)些BI工(gong)(gong)具(ju)。因為TDengine支持(chi)JDBC接口(kou),很容易實現與第三方工(gong)(gong)具(ju)的接口(kou),可以(yi)預見,更多的工(gong)(gong)具(ju)將會被無縫(feng)集成。
對于運(yun)維監測(ce)場景,不用寫任何(he)代(dai)碼,只要將開(kai)源(yuan)的Telegraf、Grafana與TDengine配(pei)置好(hao),就可(ke)以迅速搭建一個高效的運(yun)維監測(ce)平臺。
7: 開源
TDengine由北京濤(tao)思數(shu)據技術(shu)有(you)(you)限公司自主(zhu)開(kai)發,沒有(you)(you)依賴任(ren)何第三方軟(ruan)件(jian)。研發時間(jian)已經(jing)超過(guo)2年,而且已經(jing)有(you)(you)一批付費商業(ye)客戶,涉及電力、數(shu)控機床、智慧城市、車輛網等多個領域,客戶的(de)(de)使用反饋(kui)都(dou)很不錯。可喜(xi)的(de)(de)是,濤(tao)思數(shu)據將TDengine的(de)(de)核心存儲、計算引擎完全開(kai)源(yuan)(yuan)。TDengine的(de)(de)社區版(ban)完全能滿足一定(ding)規(gui)模的(de)(de)物聯網、車聯網、工(gong)業(ye)互聯網的(de)(de)應用需(xu)求。因為濤(tao)思數(shu)據核心團隊就(jiu)在(zai)北京,相比其(qi)他(ta)開(kai)源(yuan)(yuan)軟(ruan)件(jian),應該(gai)能夠給(gei)中國(guo)的(de)(de)軟(ruan)件(jian)工(gong)程師(shi)提供(gong)更好的(de)(de)本地服務。
結語
TDengine在易用性、功能(neng)上(shang)、性能(neng)上(shang)已經遠超(chao)其他時序數(shu)據(ju)庫。采用TDengine,物聯網(wang)、工業互聯網(wang)、運維監測的大數(shu)據(ju)平臺的搭建變得極(ji)為簡單,具備(bei)超(chao)強性能(neng),不僅降低硬件(jian)成(cheng)本(ben)、運維成(cheng)本(ben),還能(neng)大幅降低對研(yan)發和運維人員的需求。
因為是開源免費的,而且(qie)安裝包非常(chang)小,不妨(fang)訪問(wen)tdengine.com下載(zai)一個試試。


























