作者 : 惠州(zhou)工業互(hu)聯網研究院
小T導讀:惠州(zhou)市新(xin)一代(dai)工業(ye)互(hu)聯(lian)(lian)網創新(xin)研究院(yuan)(以下簡稱研究院(yuan))成立(li)于2018年6月,是以部(bu)省(sheng)聯(lian)(lian)動(dong)實施(shi)國(guo)家重(zhong)點研發計劃(hua)“寬帶通信和新(xin)型網絡”重(zhong)點專項為契機,在廣東省(sheng)科技廳和惠州(zhou)市政府的(de)支持下成立(li),立(li)足惠州(zhou)、面向(xiang)廣東、輻(fu)射全國(guo)、聯(lian)(lian)動(dong)國(guo)際的(de)工業(ye)互(hu)聯(lian)(lian)網省(sheng)級科技創新(xin)平臺。
為實現宿(su)舍(she)用(yong)電(dian)的(de)智能(neng)化管理(li)、保(bao)(bao)證(zheng)學(xue)生用(yong)電(dian)的(de)獨立(li)(li)性(xing)和(he)安全性(xing),針對學(xue)校宿(su)舍(she)用(yong)電(dian)的(de)收費,研究院(yuan)打造的(de)智慧用(yong)電(dian)管控系統采用(yong)一室一表一保(bao)(bao)護的(de)方(fang)案,為學(xue)生宿(su)舍(she)配置(zhi)智能(neng)電(dian)能(neng)計(ji)量表計(ji)和(he)用(yong)電(dian)保(bao)(bao)護設備,對每個用(yong)戶的(de)用(yong)電(dian)進行獨立(li)(li)計(ji)量和(he)保(bao)(bao)護。
這套系統通過(guo)互聯網采集所有終(zhong)端的(de)數(shu)據,再由通訊網關將數(shu)據通過(guo)無線組(zu)成(cheng)的(de)專(zhuan)用網絡或局域網將數(shu)據傳輸(shu)至遠程管(guan)理(li)(li)(li)計算(suan)機。系統管(guan)理(li)(li)(li)軟件再對數(shu)據進行存(cun)儲、處理(li)(li)(li),形(xing)成(cheng)學(xue)校后勤管(guan)理(li)(li)(li)方需要的(de)圖形(xing)、文字(zi)等(deng)形(xing)式的(de)文件,以此實現整個學(xue)生宿舍用電的(de)智能化管(guan)理(li)(li)(li)。
在整個系(xi)統(tong)的(de)構建(jian)(jian)中(zhong),令我(wo)們比較頭疼的(de)是關于數(shu)(shu)據(ju)庫的(de)選(xuan)擇(ze),這套用電系(xi)統(tong)會產生(sheng)大量的(de)時序數(shu)(shu)據(ju),在達成基礎的(de)存儲、壓縮和查詢功能需(xu)求(qiu)外,還需(xu)要平(ping)衡(heng)搭建(jian)(jian)、學(xue)習和維護(hu)等(deng)各種成本(ben)。基于此(ci),我(wo)們開始進行數(shu)(shu)據(ju)庫選(xuan)型,以期找到最適(shi)合該用電管控系(xi)統(tong)的(de)數(shu)(shu)據(ju)庫產品(pin)。
從系統架構進行數據庫選型
智(zhi)慧用(yong)(yong)電(dian)管控系統(tong)(tong)采用(yong)(yong)工業互聯網平(ping)臺典型(xing)的(de)(de)端(duan)網邊云系統(tong)(tong)架構,通過物聯系統(tong)(tong)及網關解耦設備與(yu)應(ying)用(yong)(yong)平(ping)臺,加速數據的(de)(de)聚(ju)合與(yu)開放,服務于智(zhi)慧校(xiao)園(yuan)(yuan)安全用(yong)(yong)電(dian)、用(yong)(yong)電(dian)繳費等場景(jing),同時(shi)可支持智(zhi)慧校(xiao)園(yuan)(yuan)其他項目快速接(jie)入需要。下圖為具(ju)體(ti)的(de)(de)架構示意圖:

