日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

influxdb无法实现关联表_双汇:从棘手的InfluxDB+Redis到TDengine

發(fā)布時(shí)間:2024/9/18 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 influxdb无法实现关联表_双汇:从棘手的InfluxDB+Redis到TDengine 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

雙匯發(fā)展多個(gè)分廠的能源管控大數(shù)據(jù)系統(tǒng)主要采用兩種技術(shù)棧:InfluxDB/Redis和Kafka/Redis/HBase/Flink,對(duì)于中小型研發(fā)團(tuán)隊(duì)來(lái)講,無(wú)論是系統(tǒng)搭建,還是實(shí)施運(yùn)維都非常棘手。經(jīng)過(guò)對(duì)InfluxDB/Redis和TDengine大數(shù)據(jù)平臺(tái)的功能和性能對(duì)比測(cè)試,最終將TDengine作為實(shí)施方案。

1. 項(xiàng)目背景

基于雙匯發(fā)展對(duì)能源管控的需求,利用云平臺(tái)技術(shù)以及電氣自動(dòng)化處理手段,對(duì)雙匯發(fā)展的一級(jí)、二級(jí)、三級(jí)能源儀表進(jìn)行整體改造,實(shí)現(xiàn)儀表組網(wǎng),進(jìn)一步通過(guò)邊緣網(wǎng)關(guān)進(jìn)行能源在線監(jiān)測(cè)數(shù)據(jù)的采集,并上報(bào)至云平臺(tái),建立統(tǒng)一能源管理信息化系統(tǒng),實(shí)現(xiàn)能源的實(shí)時(shí)監(jiān)控、報(bào)表統(tǒng)計(jì)、能源流向分析與預(yù)測(cè),降低企業(yè)單位產(chǎn)品能源消耗,提高經(jīng)濟(jì)效益,最終實(shí)現(xiàn)企業(yè)能源精細(xì)化管理。

2. 總體架構(gòu)

能源管控平臺(tái)基于私有云構(gòu)建,包括完整的IaaS層、PaaS層和SaaS層,而能源采集系統(tǒng)作為管控平臺(tái)中最為重要的一環(huán),采用TDengine作為核心數(shù)據(jù)引擎,通過(guò)Restful接口進(jìn)行儀表在線數(shù)據(jù)插入,并實(shí)現(xiàn)大規(guī)模時(shí)序數(shù)據(jù)的高效穩(wěn)定存儲(chǔ),同時(shí),也為能源管控應(yīng)用層提供實(shí)時(shí)數(shù)據(jù)查詢(xún)、歷史聚合統(tǒng)計(jì)、流計(jì)算和訂閱服務(wù)等功能,實(shí)現(xiàn)能源地圖監(jiān)控、能耗預(yù)警、能源流向預(yù)測(cè)和能源互聯(lián)綜合決策,具體架構(gòu)如下圖所示。

圖1 能源采集系統(tǒng)架構(gòu)

3. TDengine關(guān)鍵應(yīng)用

3.1 Connector選擇

本項(xiàng)目數(shù)據(jù)采集最關(guān)鍵的環(huán)節(jié),就是將訂閱到的MQTT數(shù)據(jù)插入到TDengine中,于是也就涉及到了TDengine連接器的選擇,我們平時(shí)項(xiàng)目中java使用居多,而且JDBC的性能也相對(duì)較強(qiáng),理論上,應(yīng)該選擇JDBC API,但最終選擇了RESTful Connector,主要考慮以下幾點(diǎn):

1)簡(jiǎn)潔性

毫無(wú)疑問(wèn),RESTful通用性最強(qiáng),TDengine直接通過(guò)HTTP POST 請(qǐng)求BODY中包含的SQL語(yǔ)句來(lái)操作數(shù)據(jù)庫(kù),而且TDengine本身作為時(shí)序數(shù)據(jù)庫(kù)并不提供存儲(chǔ)過(guò)程或者事務(wù)機(jī)制,基本上都是每次執(zhí)行單條SQL語(yǔ)句,所以RESTful在使用上很簡(jiǎn)便。

2)可移植性

本項(xiàng)目的Java應(yīng)用都是部署在Kubernetes中,所以向TDengine插入數(shù)據(jù)的Java應(yīng)用需要容器化部署,而之前了解到,JDBC需要依賴(lài)的本地函數(shù)庫(kù)libtaos.so文件,所以容器化部署可能較為麻煩,而RESTful僅需采用OKHttp庫(kù)即可實(shí)現(xiàn),移植性較強(qiáng)。

