作者:深圳雙合電機監測和(he)故障預測產品研發團隊
小T導讀:深(shen)圳(zhen)雙合電氣(qi)股份有限公司成(cheng)立于(yu)1993年(nian),是國家(jia)級(ji)高新技術(shu)企(qi)業和(he)廣(guang)東(dong)省(sheng)專精特新企(qi)業。公司致力于(yu)電力及工企(qi)業系(xi)(xi)(xi)統應用解決(jue)方案(an)及相(xiang)關(guan)智能監測設備的研(yan)究、開發、生產與實施(shi),擁有面向電力系(xi)(xi)(xi)統、發電、石化、冶金、鋼鐵等行(xing)業的故(gu)障診斷及預警系(xi)(xi)(xi)統系(xi)(xi)(xi)列(lie)解決(jue)方案(an)。
項目背景
水(shui)(shui)電廠(chang)對(dui)重要(yao)主機(ji)(ji)(ji)(ji)設(she)備(bei)已配備(bei)基于生產運行(xing)控(kong)制的(de)(de)計算機(ji)(ji)(ji)(ji)監控(kong)系統(tong)和機(ji)(ji)(ji)(ji)組穩(wen)定性監測分析系統(tong),主要(yao)從(cong)振動(dong)、氣隙等(deng)狀(zhuang)態量(liang)對(dui)主機(ji)(ji)(ji)(ji)設(she)備(bei)的(de)(de)運行(xing)狀(zhuang)態進行(xing)監測和評(ping)估(gu);同時(shi)水(shui)(shui)電廠(chang)對(dui)水(shui)(shui)輪發電機(ji)(ji)(ji)(ji)組裝設(she)了故障錄波器,用于記錄機(ji)(ji)(ji)(ji)組異(yi)常和故障時(shi)的(de)(de)波形及動(dong)作情況,但這些監測手段(duan)僅從(cong)部分角度對(dui)機(ji)(ji)(ji)(ji)組狀(zhuang)態進行(xing)評(ping)估(gu),未能從(cong)多(duo)維綜合的(de)(de)角度評(ping)估(gu)機(ji)(ji)(ji)(ji)組的(de)(de)安(an)全運行(xing)情況。此(ci)外,對(dui)故障錄波器記錄的(de)(de)大量(liang)機(ji)(ji)(ji)(ji)組的(de)(de)電氣及保護(hu)開關(guan)動(dong)作信息,未能挖掘數據(ju)的(de)(de)深入價值(zhi)。
基(ji)(ji)于(yu)現有系(xi)統的(de)不足,用戶提出了本(ben)項目(mu)建設(she)需求(qiu),并基(ji)(ji)于(yu)深圳雙(shuang)合豐富(fu)的(de)系(xi)統方案(an)解決能力,將本(ben)項目(mu)交(jiao)給我司建設(she)。

