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

TDengine在智慧排水系統中的應用介紹

鼎藍水務 朱佳偉

2020-02-12 / ,

小T導讀:鼎藍水務(wu)是一(yi)家致力(li)于城市水環(huan)(huan)境(jing)綜合整治與規劃(hua)的(de)專業環(huan)(huan)境(jing)服務(wu)公司,為國家高新技術(shu)(shu)認證企業。公司創立于2005年,為國內(nei)最早(zao)從事城市排水管網(wang)運(yun)維(wei)技術(shu)(shu)和裝備引進、推廣及實踐的(de)技術(shu)(shu)型企業。如今(jin)鼎藍水務(wu)精耕細作十余年,已發展(zhan)成為集規劃(hua)咨詢、裝備制(zhi)造、技術(shu)(shu)研發、系統集成和運(yun)營維(wei)護全流程個性(xing)化菜單式服務(wu)的(de)智(zhi)慧水務(wu)企業。

業務場景

智(zhi)慧排水系統中需(xu)要(yao)對排水設(she)備中的液位(wei)進行監測。通(tong)(tong)常會(hui)在被監測區域部署(shu)電(dian)流(liu)液位(wei)傳(chuan)感器(qi)(qi),采集電(dian)流(liu)液位(wei)頻率(lv)。傳(chuan)感器(qi)(qi)采集的信息(xi)通(tong)(tong)過MQTT協議傳(chuan)到網關,網關收集到信息(xi)后(hou)會(hui)定時推送到業務(wu)后(hou)臺(tai)服務(wu),由(you)服務(wu)層來(lai)做數據(ju)存(cun)儲和實時分析。設(she)備運行數據(ju)放(fang)在SQL Server里面,液位(wei)電(dian)流(liu)頻率(lv)等(deng)不重要(yao)又(you)特別多的數據(ju)放(fang)在TDengine Database里面。

智慧排水系統整體處理流程

整個(ge)智慧排水系(xi)統包含數(shu)據采集層(ceng)、數(shu)據傳輸(shu)層(ceng)、數(shu)據平臺層(ceng)和業(ye)務處(chu)理層(ceng)幾(ji)個(ge)模(mo)塊,具體的處(chu)理流(liu)程如下圖所示:

TDengine在智慧排水系統中的應用介紹 - TDengine Database 時序數據庫

在(zai)目前的(de)(de)(de)應用場景(jing)中,海量的(de)(de)(de)數(shu)(shu)據(ju)(ju)(ju)來自攔(lan)蓄盾檢測設備(bei)上報(bao)的(de)(de)(de)數(shu)(shu)據(ju)(ju)(ju)。在(zai)這(zhe)些監測數(shu)(shu)據(ju)(ju)(ju)的(de)(de)(de)處理(li)流(liu)程(cheng)上,數(shu)(shu)據(ju)(ju)(ju)從(cong)(cong)網(wang)關推送(song)過來后會有一個(ge)判斷是否實時(shi)(shi)數(shu)(shu)據(ju)(ju)(ju)。對于(yu)非(fei)實時(shi)(shi)數(shu)(shu)據(ju)(ju)(ju),則會流(liu)經Redis去(qu)重,做報(bao)警判斷然后寫入(ru)SQL Server。對于(yu)實時(shi)(shi)數(shu)(shu)據(ju)(ju)(ju)則直接(jie)寫入(ru)TDengine Database,不需要(yao)再經過Redis。之后前端(duan)需要(yao)的(de)(de)(de)一些類似液位電流(liu)數(shu)(shu)據(ju)(ju)(ju)等就可以直接(jie)從(cong)(cong)TDengine訪(fang)問。在(zai)這(zhe)之前,所(suo)有數(shu)(shu)據(ju)(ju)(ju)都是使用SQL Server存(cun)儲,發現(xian)數(shu)(shu)據(ju)(ju)(ju)量達(da)到(dao)2000萬后SQL Server的(de)(de)(de)查(cha)詢(xun)時(shi)(shi)延(yan)已(yi)經非(fei)常慢,不得不做分庫分表操作來提高查(cha)詢(xun)速(su)度,但這(zhe)個(ge)解決方法遇到(dao)跨庫跨表的(de)(de)(de)查(cha)詢(xun)非(fei)常不便。