3)數(shù)據(jù)規(guī)模

本項(xiàng)目數(shù)采規(guī)模不大,大約每分鐘7000條數(shù)據(jù),甚至后續(xù)數(shù)采功能擴(kuò)展到其他分廠,RESTful也完全滿(mǎn)足性能要求。

但總體來(lái)講,JDBC是在插入與查詢(xún)性能上具有一定優(yōu)勢(shì)的,而且支持從firstEp和secondEp選擇有效節(jié)點(diǎn)進(jìn)行連接(類(lèi)似于Nginx的keepalive高可用),目前TDengine版本發(fā)布情況上看,JDBC的維護(hù)與提升也是重中之重,后續(xù)項(xiàng)目也可能會(huì)向JDBC遷移。

3.2 RESTful代碼實(shí)現(xiàn)

1)ThreadPoolExecutor線程池

訂閱EMQX和RESTful插入TDengine的代碼寫(xiě)在了同一個(gè)java服務(wù)中,每接收到一條MQTT訂閱消息,便開(kāi)啟一個(gè)線程向TDengine插入數(shù)據(jù),線程均來(lái)自于線程池,初始化如下:

ExecutorService pool = new ThreadPoolExecutor(150, 300, 1000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(100), Executors.defaultThreadFactory(),new ThreadPoolExecutor.DiscardOldestPolicy());

線程池采用基于數(shù)組的先進(jìn)先出隊(duì)列,采用丟棄早期任務(wù)的拒絕策略,因?yàn)楸敬螆?chǎng)景中單次RESTful插入數(shù)據(jù)量大約在100~200條,執(zhí)行速度快,遲遲未執(zhí)行完極可能是SQL語(yǔ)句異常或連接taosd服務(wù)異常等原因,應(yīng)該丟棄任務(wù)。核心線程數(shù)設(shè)為150,相對(duì)較高,主要為了保證高峰抗壓能力。

2)OKHttp線程池

在每個(gè)ThreadPoolExecutor線程中,基于OKHttp庫(kù)進(jìn)行RESTful插入操作,也是采用ConnectionPool管理 HTTP 和 HTTP/2 連接的重用,以減少網(wǎng)絡(luò)延遲,OKHttp重點(diǎn)配置如下:

public ConnectionPool pool() { return new ConnectionPool(20, 5, TimeUnit.MINUTES);}

即最大空閑連接數(shù)為20,每個(gè)連接最大空閑時(shí)間為5分鐘,每個(gè)OKHttp插入操作采用異步調(diào)用方式,主要代碼如下:

public void excuteTdengineWithSqlAsync(String sql,Callback callback) { try{ okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/octet-stream"); RequestBody body = RequestBody.create(mediaType, sql); Request request = new Request.Builder() .url(tdengineHost) .post(body) .addHeader("Authorization", "Basic cm9vdDp0YW9zZGF0YQ==") .addHeader("cache-control", "no-cache") .build(); mOkHttpClient.newCall(request).enqueue(callback); } catch (Exception e) { logger.error("執(zhí)行tdengine操作報(bào)錯(cuò):"+ e.getMessage()); }}

3)Java打包鏡像

長(zhǎng)期壓力測(cè)試顯示,每秒執(zhí)行200次RESTful插入請(qǐng)求,單次請(qǐng)求包含100條數(shù)據(jù),每條數(shù)據(jù)包含5組標(biāo)簽,Java服務(wù)內(nèi)存穩(wěn)定在300M~600M。而且上述模擬規(guī)模僅針對(duì)單個(gè)Java應(yīng)用而言,在Kubernetes可以跑多個(gè)這樣pod來(lái)消費(fèi)不同的MQTT主題,所以并發(fā)能力完全夠用。打包鏡像時(shí),堆內(nèi)存最大值設(shè)為1024MB,主要語(yǔ)句為:

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-XX:MaxRAM=2000m","-Xms1024m","-jar","/app.jar"]

3.3 性能測(cè)試

1)RESTful插入性能