為了找到(dao)合適的數據庫(ku)產(chan)品,我們(men)先對整(zheng)個系(xi)統架構進行了分析。
在(zai)整體架構(gou)中,該數據庫的數據需要(yao)作為基礎設(she)施的數據存儲,通過校園網絡提供包括物聯系統在(zai)內(nei)的如下數據輸出:
- 工業通信終端:高性能通信網關能同時接入多臺水電氣表及智慧保護開關,支持多種工業協議,能同時解析不同類型設備數據,并能按自設置的上報頻率上報數據到物聯系統服務器。
- 物聯系統:包括設備模型管理、設備管理、項目管理、歷史消息管理、規則引擎等功能,能接入任意物聯網類型設備,可支持智慧校園其他項目快速接入需要。
- 用電系統:實時監測、抄表系統、收費應用、能耗監測、安全管理、系統管理,所有宿舍可以按小時/天/月/季/年顆粒度查詢用電量,電表電閘實時讀數和開關狀態查詢,告警查詢,宿管分權分域管理。
- 收費系統:實現學校公寓宿舍管理,根據校園階梯計費的要求,實現學生階梯計費拆帳算法,生成的帳單由校園宿舍管理人員確認后發布到收費系統進行查詢并繳費,學生繳費后生成繳費歷史清單。
- 大屏展示、Web門戶:通過數字大屏、Web門戶中的Dashboard面板,直觀形象的進行數據展示。
這(zhe)一(yi)整套(tao)系(xi)統(tong)產生的數據(ju)(ju)量(liang)之龐大可(ke)見一(yi)斑,除了存儲外(wai),各種(zhong)查(cha)詢操(cao)作也十分(fen)考驗性(xing)能(neng)優劣,還需要能(neng)夠(gou)快(kuai)速接入其他項目。經過(guo)對(dui)各種(zhong)數據(ju)(ju)庫進行(xing)分(fen)析后,TDengine Database這(zhe)款(kuan)時序(xu)數據(ju)(ju)庫產品浮現在我們(men)眼前,它的很(hen)多特性(xing)非(fei)常符合我們(men)整體架構的設計初衷,也能(neng)夠(gou)完美匹配系(xi)統(tong)的數據(ju)(ju)處理需求:
- 多樣化的數據寫入支持。校園網復雜的系統環境和網絡環境提高了數據寫入的多樣性要求,TDengine支持多種接口寫入數據,包括SQL、Prometheus、Telegraf、collectd、StatsD、EMQ MQTT Broker、HiveMQ Broker、CSV文件等,不僅幫助我們實現了工業終端層的數據寫入,而且部分其他系統的集成數據也得以用更低的成本進行了實施。
- 較低的學習成本。我們的研發團隊是做智慧校園系統的,得益于TDengine運維方便、支持SQL等特性,整個團隊僅用很低的安裝、運維、使用方面的學習成本就完成了基于TDengine系統實施。
- TDengine在整個構架最核心的時序場景的數據讀寫和壓縮率方面,表現優異。智慧校園的工業物聯設備的數據寫入量,不論在種類、數據點、并發數量方面都有極高的要求,而且在大量數據的情況下,寫入數據的壓縮率也非常影響存儲的成本。TDengine滿足了3萬條/秒的寫入速度,并且壓縮率達到了驚人的1/7左右。
- TDengine毫秒級別的數據查詢、基于時間軸的滑動窗口聚合計算等特性,以及查詢結果與Grafana、BI插件等快捷便利地集成,為最終的數據可視化提供了很好的支持。
以上幾點原因,讓我們堅定地選擇了TDengine作為智慧用電管控系統的時序數據庫產品,并開始實(shi)施搭建(jian)。
基于TDengine的建庫、建表思路
作為一個專門為物聯網結構化數據流設計的時序數據庫,TDengine的建庫、建表思路與(yu)關系型(xing)數(shu)據庫完全不(bu)同(tong),其遵循一個數(shu)據流隔離(li)的原則。
物聯網設備產(chan)生的數據是按照時(shi)間順序產(chan)生的數據流,在校園智慧用(yong)(yong)電(dian)管控系統系統,我(wo)們(men)高頻收集宿舍用(yong)(yong)電(dian)數據,一(yi)是用(yong)(yong)來統計每(mei)小時(shi)宿舍用(yong)(yong)電(dian)情(qing)況,二是用(yong)(yong)來判斷宿舍大功率使用(yong)(yong)情(qing)況,及時(shi)發出(chu)大功率電(dian)器使用(yong)(yong)報警(jing)。
這種背景(jing)下,用諸如SQL Server的(de)關系型(xing)數(shu)(shu)(shu)(shu)據(ju)庫來存儲時(shi)序(xu)數(shu)(shu)(shu)(shu)據(ju)時(shi),做法(fa)(fa)通(tong)常是(shi)將所(suo)有同(tong)類設(she)(she)(she)備(bei)(bei)的(de)數(shu)(shu)(shu)(shu)據(ju)都建到同(tong)一(yi)張表中,每條記錄會包含設(she)(she)(she)備(bei)(bei)ID、數(shu)(shu)(shu)(shu)據(ju)采集(或入庫)時(shi)間戳、采集到的(de)值,并按照時(shi)間范圍來分表提速(su)。這種做法(fa)(fa)的(de)弊端在于查(cha)詢(xun)麻煩且低效,從(cong)關系型(xing)數(shu)(shu)(shu)(shu)據(ju)庫中查(cha)詢(xun)某一(yi)個設(she)(she)(she)備(bei)(bei)的(de)數(shu)(shu)(shu)(shu)據(ju)時(shi),還需要(yao)通(tong)過(guo)設(she)(she)(she)備(bei)(bei)ID把其(qi)他(ta)設(she)(she)(she)備(bei)(bei)的(de)數(shu)(shu)(shu)(shu)據(ju)從(cong)大表中過(guo)濾掉,且每查(cha)詢(xun)一(yi)個設(she)(she)(she)備(bei)(bei),就要(yao)面臨過(guo)濾其(qi)他(ta)設(she)(she)(she)備(bei)(bei)數(shu)(shu)(shu)(shu)據(ju)的(de)開(kai)銷。
與關系型數據庫不同,TDengine的設計思路是一個數據源(設備)一張表,每(mei)個數(shu)(shu)據源按照(zhao)時(shi)間(jian)(jian)順(shun)序產生的消息(xi)流可(ke)以流入一個表(biao)中(zhong),不與其他數(shu)(shu)據流混合。表(biao)的主(zhu)鍵(jian)是數(shu)(shu)據記錄(lu)(lu)采(cai)集(ji)或入庫(ku)的時(shi)間(jian)(jian)戳(chuo),其他字段是采(cai)集(ji)的值。這樣在TDengine中(zhong)查詢(xun)某個設(she)備的指定時(shi)間(jian)(jian)段數(shu)(shu)據時(shi),查詢(xun)就簡化為找到該設(she)備的表(biao)并按照(zhao)主(zhu)鍵(jian)(時(shi)間(jian)(jian)戳(chuo))過濾搜索數(shu)(shu)據記錄(lu)(lu),效(xiao)率大幅提升(sheng)。
此外,在TDengine中,我們為了方便管理設備,對不同設備模型創建了不同的超級表,比如電表(biao)模(mo)型是(shi)一個超(chao)級(ji)表(biao),智(zhi)能保護開關是(shi)另一個超(chao)級(ji)表(biao)。
具體到我們的場景中,建庫、建表思路如下:
- 超級表
超級表(biao)的結構非常簡(jian)單,采集字段就是(shi)時間戳ts和采集值(zhi)val。但此處定(ding)義了(le)兩(liang)個標簽,用(yong)于描述具體的點位(wei)靜(jing)態(tai)信(xin)息。