主要挑戰
本項目中,用戶(hu)提出的(de)(de)最基本,也最核心的(de)(de)需求(qiu)是將全廠(chang)的(de)(de)電力系(xi)統(tong)各(ge)元(yuan)件納入系(xi)統(tong)的(de)(de)監測,并(bing)存儲(chu)高采樣率的(de)(de)原始(shi)信(xin)號數據。有了原始(shi)數據,就可以進行各(ge)種高級(ji)應用分(fen)析。
在這個(ge)需求中,信(xin)號采(cai)樣率是10K,即每(mei)秒鐘產生1萬個(ge)浮點數(shu)據。全廠電力系統元件(jian),初(chu)步估算有500個(ge)信(xin)號通道。這樣1天即可產生1.7T字(zi)節數(shu)據量(10000 * 4 byte * 500 * 24 * 60 * 60)。
巨(ju)量的(de)數據(ju),給我們造成兩個難題:一是從(cong)監(jian)測裝置到(dao)系統服務(wu)器的(de)數據(ju)傳輸問題;另(ling)一個就是數據(ju)存儲問題。
第一(yi)個難題,基于深圳雙合(he)豐富的(de)設備(bei)研發能力,直接通(tong)過(guo)硬(ying)件發送(song)鏈路數據很快(kuai)就(jiu)解(jie)決了。
第二個難(nan)題,解決方案就兩個:選(xuan)擇(ze)(ze)數(shu)(shu)據(ju)(ju)(ju)庫(ku)(ku)存儲或(huo)文(wen)(wen)(wen)件(jian)存儲。對于數(shu)(shu)據(ju)(ju)(ju)庫(ku)(ku)存儲方案,如(ru)此巨量的(de)(de)數(shu)(shu)據(ju)(ju)(ju),根據(ju)(ju)(ju)經(jing)驗(yan)可以知道,常(chang)見的(de)(de)主流數(shu)(shu)據(ju)(ju)(ju)庫(ku)(ku)很難(nan)支(zhi)撐。而文(wen)(wen)(wen)件(jian)存儲是電力系(xi)統這種類型數(shu)(shu)據(ju)(ju)(ju)通(tong)常(chang)的(de)(de)存儲方案,于是我們將此方案報給(gei)了用(yong)戶,不過他們并沒有選(xuan)擇(ze)(ze)。一(yi)方面是連續(xu)、巨量的(de)(de)原始采樣數(shu)(shu)據(ju)(ju)(ju)存儲成文(wen)(wen)(wen)件(jian),確實會對后(hou)續(xu)的(de)(de)數(shu)(shu)據(ju)(ju)(ju)應用(yong)產生諸(zhu)多不便;一(yi)方面是希望系(xi)統有一(yi)定的(de)(de)創新性(xing)。
數據庫選型和驗證
用(yong)戶反對文件存儲方(fang)(fang)案(an),逼我(wo)們(men)又回到(dao)數據庫存儲方(fang)(fang)案(an)上。我(wo)們(men)就把(ba)目光轉向(xiang)了(le)新(xin)興的數據庫。
經過反復對比,濤思數據開發的TDengine時序數據庫優異的(de)(de)性(xing)能(neng)(neng)指標吸引了我(wo)們(men)。我(wo)們(men)對(dui)(dui)數據庫有(you)三個最關心的(de)(de)核心性(xing)能(neng)(neng)指標(寫入能(neng)(neng)力、查詢(xun)效(xiao)率(lv)、存儲(chu)能(neng)(neng)力)。在正式引入TDengine Database之(zhi)前,我(wo)們(men)對(dui)(dui)這三個指標進(jin)行(xing)了測試(shi)驗證(zheng)。
我們建了10個數(shu)(shu)據表(biao),每個表(biao)50個數(shu)(shu)據列,數(shu)(shu)據庫采用單(dan)機模式。然后編寫(xie)模擬(ni)程(cheng)序每張(zhang)(zhang)表(biao)每秒產生1萬行記錄(lu)插入(ru)到(dao)這10張(zhang)(zhang)表(biao)中,并(bing)通過SQL語句
select count(*) from tablename where ts>now -1s
來驗證當前(1秒以內)產生的數(shu)據是否(fou)及(ji)時被寫入(ru)了數(shu)據庫。
如果(guo)數(shu)(shu)(shu)據(ju)來不及寫入數(shu)(shu)(shu)據(ju)庫,數(shu)(shu)(shu)據(ju)就(jiu)(jiu)會慢(man)慢(man)堆積(ji)起(qi)來。這(zhe)樣最新的(de)數(shu)(shu)(shu)據(ju)也(ye)就(jiu)(jiu)無法在(zai)(zai)數(shu)(shu)(shu)據(ju)庫中(zhong)查(cha)到。為了(le)(le)檢查(cha)是否(fou)存(cun)在(zai)(zai)堆積(ji)現象,我們(men)也(ye)測試了(le)(le)程(cheng)序運行(xing)多天之后執行(xing)該(gai)SQL,結(jie)果(guo)是當前(qian)最新1秒(miao)內的(de)數(shu)(shu)(shu)據(ju)也(ye)能在(zai)(zai)數(shu)(shu)(shu)據(ju)庫里查(cha)到,這(zhe)說明堆積(ji)的(de)數(shu)(shu)(shu)據(ju)不超(chao)過(guo)1秒(miao)。也(ye)就(jiu)(jiu)表明,數(shu)(shu)(shu)據(ju)庫及時(shi)寫入了(le)(le)數(shu)(shu)(shu)據(ju),沒有(you)任(ren)何(he)延遲。
后來我們又將產生的數據量翻倍,測試結果一樣,說明TDengine數據庫的寫入能力非常強悍。
而查詢效(xiao)率的驗證則相(xiang)對(dui)簡單(dan)。我們在已經有了幾(ji)十(shi)億條(tiao)記(ji)錄(lu)的表(biao)中隨(sui)意查詢幾(ji)十(shi)萬條(tiao)記(ji)錄(lu),查詢時(shi)間均沒(mei)超過1秒,說明TDengine數(shu)據庫(ku)查詢效(xiao)率也極其(qi)強悍。
再(zai)就是(shi)(shi)對數(shu)據(ju)庫(ku)存儲能力的(de)驗證。根據(ju)推算,我們(men)1天產生1.7T的(de)數(shu)據(ju)。而我們(men)用(yong)du –sh * 命令(ling)去查看TDengine數(shu)據(ju)庫(ku)的(de)數(shu)據(ju)目錄,24小時之(zhi)后(hou)再(zai)去查看,發現數(shu)據(ju)增量約是(shi)(shi)1.7T的(de)30%左右。這說(shuo)明TDengine的(de)壓縮能力也(ye)是(shi)(shi)比較優(you)異的(de)。
基于上述三個性能指(zhi)標的優(you)異表現(xian),我們很快決定將TDengine時序數據庫正(zheng)式引入項目。
TDengine使用體驗
正式使用TDengine數據庫后,我們發現TDengine的C++和Java接口都簡單清晰,SQL語法與(yu)標準SQL基本一樣(yang),學習成(cheng)本幾乎(hu)為0,使用TDengine數據庫沒有給項目帶來(lai)額外的工作量和難度(du)。
最終,TDengine數據庫(ku)在該項目中順利(li)投入使(shi)用(yong),在現(xian)場運行(xing)環境的(de)(de)表(biao)現(xian),如同(tong)我們的(de)(de)驗證測(ce)試(shi)一樣,擁(yong)有優異的(de)(de)寫入能力(li)(li)和(he)快速的(de)(de)查詢能力(li)(li),可以有力(li)(li)地(di)支(zhi)撐系統對原始信號數據進行(xing)進一步(bu)的(de)(de)分(fen)析與(yu)應用(yong)。

