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

TDengine在智慧城市大數據管理系統中的應用實踐

廣聯達 王碧波

2020-03-12 / ,

小T導讀:廣聯(lian)達(da)立足建(jian)筑產業,圍繞工(gong)程項目的全(quan)生命周期(qi),是提供以建(jian)設工(gong)程領域專業應用為(wei)核(he)心基礎支(zhi)撐(cheng),以產業大數據、產業新(xin)金融(rong)等為(wei)增值(zhi)服(fu)務的平臺服(fu)務商。廣聯(lian)達(da)科技股份有(you)限公司數字城市BU在TDengine Database推出1.0版本時就開始試(shi)用TDengine系統。

?TDengine應用場景

1.1 業務場景

廣聯達科技股(gu)份有(you)限公司數(shu)字城市BU在TDengine Database推出1.0版本時就(jiu)開始試用(yong)TDengine系(xi)統,主要用(yong)于(yu)建(jian)設(she)工程(cheng)項目(mu)的(de)(de)工地物(wu)聯網數(shu)據(ju)和(he)城市運(yun)營管(guan)(guan)理過程(cheng)中的(de)(de)設(she)備監測物(wu)聯網數(shu)據(ju)的(de)(de)存儲(chu)和(he)管(guan)(guan)理,應(ying)用(yong)于(yu)智(zhi)慧(hui)城市、智(zhi)慧(hui)工地的(de)(de)系(xi)統中,具(ju)體(ti)包含城市交(jiao)通、照明、環境(jing)監測、給排水、燃氣監測、停車場以及工地環境(jing)質(zhi)量監測,在智(zhi)慧(hui)城市的(de)(de)交(jiao)通、城管(guan)(guan)、能(neng)源監測管(guan)(guan)理、生命線(xian)安全監控、施工環境(jing)等(deng)領(ling)域提(ti)供智(zhi)能(neng)化管(guan)(guan)理依(yi)據(ju)。

系(xi)統整體的架構如下圖所示,通(tong)過廣(guang)聯(lian)達自研的IoT平(ping)(ping)臺接(jie)入(ru)物聯(lian)網設(she)備(bei)采集的時序數據(ju),數據(ju)上報后放入(ru)TDengine物聯(lian)網大數據(ju)平(ping)(ping)臺,在此(ci)平(ping)(ping)臺上再進一步做各種(zhong)業務(wu)相(xiang)關的應用層開發(fa)。

TDengine在智慧城市大數據管理系統中的應用實踐 - TDengine Database 時序數據庫

1.2  時序數據類型及規模

在某新區智慧城市大數(shu)據(ju)(ju)管理(li)系統中(zhong),使用TDengine Database來存(cun)儲(chu)各類終端設備(bei)的采集數(shu)據(ju)(ju),比(bi)如智能燈桿(gan)上(shang)照明情況、用電情況,供水(shui)壓力流量數(shu)據(ju)(ju)、燃氣(qi)壓力、可燃氣(qi)體泄(xie)露、污(wu)水(shui)排(pai)污(wu)成分數(shu)據(ju)(ju)、環境監測設備(bei)上(shang)的PM2.5、 PM10等信息,停車場通(tong)行數(shu)據(ju)(ju)等結構化時(shi)序數(shu)據(ju)(ju)等。

目(mu)前系統上(shang)存在(zai)(zai)3000+的(de)監(jian)測設(she)(she)備,每日(ri)新增(zeng)的(de)監(jian)測數(shu)據量(liang)(liang)約(yue)在(zai)(zai)2620MB。如果按照此類設(she)(she)備的(de)增(zeng)量(liang)(liang),后面會達到十萬個監(jian)測設(she)(she)備,每日(ri)數(shu)據增(zeng)量(liang)(liang)應該在(zai)(zai)80GB左右。

?1.3 數據模型的設計