按照3.2小節(jié)中的RESTful代碼進(jìn)行數(shù)據(jù)插入,Java程序和TDengine集群均運(yùn)行在私有云中,虛擬機(jī)之間配備萬(wàn)兆光纖交換機(jī),Java程序具體如3.2小節(jié)所示,TDengine集群部署在3個(gè)虛擬機(jī)中,配置均為1TB硬盤(pán)、12核、12GB(私有云中CPU比較充裕,但內(nèi)存比較緊張),經(jīng)過(guò)大約三周的生產(chǎn)環(huán)境運(yùn)行,性能總結(jié)如下:

表1 生產(chǎn)環(huán)境下RESTful插入性能測(cè)試

生產(chǎn)環(huán)境下,單條插入性能極高,完全滿(mǎn)足需求,當(dāng)然前期也進(jìn)行過(guò)稍大規(guī)模的插入場(chǎng)景模擬,主要是基于2.0.4.0以后的版本,注意到2.0.4.0之前的TDengine版本RESTful的SQL語(yǔ)句上限為64KB。模擬環(huán)境下,RESTful插入性能非常優(yōu)秀,具體如下表所示。

表2 模擬環(huán)境下RESTful插入性能測(cè)試

2)RESTful查詢(xún)性能

使用RESTful進(jìn)行SQL查詢(xún)時(shí),性能也是非常好,目前真實(shí)生產(chǎn)環(huán)境中,數(shù)據(jù)總量為800萬(wàn),相對(duì)單薄,所以查詢(xún)性能測(cè)試在模擬環(huán)境下進(jìn)行,在8億數(shù)據(jù)量下,LAST_ROW函數(shù)可以達(dá)到10ms響應(yīng)速度,count、interval、group by等相關(guān)函數(shù)執(zhí)行速度均在百毫秒量級(jí)上。

3.4 實(shí)施方案

本項(xiàng)目針對(duì)雙匯發(fā)展下屬的6個(gè)分廠(后續(xù)會(huì)繼續(xù)擴(kuò)充)進(jìn)行能源數(shù)據(jù)采集,大約1200多塊儀表(后續(xù)會(huì)繼續(xù)擴(kuò)充),每塊儀表包括3至5個(gè)采集標(biāo)簽,采集頻率均為1分鐘,數(shù)據(jù)接入規(guī)模不大。六個(gè)廠各自有獨(dú)立的租戶(hù)空間,為了方便各自的時(shí)序數(shù)據(jù)庫(kù)管理,同時(shí)也方便各廠間的聚合查詢(xún)(目前六個(gè)分廠均從屬雙匯發(fā)展總部),所以各分廠分別建立超級(jí)表,每個(gè)超級(jí)表包括4個(gè)tag,分別為廠編號(hào)、儀表級(jí)別、所屬工序和儀表編號(hào),具體超級(jí)表建表情況如下圖所示。

主要用到的集群包括TDengine集群、EMQX集群和Redis集群,其中Redis集群在數(shù)據(jù)采集方面,僅僅用于緩存儀表連接狀態(tài),其重點(diǎn)在于緩存業(yè)務(wù)系統(tǒng)數(shù)據(jù);EMQX集群用于支撐MQTT數(shù)據(jù)的發(fā)布與訂閱,部署在Kubernetes中,可以實(shí)現(xiàn)資源靈活擴(kuò)展;TDengine集群部署在IaaS虛擬機(jī)中,支持大規(guī)模時(shí)序數(shù)據(jù)的存儲(chǔ)與查詢(xún)。

表3 集群配置信息

按照TDengine官方的建議,“一個(gè)數(shù)據(jù)采集點(diǎn)一張表,同一類(lèi)型數(shù)據(jù)采集點(diǎn)一張超級(jí)表”,我針對(duì)不同分廠的水表、電表、蒸汽表和燃?xì)獗矸謩e建立的超級(jí)表,每個(gè)儀表單獨(dú)建表,保證每張表的時(shí)間戳嚴(yán)格遞增。在實(shí)踐TDengine的過(guò)程中,重點(diǎn)體會(huì)如下:

1)集群搭建門(mén)檻低

TDengine集群安裝部署非常便捷,尤其相比于其他集群,僅需要簡(jiǎn)單的配置就可以實(shí)現(xiàn)生產(chǎn)環(huán)境級(jí)的搭建,官方文檔也比較豐富,社區(qū)活躍,也大為降低了后續(xù)運(yùn)維成本。

2)插入與查詢(xún)效率極高

