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

TDengine加持,一周時(shí)間上線環(huán)保監(jiān)測平臺

昆岳互聯(lián) 王飛

2020-06-12 / ,

小 T 導(dǎo)讀:昆岳互聯(lián)的“a環(huán)?!盇PP基于自主打造的環(huán)保產(chǎn)業(yè)互聯(lián)網(wǎng)平臺(INECO平臺),對環(huán)境基礎(chǔ)設(shè)施海量數(shù)據(jù)實(shí)時(shí)處理與分析,可以秒級實(shí)時(shí)采集工業(yè)大氣環(huán)保各項(xiàng)監(jiān)控指標(biāo)的數(shù)據(jù),分別通過年、月、日三個(gè)維度,結(jié)合不同的采集頻率周期,對采集到的海量數(shù)據(jù)進(jìn)行分析、展示,在時(shí)序數(shù)據(jù)庫(Time-Series Database)的選型中,經(jīng)過對比,最終選擇了TDengine。

程序設(shè)計(jì)

整個(gè)數(shù)據(jù)采集服務(wù)基于MQTT協(xié)議開發(fā),通過阿里巴巴的nacos集群實(shí)現(xiàn)配置和服務(wù)發(fā)現(xiàn),通過feign模式調(diào)用其他微服務(wù)模塊的業(yè)務(wù)數(shù)據(jù),來對上報(bào)的數(shù)據(jù)進(jìn)行業(yè)務(wù)解析,并將解析的結(jié)果存入對應(yīng)監(jiān)控指標(biāo)對應(yīng)的點(diǎn)位表中。采集服務(wù)采用mybatis-plus的多數(shù)據(jù)源配置,使用的是目前性能最佳的HikariCP數(shù)據(jù)連接池,分別配置MySQL和TDengine兩個(gè)數(shù)據(jù)庫連接,實(shí)現(xiàn)了多數(shù)據(jù)源的無縫切換。整個(gè)采集服務(wù)基于容器化部署,采用Kubernetes進(jìn)行容器編排,通過分布式鎖方式避免了數(shù)據(jù)重復(fù)入庫,提高了數(shù)據(jù)的解析速度,實(shí)現(xiàn)MQTT的分布式分組采集。

TDengine加持,一周時(shí)間上線環(huán)保監(jiān)測平臺 - TDengine Database 時(shí)序數(shù)據(jù)庫

數(shù)據(jù)庫選型

我們公司對比了阿里的時(shí)序時(shí)空數(shù)據(jù)庫TSDB、傳統(tǒng)的 MySQL 以及 TDengine。

與傳統(tǒng)數(shù)據(jù)庫對比

  • MySQL :查詢效率低,需要按數(shù)據(jù)時(shí)間分庫分表,應(yīng)用場景不合適,沒有基于采集頻率周期的高效查詢。
  • TDengine :查詢效率高,不需要分表,具備時(shí)間維度聚合、流式計(jì)算、緩存等特性。
數(shù)據(jù)庫查詢效率應(yīng)用場景流式計(jì)算
MySQL事務(wù)型不支持
TDengine時(shí)序型支持

與其他時(shí)序庫對比

  • 阿里TSDB :閉源,私有化落地比較難
  • TDengine :性價(jià)比高,開源,支持云端和本地部署  

尤其是TDengine一張?jiān)O(shè)備一張表的建表思路,和我們的程序設(shè)計(jì)方式非常契合。同時(shí)TDengine還有一個(gè)超級表的設(shè)計(jì),可以給不同的設(shè)備打上標(biāo)簽,比如客戶ID、設(shè)備ID、指標(biāo)名稱等等,管理多條時(shí)間線變得非常方便。整個(gè)數(shù)據(jù)庫也是SQL交互方式,支持標(biāo)準(zhǔn)JDBC接口,可以無縫對接MyBastis ORM框架,開發(fā)起來非常方便。因此我們最終選用了TDengine云服務(wù)作為各項(xiàng)監(jiān)控指標(biāo)的存儲數(shù)據(jù)庫,并且花了大概一周時(shí)間就上線了系統(tǒng)。

建表思路

我們目前是通過超級表的模式來進(jìn)行數(shù)據(jù)建表,我們子表是point_#{采集點(diǎn)唯一編碼} 。標(biāo)簽對應(yīng)為客戶唯一標(biāo)識、設(shè)備唯一標(biāo)識、采集指標(biāo)編號、指標(biāo)名稱、計(jì)量單位名稱。

建立超級表

create table point(ts timestamp,val float,flag bool) tags(cusid bigint, devid bigint, code bigint, pointname binary(20),unitname binary(20));

根據(jù)超級表建立子表

create table point_0301 using point tags(10000000, 301, 107, 'DUST', 'mg/Nm3');
create table point_0302 using point tags(10000000, 302, 107, 'DUST', 'mg/Nm3');
...

這樣的設(shè)計(jì)很自然的對采集數(shù)據(jù)進(jìn)行了分表。而在查詢時(shí),可以從超級表進(jìn)行查詢,無需針對每張子表進(jìn)行。此外,在超級表查詢時(shí),還可以按照客戶、采集量等去篩選具體業(yè)務(wù)需要的子表出來。超級表的標(biāo)簽相當(dāng)于對子表加了一個(gè)索引,非常方便。超級表的標(biāo)簽是支持增刪改查的,這對我們目前尚未定型的業(yè)務(wù)邏輯是個(gè)大好消息:在后面業(yè)務(wù)需要發(fā)生變化時(shí),比如需要為各個(gè)設(shè)備增加一個(gè)“城市”的分析維度,我們也不再需要重新更新一遍所有數(shù)據(jù),而只用直接為每個(gè)表增加一個(gè)標(biāo)簽即可。

方便的流式計(jì)算

時(shí)間維度聚合

業(yè)務(wù)需要對原始的秒級采集數(shù)據(jù)進(jìn)行年、月、日、分鐘等的聚合計(jì)算和繪圖。這個(gè)需求可以直接在TDengine Database中按照時(shí)間進(jìn)行將采樣查詢解決。在計(jì)算超標(biāo)濃度的時(shí)候,需要對每分鐘的平均值進(jìn)行實(shí)時(shí)計(jì)算監(jiān)控。比如污染排放的監(jiān)控中,業(yè)務(wù)要求對NOx的濃度實(shí)時(shí)監(jiān)控,并且讓用戶選擇時(shí)間范圍顯示濃度變化曲線以及聚合的窗口長度(5分鐘、15分鐘、30分鐘、日、月、年)。由于傳到前端的數(shù)據(jù)是時(shí)序數(shù)據(jù)庫已經(jīng)計(jì)算好的,數(shù)據(jù)量一般沒有那么大,相比把所有原始數(shù)據(jù)點(diǎn)都拉到前端再處理而言,效率大大提高。

select val from point_0301 where ts<'2020-05-30 00:00:00.000' and ts>'2020-05-29 00:00:00.000' interval(5m); //每5分鐘聚合
select val from point_0301 where ts<'2020-05-30 00:00:00.000' and ts>'2020-05-29 00:00:00.000' interval(15m); //每15分鐘聚合
select val from point_0301 where ts<'2020-05-30 00:00:00.000' and ts>'2020-05-29 00:00:00.000' interval(30m); //每30分鐘聚合
TDengine加持,一周時(shí)間上線環(huán)保監(jiān)測平臺 - TDengine Database 時(shí)序數(shù)據(jù)庫

流式計(jì)算

對于每分鐘的平均量進(jìn)行實(shí)時(shí)計(jì)算,只需要簡單的定義時(shí)間窗口和滑動增量,數(shù)據(jù)庫就能返回每分鐘的平均量。對于實(shí)時(shí)監(jiān)測、預(yù)警的指標(biāo),可以專門為這類數(shù)據(jù)建立流計(jì)算,并將計(jì)算結(jié)果寫入新的表(如下strm_pt_0304)中存儲,這樣整個(gè)實(shí)時(shí)計(jì)算的結(jié)果也可以做歷史回顧。

create table strm_pt_0304 as select avg(val) from point_0304 INTERVAL(1m) SLIDING(1m);//每分鐘計(jì)算一次每分鐘的平均值
TDengine加持,一周時(shí)間上線環(huán)保監(jiān)測平臺 - TDengine Database 時(shí)序數(shù)據(jù)庫

原本很多需要在程序中處理的數(shù)值計(jì)算,現(xiàn)在完全都由TDengine承擔(dān),一方面分擔(dān)了程序的計(jì)算壓力,另一方面更重要的是,聚合結(jié)果可以自動持久化存儲,支持歷史數(shù)據(jù)即時(shí)回看。

對TDengine Database的體驗(yàn)總結(jié)

  1. 開源版的TDengine可以做本地測試適配,安裝包只有5MB,使用非常方便,各種接口也和企業(yè)版完全一致。但希望可以對購買企業(yè)版的客戶,提供一個(gè)可以兼容開源版本的web版查詢工具,方便調(diào)試。
  2. 現(xiàn)在TDengine對Java驅(qū)動的支持已經(jīng)相當(dāng)好,但希望可以提供更多.net core版本的驅(qū)動支持。

作者簡介:

王飛,昆岳互聯(lián)物聯(lián)網(wǎng)技術(shù)專家,有多年.net/Java軟件設(shè)計(jì)開發(fā)經(jīng)驗(yàn)、熟悉工業(yè)級監(jiān)控、環(huán)境監(jiān)控等業(yè)務(wù)建模,主導(dǎo)了昆岳互聯(lián)“A環(huán)?!表?xiàng)目的整體設(shè)計(jì)、開發(fā)工作。

原文首發(fā)于https://mp.weixin.qq.com/s/4cZjD4fapz8OK7wC-wFeHA