在(zai)流數據(ju)(ju)的(de)(de)(de)(de)時(shi)(shi)序(xu)數據(ju)(ju)模(mo)(mo)型中(zhong),主要(yao)包括兩(liang)(liang)部分(fen)模(mo)(mo)型:運行(xing)狀態(tai)監測值與運行(xing)狀態(tai)錯誤/報警值,兩(liang)(liang)者都是設(she)備運行(xing)時(shi)(shi)按照(zhao)時(shi)(shi)間順(shun)序(xu)產(chan)生的(de)(de)(de)(de)數據(ju)(ju)。在(zai)設(she)計過程中(zhong),考慮到(dao)運行(xing)狀態(tai)中(zhong)的(de)(de)(de)(de)監測值本身的(de)(de)(de)(de)數據(ju)(ju)和(he)類型都取決于設(she)備模(mo)(mo)型本身能夠(gou)提供的(de)(de)(de)(de)監測數據(ju)(ju)類型和(he)數量;而報警信息是通(tong)過規則引擎(qing)計算觸發(fa)之(zhi)后,生成的(de)(de)(de)(de)具有(you)一定業(ye)務標識(shi)信息的(de)(de)(de)(de)數據(ju)(ju)。基于兩(liang)(liang)種數據(ju)(ju)的(de)(de)(de)(de)來源和(he)產(chan)生原理,對兩(liang)(liang)種時(shi)(shi)序(xu)數據(ju)(ju)的(de)(de)(de)(de)存儲進行(xing)了(le)分(fen)別處理。具體處理方式如下。

1)運行狀態監測值–時序數據(ju)

環境(jing)監測的狀態(tai)監測數(shu)據樣例(li)如下:

{"uuid":"012126","pm25":14.3,"pm10":18.9,"pa":100740.0,"temp":28.0,"rshi":86.4,"wind_speed":1.7,"wind_direction":157.5,"noise":77.2,"time":20190702180330}
{"uuid":"018181","pm25":20.2,"pm10":21.3,"pa":100740.0,"temp":28.1,"rshi":86.2,"wind_speed":1.62,"wind_direction":157.5,"noise":75.9,"time":20190702180330}

監測(ce)點的(de)運行狀態數據(ju)(ju)取決于監測(ce)點模(mo)(mo)型(xing)(xing)的(de)設(she)置,因此我們在(zai)建立(li)模(mo)(mo)型(xing)(xing)的(de)過程中(zhong),解析模(mo)(mo)型(xing)(xing)信息(xi),在(zai)TDengine Database中(zhong)建立(li)了與設(she)備模(mo)(mo)型(xing)(xing)監測(ce)數據(ju)(ju)匹配(pei)的(de)超級(ji)表(STable),并(bing)且(qie)根據(ju)(ju)相關業務需求,建立(li)了常用(yong)查(cha)詢維度的(de)Tag信息(xi),為該類型(xing)(xing)下(xia)設(she)備監測(ce)信息(xi)傳入存儲(chu)做好準備。

TDengine在智慧城市大數據管理系統中的應用實踐 - TDengine Database 時序數據庫

2)運行狀(zhuang)態(tai)錯誤/報警值–時序數據

環(huan)境監(jian)測的狀態報警數據樣例如(ru)下:

{"uuid":"018181","item":"noise","value":75.9,"alarm":"true","level":"2","time":20190702180330}
{"uuid":"012126","item":"noise","value":77.2,"alarm":"true","level":"2","time":20190702180330}

監測設(she)備的報警(jing)信息,按照(zhao)相關業務需求,統(tong)一處理為一類(lei)報警(jing)信息數據(ju),因此在系統(tong)中設(she)計了一套針對報警(jing)信息存儲(chu)的超(chao)級表,所有(you)設(she)備的報警(jing)信息都依(yi)照(zhao)該超(chao)級表的模(mo)型(xing)結構,進行(xing)保存。同樣建(jian)立了常用查詢維度的Tag信息。

TDengine在智慧城市大數據管理系統中的應用實踐 - TDengine Database 時序數據庫

選擇TDengine的理由

2.1 TDengine對業務性能需求的滿足和提升