在該項目中(zhong)(zhong),我們只把高采(cai)樣(yang)(yang)的連續(xu)采(cai)樣(yang)(yang)數(shu)(shu)據(ju)存(cun)入TDengine數(shu)(shu)據(ju)庫(ku)(ku)中(zhong)(zhong),其他(ta)離(li)(li)散型時序(xu)數(shu)(shu)據(ju)沒有存(cun)到TDengine數(shu)(shu)據(ju)庫(ku)(ku),還是放在MySQL這(zhe)樣(yang)(yang)的傳(chuan)統數(shu)(shu)據(ju)庫(ku)(ku)中(zhong)(zhong)。這(zhe)種離(li)(li)散型的時序(xu)數(shu)(shu)據(ju),雖然(ran)它的時間(jian)間(jian)隔很大(比如3分鐘才(cai)產生一個(ge)數(shu)(shu)據(ju)),但(dan)是由于(yu)工業領域數(shu)(shu)據(ju)的特(te)殊性(xing),使得傳(chuan)統的行式數(shu)(shu)據(ju)庫(ku)(ku)特(te)別不適應(ying)工業數(shu)(shu)據(ju),數(shu)(shu)據(ju)庫(ku)(ku)模型特(te)別難(nan)設計。
比如工業(ye)生(sheng)產系統中(zhong),有的設備產生(sheng)電(dian)(dian)壓、頻率數(shu)(shu)據;有的產生(sheng)電(dian)(dian)流、功率數(shu)(shu)據;有的產生(sheng)壓力、溫度(du)數(shu)(shu)據。這(zhe)些數(shu)(shu)據類型各占一列放在同(tong)一張表中(zhong),必定造成每一行都有大量的空列,對(dui)數(shu)(shu)據庫的性能影響很(hen)大。
另一(yi)個(ge)(ge)(ge)方案就(jiu)是(shi)各個(ge)(ge)(ge)數(shu)據(ju)獨立(li)占(zhan)一(yi)行,我們實(shi)際系(xi)(xi)統中就(jiu)是(shi)這么設(she)計的,每一(yi)行只有(you)兩個(ge)(ge)(ge)有(you)效核心列:時(shi)間、值。這種設(she)計會造成(cheng)大(da)量重復(fu)的時(shi)間數(shu)據(ju),數(shu)據(ju)行數(shu)成(cheng)百、成(cheng)千倍的增加,同樣對(dui)數(shu)據(ju)庫的性能影響(xiang)也很大(da),它唯一(yi)給系(xi)(xi)統帶(dai)來的好(hao)處是(shi)擴展(zhan)靈活。
因此,傳統行(xing)式數據庫在(zai)工業領域是(shi)很(hen)難(nan)設(she)計出完美方(fang)案的(de)。
而像TDengine數(shu)據庫(ku)這樣(yang)的(de)列(lie)式數(shu)據庫(ku)則可以(yi)完(wan)美解決(jue)工業領域里面的(de)這些問題(ti)。我(wo)們可以(yi)使用寬表把所有的(de)數(shu)據放(fang)入(ru)同一個(ge)表中,由于(yu)是列(lie)式數(shu)據庫(ku),行中的(de)空列(lie)對數(shu)據庫(ku)性能沒有絲(si)毫影響。也可以(yi)把不同的(de)分類(lei)數(shu)據放(fang)在同一個(ge)模型中(但實際表可能有多(duo)個(ge)),然后用BigTable技術將多(duo)個(ge)表的(de)數(shu)據匯聚(ju)到(dao)一個(ge)大表中,提(ti)升(sheng)查詢效率。
未來規劃
TDengine數據(ju)庫(ku)(ku)是為時序數據(ju)而生的(de),因(yin)此,未來我們(men)的(de)系(xi)統,離散的(de)時序數據(ju)也將逐(zhu)步放(fang)入TDengine數據(ju)庫(ku)(ku)。我們(men)準備利用TDengine的(de)技術(shu)特性,重新設計數據(ju)庫(ku)(ku)模型,使這部分(fen)數據(ju)的(de)寫入和查詢效率(lv)產(chan)生翻(fan)天覆地(di)的(de)變化(hua)。


























