1. 程式人生 > 其它 >TDengine 在水電廠畸變波形分析及故障預判系統中的應用

TDengine 在水電廠畸變波形分析及故障預判系統中的應用

使用 TDengine,高效解決高取樣率的原始訊號資料儲存問題。

作者:深圳雙合電機監測和故障預測產品研發團隊

小 T 導讀:深圳雙合電氣股份有限公司成立於 1993 年,是國家級高新技術企業和廣東省專精特新企業。公司致力於電力及工企業系統應用解決方案及相關智慧監測裝置的研究、開發、生產與實施,擁有面向電力系統、發電、石化、冶金、鋼鐵等行業的故障診斷及預警系統系列解決方案。

一、專案背景

水電廠對重要主機裝置已配備基於生產執行控制的計算機監控系統和機組穩定性監測分析系統,主要從振動、氣隙等狀態量對主機裝置的執行狀態進行監測和評估;同時水電廠對水輪發電機組裝設了故障錄波器,用於記錄機組異常和故障時的波形及動作情況,但這些監測手段僅從部分角度對機組狀態進行評估,未能從多維綜合的角度評估機組的安全執行情況。此外,對故障錄波器記錄的大量機組的電氣及保護開關動作資訊,未能挖掘資料的深入價值。

基於現有系統的不足,使用者提出了本專案建設需求,並基於深圳雙合豐富的系統方案解決能力,將本專案交給我司建設。

二、主要挑戰

本專案中,使用者提出的最基本,也最核心的需求是將全廠的電力系統各元件納入系統的監測,並存儲高取樣率的原始訊號資料。有了原始資料,就可以進行各種高階應用分析。

在這個需求中,訊號取樣率是 10K,即每秒鐘產生 1 萬個浮點資料。全廠電力系統元件,初步估算有 500 個訊號通道。這樣 1 天即可產生 1.7T 位元組資料量(10000 * 4 byte * 500 * 24 * 60 * 60)。

巨量的資料,給我們造成兩個難題:一是從監測裝置到系統伺服器的資料傳輸問題;另一個就是資料儲存問題。

第一個難題,基於深圳雙合豐富的裝置研發能力,直接通過硬體傳送鏈路資料很快就解決了。

第二個難題,解決方案就兩個:選擇資料庫儲存或檔案儲存。對於資料庫儲存方案,如此巨量的資料,根據經驗可以知道,常見的主流資料庫很難支撐。而檔案儲存是電力系統這種型別資料通常的儲存方案,於是我們將此方案報給了使用者,不過他們並沒有選擇。一方面是連續、巨量的原始取樣資料儲存成檔案,確實會對後續的資料應用產生諸多不便;一方面是希望系統有一定的創新性。

三、資料庫選型和驗證

使用者反對檔案儲存方案,逼我們又回到資料庫儲存方案上。我們就把目光轉向了新興的資料庫。

經過反覆對比,濤思資料開發的 TDengine 時序資料庫優異的效能指標吸引了我們。我們對資料庫有三個最關心的核心效能指標(寫入能力、查詢效率、儲存能力)。在正式引入 TDengine 之前,我們對這三個指標進行了測試驗證。

我們建了 10 個數據表,每個表 50 個數據列,資料庫採用單機模式。然後編寫模擬程式每張表每秒產生 1 萬行記錄插入到這 10 張表中,並通過 SQL 語句
select count(*) from tablename where ts>now -1s
來驗證當前(1 秒以內)產生的資料是否及時被寫入了資料庫。

如果資料來不及寫入資料庫,資料就會慢慢堆積起來。這樣最新的資料也就無法在資料庫中查到。為了檢查是否存在堆積現象,我們也測試了程式執行多天之後執行該 SQL,結果是當前最新 1 秒內的資料也能在資料庫裡查到,這說明堆積的資料不超過 1 秒。也就表明,資料庫及時寫入了資料,沒有任何延遲。

後來我們又將產生的資料量翻倍,測試結果一樣,說明 TDengine 資料庫的寫入能力非常強悍。

而查詢效率的驗證則相對簡單。我們在已經有了幾十億條記錄的表中隨意查詢幾十萬條記錄,查詢時間均沒超過 1 秒,說明 TDengine 資料庫查詢效率也極其強悍。

再就是對資料庫儲存能力的驗證。根據推算,我們 1 天產生 1.7T 的資料。而我們用 du –sh * 命令去檢視 TDengine 資料庫的資料目錄,24 小時之後再去檢視,發現數據增量約是 1.7T 的 30%左右。這說明 TDengine 的壓縮能力也是比較優異的。

基於上述三個效能指標的優異表現,我們很快決定將 TDengine 資料庫正式引入專案。

四、TDengine 使用體驗

正式使用 TDengine 資料庫後,我們發現 TDengine 的 C++和 Java 介面都簡單清晰,SQL 語法與標準 SQL 基本一樣,學習成本幾乎為 0,使用 TDengine 資料庫沒有給專案帶來額外的工作量和難度。

最終,TDengine 資料庫在該專案中順利投入使用,在現場執行環境的表現,如同我們的驗證測試一樣,擁有優異的寫入能力和快速的查詢能力,可以有力地支撐系統對原始訊號資料進行進一步的分析與應用。

在該專案中,我們只把高取樣的連續取樣資料存入 TDengine 資料庫中,其它離散型時序資料沒有存到 TDengine 資料庫,還是放在 MySQL 這樣的傳統資料庫中。這種離散型的時序資料,雖然它的時間間隔很大(比如 3 分鐘才產生一個數據),但是由於工業領域資料的特殊性,使得傳統的行式資料庫特別不適應工業資料,資料庫模型特別難設計。

比如工業生產系統中,有的裝置產生電壓、頻率資料;有的產生電流、功率資料;有的產生壓力、溫度資料。這些資料型別各佔一列放在同一張表中,必定造成每一行都有大量的空列,對資料庫的效能影響很大。

另一個方案就是各個資料獨立佔一行,我們實際系統中就是這麼設計的,每一行只有兩個有效核心列:時間、值。這種設計會造成大量重複的時間資料,資料行數成百、成千倍的增加,同樣對資料庫的效能影響也很大,它唯一給系統帶來的好處是擴充套件靈活。

因此,傳統行式資料庫在工業領域是很難設計出完美方案的。

而像 TDengine 資料庫這樣的列式資料庫則可以完美解決工業領域裡面的這些問題。我們可以使用寬表把所有的資料放入同一個表中,由於是列式資料庫,行中的空列對資料庫效能沒有絲毫影響。也可以把不同的分類資料放在同一個模型中(但實際表可能有多個),然後用 BigTable 技術將多個表的資料匯聚到一個大表中,提升查詢效率。

五、未來規劃

TDengine 資料庫是為時序資料而生的,因此,未來我們的系統,離散的時序資料也將逐步放入 TDengine 資料庫。我們準備利用 TDengine 的技術特性,重新設計資料庫模型,使這部分資料的寫入和查詢效率產生翻天覆地的變化。


⬇️點選下方圖片檢視活動詳情,把iPhone 13 Pro帶回家!