物(wu)聯(lian)(lian)網應用(yong)系統中(zhong)對(dui)數(shu)據(ju)的(de)查(cha)詢需求多樣且(qie)復雜,此前的(de)實現方案(an)都是借助于如HBase生態(tai)中(zhong)的(de)各種組件進行(xing)數(shu)據(ju)的(de)存(cun)儲和(he)查(cha)詢。在流處理(li)過程中(zhong),更多采用(yong)Spark Streaming,或者Storm來進行(xing)實時處理(li)查(cha)詢等,由于TDengine相(xiang)對(dui)于前者使用(yong)的(de)各種重(zhong)型組件來說,在部署(shu)維護、入門(men)、數(shu)據(ju)遷移(yi)、學習使用(yong)上都有先(xian)天性的(de)優(you)勢,因此在部署(shu)物(wu)聯(lian)(lian)網數(shu)據(ju)存(cun)儲平臺過程中(zhong),結合實際業務(wu)中(zhong)的(de)數(shu)據(ju)查(cha)詢需要(yao),我們首(shou)選了(le)TDngine實現。

1)窗口(kou)查詢       

物聯(lian)網時序數據的(de)一個(ge)典(dian)型(xing)查(cha)詢(xun)應用就是窗口查(cha)詢(xun),而(er)在傳統解決(jue)方(fang)案中,不是實(shi)(shi)(shi)現窗口查(cha)詢(xun)的(de)方(fang)式難以落地,就是數據查(cha)詢(xun)效(xiao)(xiao)率不能(neng)接受(shou)。在HBase中是通(tong)(tong)過(guo)(guo)各種匯聚來實(shi)(shi)(shi)現查(cha)詢(xun),效(xiao)(xiao)率難以保證(zheng);Spark Streaming的(de)查(cha)詢(xun)處(chu)理雖然(ran)可以通(tong)(tong)過(guo)(guo)SQL來實(shi)(shi)(shi)現,但(dan)是對于窗口函數的(de)定義和讀取晦澀冗長。在TDengine中,可以通(tong)(tong)過(guo)(guo)一個(ge)SQL語句直接實(shi)(shi)(shi)現,也可以通(tong)(tong)過(guo)(guo)API直接獲取。在Spark Streaming中四五十行的(de)邏(luo)輯,在TDengine的(de)API中,調用五行即可達到(dao)目的(de)。

2)連續查詢(xun)       

連續查(cha)詢(xun),通(tong)過(guo)interval()函(han)數(shu)在TDengine中周期性(xing)進行(xing)(xing)聚合(he)計算,并(bing)可(ke)直接獲取最新數(shu)據,對實(shi)際(ji)業務中的(de)定(ding)時查(cha)詢(xun)實(shi)現很有幫助,避免了進行(xing)(xing)起止時間查(cha)詢(xun)的(de)方(fang)式,對功能實(shi)現來說,降低不少(shao)編碼工作。

3)支持標準SQL

TDengine支持標準(zhun)的(de)(de)(de)SQL操作,同時也提供了完備(bei)的(de)(de)(de)JDBC驅動包,對傳統的(de)(de)(de)DBMS工(gong)具組件提供了標準(zhun)支持,因(yin)此,原有基于(yu)Java的(de)(de)(de)業務系統在開(kai)發效率上(shang)完全可以無縫遷移到TDengine中。對于(yu)大(da)屏查詢、報表(biao)工(gong)作等(deng)業務操作,無需進行特定的(de)(de)(de)開(kai)發工(gong)作。

4)標簽維度查詢    ;   

按照業務(wu)常用的(de)查詢(xun)維度,在超(chao)級(ji)表上做不同的(de)Tag,比如基于設備ID、位(wei)置(zhi)描述、型號等信息,契合(he)(he)常用查詢(xun)維度,結(jie)合(he)(he)Tag查詢(xun),直接可(ke)以(yi)對一類設備進(jin)行數(shu)據(ju)篩(shai)選查詢(xun),避免了之前(qian)系統(tong),先查業務(wu)關(guan)系再去(qu)join實際數(shu)據(ju)的(de)過程,邏輯上清(qing)晰,實現上簡單,業務(wu)上便(bian)捷。