TDengine的插入與查詢(xún)性能極高,這點(diǎn)在實(shí)際運(yùn)行時(shí)也深有感觸,用last_row函數(shù)查詢(xún)儀表最新數(shù)據(jù),基本上可以達(dá)到毫秒級(jí),在幾十億級(jí)的數(shù)據(jù)上進(jìn)行聚合查詢(xún)操作,也可達(dá)到百毫秒級(jí),極大提供了系統(tǒng)的響應(yīng)速度。

3)全棧式時(shí)序處理引擎

在未使用TDengine之前,我們主要采用InfluxDB/Redis和Kafka/Redis/HBase/Flink兩種技術(shù)棧,對(duì)于我們中小型研發(fā)團(tuán)隊(duì)來(lái)講,無(wú)論是系統(tǒng)搭建,還是實(shí)施運(yùn)維都非常棘手。但是使用TDengine后,一切都簡(jiǎn)化了,TDengine將數(shù)據(jù)庫(kù)、消息隊(duì)列、緩存、流式計(jì)算等功能融合一起,以一種全棧的方式,為我們的大數(shù)據(jù)系統(tǒng)帶來(lái)了便捷。技術(shù)方案的對(duì)比如表4所示。

注:方案一為InfluxDB/Redis,方案二為Kafka/Redis/HBase/Flink,方案三為T(mén)Dengine

表4 數(shù)據(jù)采集方案對(duì)比

從表4的對(duì)比方案中可以看出,TDengine(方案三)是有著很大的優(yōu)勢(shì),尤其在開(kāi)源EMQX Broker的支持上也非常好(主要依賴(lài)于Restful接口),其他的例如Kafka和InfluxDB只能和企業(yè)版EMQX集成;在數(shù)據(jù)插入和查詢(xún)效率方面,上述三種方案關(guān)鍵在于TDengine、HBase和InfluxDB的對(duì)比,官網(wǎng)有非常詳細(xì)的測(cè)試報(bào)告,TDengine也是有絕對(duì)優(yōu)勢(shì),這里就不過(guò)多敘述。所以選擇TDengine是勢(shì)在必行的。

3.5 技術(shù)期望

在時(shí)序數(shù)據(jù)庫(kù)性能方面,TDengine有著很大的優(yōu)勢(shì),并且也集成了消息訂閱和流計(jì)算功能,可以說(shuō)在中小型物聯(lián)場(chǎng)景下,是無(wú)需部署Kafka和Flink的。當(dāng)然個(gè)人理解TDengine不是為了完全取代Kafka和Flink而生的,尤其是在大型云服務(wù)項(xiàng)目中,更多是共存。

但是在邊緣端,TDengine憑借著極低的資源占用率和優(yōu)秀的時(shí)序處理性能,將會(huì)產(chǎn)生更大的能量,期望能徹底集成邊緣流計(jì)算和MQTT broker等功能,擴(kuò)充Modbus、OPC-UA等常見(jiàn)工業(yè)協(xié)議支持,向下連接工業(yè)設(shè)備或者物聯(lián)設(shè)施,向上和邊緣Kubernetes生態(tài)(如KubeEdge、K3S等)協(xié)同,或者直接和云中心協(xié)同。

3.6 系統(tǒng)運(yùn)行界面

項(xiàng)目重點(diǎn)是能耗統(tǒng)計(jì),而在線采集到TDengine里的數(shù)據(jù)都是累計(jì)量,所以在計(jì)算能耗時(shí),需要在不同的超級(jí)表執(zhí)行按表分組、按時(shí)間周期采樣的查詢(xún),類(lèi)似下面語(yǔ)法:

select last(累計(jì)列) as max_val,first(累計(jì)列) as min_val from [超級(jí)表名] where [標(biāo)簽欄相關(guān)過(guò)濾] and ts>=now-10h INTERVAL(1h) group by [儀表編號(hào)] ;

得益于TDengine的極佳性能,基本能保證不超過(guò)百毫秒的訪問(wèn)延時(shí),下面是一些相關(guān)的PC端、移動(dòng)端界面(我們移動(dòng)端是用H5做的,為了直接能跑在Android和iOS上)。

寫(xiě)在最后

其實(shí)從2019年開(kāi)始就一直在關(guān)注TDengine,也看了很多陶總的演講,受益匪淺,尤其在今年8月份,TDengine進(jìn)行了集群版開(kāi)源,也正好準(zhǔn)備啟動(dòng)能源數(shù)據(jù)采集項(xiàng)目,所以果斷采用TDengine作為核心時(shí)序引擎,目前也是收獲了非常的效果。本次項(xiàng)目實(shí)施過(guò)程中,尤其感謝濤思數(shù)據(jù)的蘇曉慰工程師,多次協(xié)助解決TDengine相關(guān)的實(shí)施問(wèn)題。計(jì)劃在后續(xù)其他項(xiàng)目也也會(huì)繼續(xù)推廣TDengine,同時(shí)也愿意為一些商業(yè)版功能付費(fèi),支持國(guó)產(chǎn),支持濤思。

作者介紹于淼,學(xué)歷碩士,副研究員,主要從事MES系統(tǒng)研發(fā)以及智能制造相關(guān)理論和標(biāo)準(zhǔn)研究,主要研究方向:數(shù)字工廠使能技術(shù)、制造執(zhí)行系統(tǒng)關(guān)鍵技術(shù)和智能制造標(biāo)準(zhǔn)體系等,參與國(guó)家級(jí)項(xiàng)目及企業(yè)項(xiàng)目十余項(xiàng),包括國(guó)家重點(diǎn)研發(fā)計(jì)劃以及國(guó)家智能制造專(zhuān)項(xiàng)等。

總結(jié)

以上是生活随笔為你收集整理的influxdb无法实现关联表_双汇:从棘手的InfluxDB+Redis到TDengine的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 噜噜噜在线 | 国产真人做爰视频免费 | 青青草97国产精品麻豆 | 欧美爱爱网 | 国产成人综合在线观看 | 蜜桃av免费 | 尤物综合网| av片在线看| 特级做a爰片毛片免费69 | 国产精品国产三级国产普通话蜜臀 | 妺妺窝人体色WWW精品 | 男女扒开双腿猛进入爽爽免费 | 丰满人妻一区二区三区46 | 国产精品天美传媒沈樵 | 老太太av| 青青操青青 | 中文字幕一区二区三区免费看 | 欧美日韩亚洲国产综合 | 日美av| 成人免费黄色片 | 免费av网址大全 | 影音先锋欧美在线 | 伊人久久成人网 | 丰满人妻一区二区三区大胸 | 一区三区在线 | 黄片毛片在线观看 | 重口另类 | 高h喷水荡肉少妇爽多p视频 | 天天看天天色 | 亚州欧美| 福利视频不卡 | 久操热| 亚洲最大福利视频网 | 一区二区导航 | 久久中文字幕高清 | 亚洲成年人专区 | 国产在线午夜 | 色人天堂| 美女污软件 | 岛国一区| av中文在线| 按摩害羞主妇中文字幕 | 亚洲最大中文字幕 | 美女色呦呦 | 美女脱了裤子让男人捅 | 国产精品一区二区三区免费在线观看 | 国产视频在线观看免费 | 欧美成一区二区三区 | 国产精品69毛片高清亚洲 | 精品成人一区二区三区 | 午夜一二三区 | 日本护士╳╳╳hd少妇 | 国产精品久久久免费 | 亚洲最大福利视频网 | 日韩精品成人一区 | 日韩在线欧美在线 | 欧美视频免费在线 | 污av| 精品人妻一区二区三区换脸明星 | 久色88| 粉色视频网站 | 国内偷拍精品视频 | 久久午夜夜伦鲁鲁一区二区 | 影音先锋黄色网址 | 精品视频一二三区 | 向日葵视频在线播放 | 天天影视亚洲 | 国产一区二区三区四区五区美女 | 天堂资源中文在线 | 欧美色图校园春色 | 欧美激情xxxxx | 伊人操| 蜜桃视频久久一区免费观看入口 | 欧美日韩成人免费 | 成人av男人的天堂 | 欧美一区二区久久久 | 国产欧美日韩激情 | 天天舔天天舔 | 日本大尺度激情做爰hd | 国产真实生活伦对白 | 国内自拍第二页 | 国产精品无码乱伦 | 制服丝袜国产精品 | 欧美成人综合在线 | 青青草原综合久久大伊人精品 | 狠狠干夜夜干 | 国产专区一区二区 | 国产美女作爱全过程免费视频 | 日韩性生活视频 | 国产成a人亚洲精v品在线观看 | 亚洲AV无码乱码国产精品牛牛 | 国内激情 | 亚洲国产精品18久久久久久 | 成av在线| 在线观看日本网站 | 自拍超碰在线 | 高清日韩欧美 | 久久夜夜操 | 初尝人妻少妇中文字幕 |