- 普通表



搭載TDengine的效果和優勢
上文中我們(men)講解(jie)了(le)數據庫選型(xing)思路和基于TDengine建庫、建表的思路,那具體TDengine的表現如何呢?下(xia)面為大家一一揭(jie)秘。
- 高寫入速度
現(xian)在我們服務器接入的設備數(shu)是4000多個(ge),包括2000多臺(tai)電(dian)(dian)表和2000臺(tai)智(zhi)能保(bao)護開關(guan),每(mei)臺(tai)電(dian)(dian)表以每(mei)分(fen)鐘(zhong)頻率(lv)采集(ji)一(yi)次(ci)數(shu)據(ju),包括電(dian)(dian)流(liu)、電(dian)(dian)壓、電(dian)(dian)能、有(you)功功率(lv)、無功功率(lv)等(deng)7個(ge)測點(dian)(dian),每(mei)臺(tai)保(bao)護開關(guan)同樣(yang)也以每(mei)分(fen)鐘(zhong)頻率(lv)采集(ji)一(yi)次(ci)數(shu)據(ju),包括智(zhi)能開關(guan)狀態、最近故(gu)障、最近故(gu)障值、當前(qian)故(gu)障狀態、當前(qian)電(dian)(dian)壓值、當前(qian)電(dian)(dian)流(liu)值、當前(qian)漏電(dian)(dian)電(dian)(dian)流(liu)值、過流(liu)次(ci)數(shu)、過壓次(ci)數(shu)、漏電(dian)(dian)次(ci)數(shu)等(deng)10個(ge)測點(dian)(dian)。
目前系統總共有4000多張(zhang)設(she)備(bei)表(biao)(biao),每(mei)(mei)張(zhang)表(biao)(biao)每(mei)(mei)天新增1440條數(shu)據13000個測點,一天新增大約500多萬(wan)條數(shu)據4000萬(wan)個測點,由此可(ke)見(jian)TDengine的寫入性能之高。
此外,使用TDengine帶來的最大好處是不用再考慮SQLServer中的分庫分表操作,即使數據不斷寫入一年,查詢時延也不會增加。
- 低內存、高壓縮比
在(zai)使用中,我們發現TDengine在(zai)處理4000多(duo)個設備(bei)、百萬(wan)量(liang)級的(de)數據(ju)量(liang)的(de)寫入任務時,內存(cun)開銷(xiao)只有1.5GB,進行查詢時,內存(cun)增長也不會有明顯提升。在(zai)數據(ju)落盤后,我們查看了var/lib/taos下的(de)數據(ju)文(wen)件(jian)大小,原來5GB的(de)原始數據(ju),經TDengine壓縮后只有80MB,壓縮比(bi)為1.6%。
- 雙機備份
TDengine還采用(yong)(yong)集(ji)群方(fang)(fang)案做了(le)雙(shuang)機備份,具(ju)體(ti)的(de)方(fang)(fang)案是兩(liang)數據(ju)(ju)(ju)節點、兩(liang)數據(ju)(ju)(ju)副本(ben)的(de)集(ji)群方(fang)(fang)式。這(zhe)一(yi)集(ji)群方(fang)(fang)式,不僅(jin)在(zai)運維底層實現了(le)數據(ju)(ju)(ju)的(de)備份,伴隨著對(dui)TDengine功能的(de)進一(yi)步深入使用(yong)(yong),其去中心(xin)的(de)多數據(ju)(ju)(ju)節點集(ji)群開始作(zuo)用(yong)(yong),使得(de)應用(yong)(yong)可以(yi)對(dui)所有節點進行寫入和(he)讀取,從而得(de)以(yi)有效(xiao)利用(yong)(yong)服務端的(de)資源(yuan),以(yi)數據(ju)(ju)(ju)層提供的(de)高(gao)效(xiao)讀寫速度有效(xiao)提升整個系統的(de)響(xiang)應時間(jian)。
在(zai)剛開始使(shi)用TDengine時,其還沒有雙機熱備份,以集(ji)群方(fang)式在(zai)兩臺(tai)主(zhu)機上使(shi)用時出現了一些問題,在(zai)和濤思數據(ju)(ju)的(de)小伙伴充(chong)分(fen)溝通后(hou),我們通過“充(chong)分(fen)發揮底(di)層數據(ju)(ju)庫的(de)功能,再(zai)進一步優化平臺(tai)的(de)系統(tong)架構”的(de)方(fang)式成(cheng)功解決了此問題。
之后在TDengine雙節點集群方案出爐后,整個系統在很多方面都獲益匪淺:
- 對于在校園網環境服務的整個構架中運作的應用來說,不停機的數據節點擴展保證了穩定的服務。
- 實現了便利的服務能力擴容。服務能力從原來的一臺數據節點硬件資源支撐能力,線性增長為2臺節點的硬件資源支撐能力。
- 穩定可靠的數據備份。數據節點自動對數據副本進行備份,不僅從運維角度上輕松實現了多節點數據備份的效果,而且并沒有對原有節點的運行效率有任何影響。
- 兩節點去中心化集群,提供了數據層兩節點寫入和讀取的支撐能力擴展。
值得一提的是,在TDengine這次單節點升級雙機熱備集群的過程中,通過監控可以看到,對于數據節點增加、減少或者離線時的負載機制,TDengine底層穩定地將計算負載均衡到兩個節點之上,這也為日后隨著接入點和應用的增多而繼續擴充TDengine節點提供了保障。
寫在最后
我們的系統在采用TDengine Database后不僅節省了其他方案搭建集群的費用,而且在寫入速度和查詢性能方面完全滿足了業務的需求。作為一款為物聯網場景設計的時序數據庫,在多設備、采集(ji)頻率高的業務形態(tai)下,TDengine展現出了(le)高性(xing)能(neng)、架構簡(jian)單的優勢,其超級表(biao)的設計也省去了(le)很多聯表(biao)查詢邏輯,極大簡(jian)化了(le)業務層(ceng)的開發工作。


