2.2 大幅提升時序數據讀寫及流處理性能

對于(yu)省市(shi)級規(gui)模(mo)的(de)(de)(de)(de)(de)智慧城(cheng)市(shi)管理(li)(li)系(xi)統,涉及(ji)的(de)(de)(de)(de)(de)智能(neng)(neng)監測(ce)設(she)備數(shu)(shu)(shu)量(liang)非(fei)常大,對監測(ce)點產生(sheng)(sheng)的(de)(de)(de)(de)(de)時序(xu)數(shu)(shu)(shu)據的(de)(de)(de)(de)(de)讀寫性(xing)(xing)(xing)能(neng)(neng)要(yao)(yao)求(qiu)比較高(gao),并(bing)且針對一些城(cheng)市(shi)生(sheng)(sheng)命線(xian)或(huo)危(wei)險源相關的(de)(de)(de)(de)(de)設(she)備監測(ce)數(shu)(shu)(shu)據的(de)(de)(de)(de)(de)實(shi)時流(liu)數(shu)(shu)(shu)據處(chu)(chu)理(li)(li)性(xing)(xing)(xing)能(neng)(neng)要(yao)(yao)求(qiu)也很高(gao),比如設(she)備報警需(xu)要(yao)(yao)基于(yu)不同設(she)備的(de)(de)(de)(de)(de)閥值規(gui)則通過流(liu)處(chu)(chu)理(li)(li)生(sheng)(sheng)成(cheng)報警信(xin)息,其實(shi)時性(xing)(xing)(xing)要(yao)(yao)求(qiu)比較高(gao)。采用(yong)普通關系(xi)型數(shu)(shu)(shu)據庫存儲(chu)的(de)(de)(de)(de)(de)解決方(fang)案很難滿(man)足業務上的(de)(de)(de)(de)(de)性(xing)(xing)(xing)能(neng)(neng)要(yao)(yao)求(qiu),而(er)采用(yong)TDengine的(de)(de)(de)(de)(de)技術方(fang)案,不僅在時序(xu)數(shu)(shu)(shu)據讀寫的(de)(de)(de)(de)(de)性(xing)(xing)(xing)能(neng)(neng)上有大幅(fu)提(ti)升(sheng),而(er)且利用(yong)其針對時序(xu)數(shu)(shu)(shu)據高(gao)性(xing)(xing)(xing)能(neng)(neng)的(de)(de)(de)(de)(de)插入(ru)、查詢、聚合統計(ji)以(yi)及(ji)大規(gui)模(mo)的(de)(de)(de)(de)(de)實(shi)時流(liu)式計(ji)算等功能(neng)(neng),可大大提(ti)升(sheng)基于(yu)業務規(gui)則的(de)(de)(de)(de)(de)流(liu)數(shu)(shu)(shu)據處(chu)(chu)理(li)(li)性(xing)(xing)(xing)能(neng)(neng)。

2.3 節約計算資源和存儲成本

由于(yu)TDengine采用獨(du)特的(de)列式存儲(chu)以(yi)及領先的(de)壓縮算法,其存儲(chu)空間(jian)比一般數(shu)據庫(ku)大(da)(da)大(da)(da)減(jian)少,從而節約了(le)大(da)(da)量(liang)的(de)計(ji)算資源和存儲(chu)成(cheng)(cheng)本,并且從系統安裝(zhuang)到數(shu)據備份、數(shu)據恢復幾乎(hu)都能自動(dong)完(wan)成(cheng)(cheng);擴容、升級等運維操作也能輕松完(wan)成(cheng)(cheng) ,系統的(de)運維成(cheng)(cheng)本也能降低(di)不少。

TDengine應用技巧和經驗

3.1 善用超級表

超級表(STable)作為(wei)TDengine的特色,具備了模板和索引的雙(shuang)重特性功能,結(jie)合Tag查詢以(yi)及(ji)自動生成子表功能,對數據操(cao)作存儲(chu)完全自動化、智(zhi)能化,以(yi)及(ji)在(zai)簡單業(ye)務上更(geng)加靈活。