TDengine中的數據建模

TDengine是一個專門為物聯網結構化數據流設計的時序數據庫(Time-Series Database),其(qi)建(jian)庫、建(jian)表(biao)的(de)思路與關系庫完全不同(tong),遵循一(yi)個數(shu)據(ju)流隔離的(de)原則。物聯網設備(bei)產(chan)(chan)生的(de)數(shu)據(ju)是按照時(shi)(shi)間(jian)順序產(chan)(chan)生的(de)數(shu)據(ju)流。在智(zhi)慧排水(shui)系統(tong),我(wo)們(men)往往關心某一(yi)個液位(wei)計在一(yi)段(duan)時(shi)(shi)間(jian)范圍(wei)內的(de)變化趨勢或最(zui)大、最(zui)小值這些統(tong)計量。

用關系型數(shu)(shu)據(ju)庫比如SQL Server存儲時(shi)序(xu)數(shu)(shu)據(ju)時(shi),做法通常是所有(you)同類設備的(de)數(shu)(shu)據(ju)都進(jin)同一張(zhang)表(biao),每(mei)條記錄會包含設備ID、數(shu)(shu)據(ju)采集(或入(ru)庫)時(shi)間戳(chuo)、采集到的(de)值(zhi),并按照(zhao)時(shi)間范圍來分表(biao)提速。

這(zhe)種做(zuo)法的弊端在于(yu)查(cha)詢(xun)麻煩(fan)且(qie)效率(lv)低(di)。從關(guan)系型(xing)數據庫中查(cha)詢(xun)某一個設備(bei)的數據,就需要通過(guo)設備(bei)ID把其(qi)他設備(bei)的數據從大表中過(guo)濾(lv)掉(diao),且(qie)每查(cha)詢(xun)一個設備(bei),就要面臨過(guo)濾(lv)其(qi)他設備(bei)數據的開銷。

TDengine的(de)設計思路是一個數據(ju)源(設備)一個表,每(mei)個數據(ju)源按照時(shi)間順序產生的(de)消息流可以流入一個表中,不與其他(ta)數據(ju)流混合。表的(de)主鍵是數據(ju)記錄采集或入庫的(de)時(shi)間戳,其他(ta)字段(duan)是采集的(de)值。

這樣(yang)在TDengine中查詢某個(ge)設備的(de)指定時(shi)間段數據時(shi),查詢就(jiu)簡化為(wei)找(zhao)到該(gai)設備的(de)表并(bing)按照主鍵(時(shi)間戳)過濾(lv)搜索數據記錄,效(xiao)率(lv)大大提升(sheng)。

此外,在(zai)TDengine中,我們為了(le)方便(bian)管理設備(bei)的靜態信息,也創建了(le)超(chao)級表,并將設備(bei)ID和分組等作為標簽(qian)定(ding)義(yi)好。

具體到(dao)我(wo)們的(de)場景(jing)中,我(wo)們的(de)建(jian)庫(ku)、建(jian)表思路如下(xia):

  • 數據庫

數(shu)據(ju)(ju)庫創建主(zhu)要依據(ju)(ju)業務模塊來,把泵站、泵閘等(deng)上報(bao)數(shu)據(ju)(ju)分開(kai)存(cun)儲。

             name              |     created time     |  ntables  |  vgroups  |replica| days  |  keep1,keep2,keep(D)   |  tables   |   rows    | cache(b)  |      ablocks       |tblocks| ctime(s)  | clog | comp |time precision|  status  |
==============================================================================================================================================================================================================================================
log                             | 19-09-06 10:36:33.888|          3|          1|      1|     10|30,30,30                |         32|       1024|       2048|             2.00000|     32|       3600|     1|     2|us            |ready     |
hgm                             | 19-09-08 22:42:58.873|         12|          1|      1|     10|3650,3650,3650          |       1000|       4096|      16384|             4.00000|    100|       3600|     1|     2|ms            |ready     |
jlj                             | 19-09-08 23:01:12.251|         17|          1|      1|     10|3650,3650,3650          |       1000|       4096|      16384|             4.00000|    100|       3600|     1|     2|ms            |ready     |
bengzhan                        | 19-09-08 23:01:21.895|         93|          1|      1|     10|3650,3650,3650          |       1000|       4096|      16384|             4.00000|    100|       3600|     1|     2|ms            |ready     |
bengzha                         | 19-09-08 23:01:29.272|         15|          1|      1|     10|3650,3650,3650          |       1000|       4096|      16384|             4.00000|    100|       3600|     1|     2|ms            |ready     |
|ready  </font>
  • 超級表

超(chao)級表的結構(gou)非常簡單,采(cai)集字(zi)段就是時間戳ts和采(cai)集值val。但此處定義了兩(liang)個標簽,用于描述具體的點位靜(jing)態信息。

taos> describe rtdata;
                             Field                              |      Type      |  Length   |  Note  |
=======================================================================================================
ts                                                              |TIMESTAMP       |          8|        |
val                                                             |FLOAT           |          4|        |
sncode                                                          |BINARY          |         20|tag     |
pointcode                                                       |BINARY          |         10|tag     |
taos> show stables;
                              name                              |     created time     |columns| tags  |  tables   |
====================================================================================================================
rtdata                                                          | 19-09-09 18:15:42.243|      2|      2|         12|
  • 普通表
taos> show tables;
                           table_name                           |     created time     |columns|                             stable                             |
=================================================================================================================================================================
sch_8_n_level                                                   | 19-09-09 18:24:22.655|      2|rtdata                                                          |
sch_7_n_level                                                   | 19-09-09 18:24:22.620|      2|rtdata                                                          |
sch_6_n_level                                                   | 19-09-09 18:24:22.585|      2|rtdata                                                          |
sch_29_n_level                                                  | 19-10-30 11:35:01.292|      2|rtdata                                                          |
sch_5_n_level                                                   | 19-09-09 18:24:22.550|      2|rtdata                                                          |
sch_4_n_level                                                   | 19-09-09 18:24:22.514|      2|rtdata                                                          |
sch_30_n_level                                                  | 19-10-29 14:54:53.446|      2|rtdata                                                          |
sch_3_n_level                                                   | 19-09-09 18:24:22.479|      2|rtdata                                                          |
sch_2_n_level                                                   | 19-09-09 18:24:22.442|      2|rtdata                                                          |
sch_10_n_level                                                  | 19-09-09 18:24:25.338|      2|rtdata                                                          |
sch_1_n_level                                                   | 19-09-09 18:24:22.408|      2|rtdata                                                          |
sch_9_n_level                                                   | 19-09-09 18:24:22.691|      2|rtdata                                                          |

TDengine的優勢

高寫入速度

用下來感受是(shi)TDengine的(de)數(shu)據寫(xie)入性能非(fei)常高。現在的(de)接(jie)入網(wang)關的(de)設備數(shu)是(shi)23個(ge)(ge)液位9個(ge)(ge)頻(pin)率計9個(ge)(ge)電流計。總共10個(ge)(ge)攔蓄盾、3個(ge)(ge)泵站。3個(ge)(ge)截留井。 1個(ge)(ge)泵閘,總共有(you)40張(zhang)表(biao)(biao),每張(zhang)表(biao)(biao)每天新增(zeng)6萬(wan)條數(shu)據,現在每張(zhang)表(biao)(biao)的(de)大約三百萬(wan)條數(shu)據。使(shi)用TDengine帶來的(de)最大好處是(shi)不(bu)用再考慮SQLServer中的(de)分(fen)(fen)庫分(fen)(fen)表(biao)(biao)操作(zuo),數(shu)據不(bu)斷寫(xie)入一個(ge)(ge)月后,查(cha)詢時延也沒有(you)增(zeng)加(jia)。

降采樣查詢

TDengine為監(jian)控設備數據分析提供了一個(ge)非常有(you)用的(de)功能(neng) — interval,即按照時間(jian)窗口進行降采(cai)樣。比(bi)如(ru)在(zai)排水系(xi)統中,我們往(wang)往(wang)要計算攔蓄(xu)盾每隔20分鐘液(ye)位(wei)值,這種分析可以簡單(dan)由下面這個(ge)SQL語(yu)句實現。

select avg(val) from sch_3_n_level where ts > '2019-10-15 00:00:00' and ts < '2019-11-15 00:00:00' interval(20M);

最新數據顯示

在現在的(de)監測系統(tong)中(zhong),需要大(da)屏(ping)實時顯示液(ye)位計的(de)最新讀數。這(zhe)里(li)正好用上(shang)TDengine自帶(dai)的(de)緩存(cun)功能。TDengine為每張表在內存(cun)中(zhong)分(fen)配了(le)一定的(de)緩存(cun)空間(jian),來(lai)存(cun)儲最熱的(de)記錄(lu),實時查(cha)詢(xun)效率非常高。查(cha)詢(xun)語法(fa)用到了(le)last和last_row。

select last_row(*) from rtdata group by sncode;

進而用VUE和hightopo的(de)(de)構建(jian)組態可視(shi)化(hua)界面,實時顯示最(zui)新液(ye)位數據。網關輸出(chu)最(zui)新液(ye)位,后端(duan)推送給(gei)前端(duan),三維頁面用hightopo展示液(ye)位。做出(chu)來的(de)(de)效果也是非常酷的(de)(de)。

TDengine在智慧排水系統中的應用介紹 - TDengine Database 時序數據庫
TDengine在智慧排水系統中的應用介紹 - TDengine Database 時序數據庫

低內存、高壓縮比

在使用中,發(fa)現TDengine處理13個設備、百(bai)萬量(liang)級的數據量(liang)的寫入任務,內(nei)(nei)存(cun)開銷(xiao)只有1.5GB。查(cha)詢(xun)時,內(nei)(nei)存(cun)增長(chang)覺察不出來(lai)。整體內(nei)(nei)存(cun)開銷(xiao)比SQLServer降低了50%。

在數(shu)(shu)據(ju)(ju)落盤后,查看/var/lib/taos下的(de)(de)數(shu)(shu)據(ju)(ju)文(wen)件大(da)小,原(yuan)來5GB的(de)(de)原(yuan)始數(shu)(shu)據(ju)(ju),經TDengine壓縮后只有80MB,壓縮比為1.6%。

未來的展望

整體來講,TDengine Database對于處理高頻采集的結構化時序數(shu)據吞吐(tu)量、資源開銷和壓縮都非常優秀。但目前TDengine還不能(neng)(neng)像Redis那樣(yang)做去重以及報警,這塊后(hou)面(mian)也(ye)(ye)會(hui)嘗試使(shi)用TDengine自帶(dai)的流式計算和訂閱來嘗試實現報警,看(kan)能(neng)(neng)否(fou)進一步簡化架(jia)構省(sheng)掉Redis和SQL Server的工作。希望TDengine官方也(ye)(ye)能(neng)(neng)在這方面(mian)有更多(duo)支持(chi),能(neng)(neng)越來越棒!

作者簡介:朱佳偉(wei),鼎藍水務高(gao)級全(quan)棧研發工程師,開源社區愛好者(zhe),目(mu)前主要負責(ze)鼎藍水務智慧排水系統中(zhong)水位實時監(jian)測(ce)系統的開發與(yu)維護。

原文首發于: