六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

TDengine在智慧排水系統(tǒng)中的應(yīng)用介紹

鼎藍(lán)水務(wù) 朱佳偉

2020-02-12 / ,

小T導(dǎo)讀:鼎藍(lán)水務(wù)是一家致力于城市水環(huán)境綜合整治與規(guī)劃的專業(yè)環(huán)境服務(wù)公司,為國(guó)家高新技術(shù)認(rèn)證企業(yè)。公司創(chuàng)立于2005年,為國(guó)內(nèi)最早從事城市排水管網(wǎng)運(yùn)維技術(shù)和裝備引進(jìn)、推廣及實(shí)踐的技術(shù)型企業(yè)。如今鼎藍(lán)水務(wù)精耕細(xì)作十余年,已發(fā)展成為集規(guī)劃咨詢、裝備制造、技術(shù)研發(fā)、系統(tǒng)集成和運(yùn)營(yíng)維護(hù)全流程個(gè)性化菜單式服務(wù)的智慧水務(wù)企業(yè)。

業(yè)務(wù)場(chǎng)景

智慧排水系統(tǒng)中需要對(duì)排水設(shè)備中的液位進(jìn)行監(jiān)測(cè)。通常會(huì)在被監(jiān)測(cè)區(qū)域部署電流液位傳感器,采集電流液位頻率。傳感器采集的信息通過(guò)MQTT協(xié)議傳到網(wǎng)關(guān),網(wǎng)關(guān)收集到信息后會(huì)定時(shí)推送到業(yè)務(wù)后臺(tái)服務(wù),由服務(wù)層來(lái)做數(shù)據(jù)存儲(chǔ)和實(shí)時(shí)分析。設(shè)備運(yùn)行數(shù)據(jù)放在SQL Server里面,液位電流頻率等不重要又特別多的數(shù)據(jù)放在TDengine Database里面。

智慧排水系統(tǒng)整體處理流程

整個(gè)智慧排水系統(tǒng)包含數(shù)據(jù)采集層、數(shù)據(jù)傳輸層、數(shù)據(jù)平臺(tái)層和業(yè)務(wù)處理層幾個(gè)模塊,具體的處理流程如下圖所示:

TDengine在智慧排水系統(tǒng)中的應(yīng)用介紹 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

在目前的應(yīng)用場(chǎng)景中,海量的數(shù)據(jù)來(lái)自攔蓄盾檢測(cè)設(shè)備上報(bào)的數(shù)據(jù)。在這些監(jiān)測(cè)數(shù)據(jù)的處理流程上,數(shù)據(jù)從網(wǎng)關(guān)推送過(guò)來(lái)后會(huì)有一個(gè)判斷是否實(shí)時(shí)數(shù)據(jù)。對(duì)于非實(shí)時(shí)數(shù)據(jù),則會(huì)流經(jīng)Redis去重,做報(bào)警判斷然后寫(xiě)入SQL Server。對(duì)于實(shí)時(shí)數(shù)據(jù)則直接寫(xiě)入TDengine Database,不需要再經(jīng)過(guò)Redis。之后前端需要的一些類似液位電流數(shù)據(jù)等就可以直接從TDengine訪問(wèn)。在這之前,所有數(shù)據(jù)都是使用SQL Server存儲(chǔ),發(fā)現(xiàn)數(shù)據(jù)量達(dá)到2000萬(wàn)后SQL Server的查詢時(shí)延已經(jīng)非常慢,不得不做分庫(kù)分表操作來(lái)提高查詢速度,但這個(gè)解決方法遇到跨庫(kù)跨表的查詢非常不便。

TDengine中的數(shù)據(jù)建模

TDengine是一個(gè)專門(mén)為物聯(lián)網(wǎng)結(jié)構(gòu)化數(shù)據(jù)流設(shè)計(jì)的時(shí)序數(shù)據(jù)庫(kù)(Time-Series Database),其建庫(kù)、建表的思路與關(guān)系庫(kù)完全不同,遵循一個(gè)數(shù)據(jù)流隔離的原則。物聯(lián)網(wǎng)設(shè)備產(chǎn)生的數(shù)據(jù)是按照時(shí)間順序產(chǎn)生的數(shù)據(jù)流。在智慧排水系統(tǒng),我們往往關(guān)心某一個(gè)液位計(jì)在一段時(shí)間范圍內(nèi)的變化趨勢(shì)或最大、最小值這些統(tǒng)計(jì)量。

用關(guān)系型數(shù)據(jù)庫(kù)比如SQL Server存儲(chǔ)時(shí)序數(shù)據(jù)時(shí),做法通常是所有同類設(shè)備的數(shù)據(jù)都進(jìn)同一張表,每條記錄會(huì)包含設(shè)備ID、數(shù)據(jù)采集(或入庫(kù))時(shí)間戳、采集到的值,并按照時(shí)間范圍來(lái)分表提速。

這種做法的弊端在于查詢麻煩且效率低。從關(guān)系型數(shù)據(jù)庫(kù)中查詢某一個(gè)設(shè)備的數(shù)據(jù),就需要通過(guò)設(shè)備ID把其他設(shè)備的數(shù)據(jù)從大表中過(guò)濾掉,且每查詢一個(gè)設(shè)備,就要面臨過(guò)濾其他設(shè)備數(shù)據(jù)的開(kāi)銷。

TDengine的設(shè)計(jì)思路是一個(gè)數(shù)據(jù)源(設(shè)備)一個(gè)表,每個(gè)數(shù)據(jù)源按照時(shí)間順序產(chǎn)生的消息流可以流入一個(gè)表中,不與其他數(shù)據(jù)流混合。表的主鍵是數(shù)據(jù)記錄采集或入庫(kù)的時(shí)間戳,其他字段是采集的值。

這樣在TDengine中查詢某個(gè)設(shè)備的指定時(shí)間段數(shù)據(jù)時(shí),查詢就簡(jiǎn)化為找到該設(shè)備的表并按照主鍵(時(shí)間戳)過(guò)濾搜索數(shù)據(jù)記錄,效率大大提升。

此外,在TDengine中,我們?yōu)榱朔奖愎芾碓O(shè)備的靜態(tài)信息,也創(chuàng)建了超級(jí)表,并將設(shè)備ID和分組等作為標(biāo)簽定義好。

具體到我們的場(chǎng)景中,我們的建庫(kù)、建表思路如下:

  • 數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)創(chuàng)建主要依據(jù)業(yè)務(wù)模塊來(lái),把泵站、泵閘等上報(bào)數(shù)據(jù)分開(kāi)存儲(chǔ)。

             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>
  • 超級(jí)表

超級(jí)表的結(jié)構(gòu)非常簡(jiǎn)單,采集字段就是時(shí)間戳ts和采集值val。但此處定義了兩個(gè)標(biāo)簽,用于描述具體的點(diǎn)位靜態(tài)信息。

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的優(yōu)勢(shì)

高寫(xiě)入速度

用下來(lái)感受是TDengine的數(shù)據(jù)寫(xiě)入性能非常高?,F(xiàn)在的接入網(wǎng)關(guān)的設(shè)備數(shù)是23個(gè)液位9個(gè)頻率計(jì)9個(gè)電流計(jì)??偣?0個(gè)攔蓄盾、3個(gè)泵站。3個(gè)截留井。 1個(gè)泵閘,總共有40張表,每張表每天新增6萬(wàn)條數(shù)據(jù),現(xiàn)在每張表的大約三百萬(wàn)條數(shù)據(jù)。使用TDengine帶來(lái)的最大好處是不用再考慮SQLServer中的分庫(kù)分表操作,數(shù)據(jù)不斷寫(xiě)入一個(gè)月后,查詢時(shí)延也沒(méi)有增加。

降采樣查詢

TDengine為監(jiān)控設(shè)備數(shù)據(jù)分析提供了一個(gè)非常有用的功能 — interval,即按照時(shí)間窗口進(jìn)行降采樣。比如在排水系統(tǒng)中,我們往往要計(jì)算攔蓄盾每隔20分鐘液位值,這種分析可以簡(jiǎn)單由下面這個(gè)SQL語(yǔ)句實(shí)現(xiàn)。

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);

最新數(shù)據(jù)顯示

在現(xiàn)在的監(jiān)測(cè)系統(tǒng)中,需要大屏實(shí)時(shí)顯示液位計(jì)的最新讀數(shù)。這里正好用上TDengine自帶的緩存功能。TDengine為每張表在內(nèi)存中分配了一定的緩存空間,來(lái)存儲(chǔ)最熱的記錄,實(shí)時(shí)查詢效率非常高。查詢語(yǔ)法用到了last和last_row。

select last_row(*) from rtdata group by sncode;

進(jìn)而用VUE和hightopo的構(gòu)建組態(tài)可視化界面,實(shí)時(shí)顯示最新液位數(shù)據(jù)。網(wǎng)關(guān)輸出最新液位,后端推送給前端,三維頁(yè)面用hightopo展示液位。做出來(lái)的效果也是非常酷的。

TDengine在智慧排水系統(tǒng)中的應(yīng)用介紹 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)
TDengine在智慧排水系統(tǒng)中的應(yīng)用介紹 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

低內(nèi)存、高壓縮比

在使用中,發(fā)現(xiàn)TDengine處理13個(gè)設(shè)備、百萬(wàn)量級(jí)的數(shù)據(jù)量的寫(xiě)入任務(wù),內(nèi)存開(kāi)銷只有1.5GB。查詢時(shí),內(nèi)存增長(zhǎng)覺(jué)察不出來(lái)。整體內(nèi)存開(kāi)銷比SQLServer降低了50%。

在數(shù)據(jù)落盤(pán)后,查看/var/lib/taos下的數(shù)據(jù)文件大小,原來(lái)5GB的原始數(shù)據(jù),經(jīng)TDengine壓縮后只有80MB,壓縮比為1.6%。

未來(lái)的展望

整體來(lái)講,TDengine Database對(duì)于處理高頻采集的結(jié)構(gòu)化時(shí)序數(shù)據(jù)吞吐量、資源開(kāi)銷和壓縮都非常優(yōu)秀。但目前TDengine還不能像Redis那樣做去重以及報(bào)警,這塊后面也會(huì)嘗試使用TDengine自帶的流式計(jì)算和訂閱來(lái)嘗試實(shí)現(xiàn)報(bào)警,看能否進(jìn)一步簡(jiǎn)化架構(gòu)省掉Redis和SQL Server的工作。希望TDengine官方也能在這方面有更多支持,能越來(lái)越棒!

作者簡(jiǎn)介:朱佳偉,鼎藍(lán)水務(wù)高級(jí)全棧研發(fā)工程師,開(kāi)源社區(qū)愛(ài)好者,目前主要負(fù)責(zé)鼎藍(lán)水務(wù)智慧排水系統(tǒng)中水位實(shí)時(shí)監(jiān)測(cè)系統(tǒng)的開(kāi)發(fā)與維護(hù)。

原文首發(fā)于:https://blog.csdn.net/weixin_43999998/article/details/104019889