3.2 善用JDBC工具

由于對SQL的(de)支(zhi)持,TDengine很(hen)容易支(zhi)持JDBC規范(fan)的(de)接(jie)口。我(wo)們在實際開發過(guo)程中,基于Java調用JDBC驅動來(lai)操作TDengine,得益于TDengine的(de)SQL支(zhi)持能力(li)和完備JDBC驅動,我(wo)們用來(lai)開發的(de)JDBC框架和DBClient工具直接(jie)可以進行(xing)工作,Mybatis和DataGrip工具繼續(xu)在數據實現(xian)轉型(xing)中發揮來(lai)巨大的(de)輔助(zhu)作用。

3.3 強大的訂閱機制

在部分實(shi)時性要(yao)求比較(jiao)高的(de)場景下,我(wo)們(men)嘗試使用(yong)到了TDengine的(de)訂(ding)(ding)閱(yue)(yue)(yue)機制,對流(liu)處理中回調功能進(jin)(jin)行補(bu)全加強,訂(ding)(ding)閱(yue)(yue)(yue)了一個SQL的(de)查(cha)詢結果集。目前,對于(yu)流(liu)處理業(ye)務(wu)來說,對符(fu)合固(gu)定邏(luo)輯的(de)數(shu)據獲取(qu),非常(chang)好用(yong),因(yin)此最適合采用(yong)訂(ding)(ding)閱(yue)(yue)(yue)的(de)方式來進(jin)(jin)行邏(luo)輯驅動。目前TDengine中的(de)訂(ding)(ding)閱(yue)(yue)(yue)功能只有C和(he)Java語言端的(de)實(shi)現(在用(yong)1.5.2版(ban)本)。

TDengine應用中遇到的問題

4.1  JDBC驅動并非完美

雖然(ran)目前JDBC驅(qu)動已(yi)經非(fei)常完(wan)備,但是(shi)(shi)偶爾幾個標準(zhun)實現上(shang)會有(you)不(bu)同(tong)(tong)的(de)結果(guo),當(dang)然(ran)這(zhe)些(xie)功能都是(shi)(shi)非(fei)數(shu)(shu)據(ju)接口上(shang)的(de),不(bu)影響正常數(shu)(shu)據(ju)操作。目前發現的(de)有(you):在(zai)DataGrip上(shang)的(de)確認數(shu)(shu)據(ju)庫是(shi)(shi)否存在(zai)的(de)返回值,有(you)不(bu)同(tong)(tong)結果(guo);有(you)些(xie)特定的(de)SQL并不(bu)是(shi)(shi)標準(zhun)類型(xing)(xing),被(bei)IDE回報說(shuo)不(bu)支持的(de)類型(xing)(xing),實際(ji)上(shang)能夠執行成功。

4.2 文檔有待完善,大家多多實踐

目前的(de)文檔一些地方其實不夠(gou)明確,大(da)家需要多(duo)動(dong)手實踐摸索,很多(duo)隱藏(zang)的(de)內容,在(zai)文檔中并未(wei)體(ti)現(xian),多(duo)操作多(duo)嘗試會(hui)有更多(duo)收獲和體(ti)會(hui)。

作者簡介:王碧(bi)波,廣聯(lian)達科技(ji)股份有限公司數字城市數據平(ping)臺(tai)部架構師,從事(shi)IT技(ji)術十余年,參(can)與(yu)過(guo)H2Database、Mybatis、TDengine等(deng)開源項(xiang)目(mu);先(xian)后在百度、易到用車、樹根互聯(lian)工作(zuo),參(can)與(yu)過(guo)應(ying)用云、PaaS、SaaS平(ping)臺(tai)的(de)設計(ji)和(he)(he)(he)研發工作(zuo),對(dui)分(fen)布(bu)式和(he)(he)(he)高性能(neng)計(ji)算有深入研究(jiu),近年來(lai)專注于微(wei)服(fu)務、DevOps、物(wu)聯(lian)網領域的(de)技(ji)術架構設計(ji)和(he)(he)(he)具體實踐(jian)。

本文首發于公眾號: