千億級工業大資料的最優方案!智光電氣的時序資料庫應用

TDengine發表於2023-12-18

小T導讀

此前,智光電氣(股票程式碼:002169)子公司智光研究院在工業專案中使用基於 Apache Hadoop 的 CDH 叢集來做時序業務資料的處理,但由於資料量級太大,處理佔用了大量資源,導致叢集有發生崩潰的風險。在此背景下,智光研究院選擇應用 TDengine 進行技術升級,併產出本文分享應用經驗。

作者:陳曉琪,智光研究院架構師,行業內多年開發與架構經驗。

當前 TDengine 已成功應用於我司多個工業專案中,涵蓋數萬臺各類工業裝置的資料儲存與查詢。作為資料中臺,TDengine 為上層應用提供了高效的歷史資料查詢,精確到秒級和分鐘級粒度,幫助我們大幅提升了應用效率,同時減少了硬體和人力資源的消耗。

選型背景

在使用 TDengine 之前,我們使用的是基於 Apache Hadoop 的 CDH 叢集。但是由於時序業務資料的量級太大,處理它們佔用了太多的資源,這也導致叢集的不穩定性增加,有頻繁發生崩潰的風險。

因此,我們急需一款時序資料庫(Time Series Database,TSDB)進行技術升級。經過充分測試後,團隊最終決定把由 HBase 處理的、資料量最大的時序資料業務抽離出來,引入 TDengine 來降低 Hadoop 叢集的壓力,成為獨立出來的資料中臺。

我們的裝置資料首先透過邊緣閘道器進行採集,然後透過 MQTT 協議上報到工業網際網路平臺,報上來的資料經過物模型解析後傳送到 Kafka 叢集,再把原始資料和經過降取樣計算的分鐘級資料寫入到 TDengine 叢集當中,以實現高效的資料儲存和查詢。

經驗分享

從一個時序資料庫的初學者到使用者,我們最大的心得就是:

資料建模可以說是最重要的一個環節,也是關乎是否能夠順利用好 TDengine 的根基。

考慮到對降取樣查詢的大量需求,我們經過實際測試後發現,將這些計算量完全交給 TDengine 來做實時計算是不現實的。在此背景下我們選擇在應用層先做好一層降取樣計算,再寫入資料庫。為此我們將資料分為了原始資料和分鐘級資料兩類,對應到 TDengine 當中:iotdb 是原始資料,processeddb 是分鐘級庫。這種資料分類和儲存方式也更加符合我們的需求。

當全量資料匯入之後(幾千億行),我們又發現了新的查詢效能問題,當時還以為 TDengine 的效能已經封頂了。之後在 TDengine 官方團隊的協助定位下才找到核心問題——分鐘級庫與原始資料的寫入頻率差異過大,不能公用一套引數配置。

為了解決這一問題,後面官方根據我們實際的業務場景,分別對不同型別的資料進行建庫建表,做了針對性的建模最佳化。然後我們又耐下心來,再次重新匯入全量資料。

改造效果

經過官方協助最佳化後,資料塊變得更加緊密,壓縮率和查詢寫入效能均得到了大幅提升。

最終的成果如下:

寫入儲存方面,同樣是列式儲存,以半年的資料作為比較,三副本的 HBase 的總資料量佔用是 10TB,TDengine 三副本的磁碟佔用只有 2TB,儲存成本僅為 HBase 的 20 %。(由於和其他應用共用,記憶體、CPU 方面不好估算,但成本均大幅降低)

在查詢上,我們的業務主要就是針對 rundata_t1m(分鐘級資料)、rundata(原始資料)這兩張千億級別的大型超級表的篩選、過濾、降取樣。應用的查詢效能和 SQL 篩選的時間範圍相關較大,整體上的耗時大概在毫秒級至 2 秒內。

具體展示如下:

  • 分鐘級資料的 5 分鐘級資料查詢(取 5 分鐘內最後的值)
select tbname, _wend - 1 as ts, LAST(val) AS val from rundata_t1m where tbname in ('b5Sk4IV6ld6-LErYYdQ1-ProcUsedPercent') and ts >= 1698768000000 and ts <= 1701100799000 partition by tbname interval(5m, 1a);

  • 分鐘級資料的 15 分鐘級資料查詢(取 15 分鐘內最後的值)
select tbname, _wend - 1 as ts, LAST(val) AS val from rundata_t1m where tbname in ('b5Sk4IV6ld6-LErYYdQ1-ProcUsedPercent') and ts >= xxx and ts <= xxx partition by tbname interval(15m, 1a);

  • 原始資料的秒級資料查詢
select tbname, _wend - 1 as ts, LAST(val) AS val from rundata where tbname in ('b5Sk4IV6ld6-LErYYdQ1-ProcUsedPercent') and ts >= xxx and ts <= xxx partition by tbname interval(1s, 1a);

千億級工業大資料的最優方案!智光電氣的時序資料庫應用 - TDengine Database 時序資料庫


寫在最後

TDengine 作為一款出色的國產時序資料庫,在實際應用中真正地為我們提供了巨大幫助。因此,我們決定整理成文,希望能夠吸引更多的企業和開發者加入我們的行列,共同探索 TDengine 的優勢和潛力。讓我們一起共同推動國產資料庫技術的發展!

企業簡介:

智光研究院(廣州)有限公司【智光電氣(股票程式碼:002169)下屬子公司】,是一家在能源動力技術領域具有深厚行業背景和創新研發能力的應用技術研究機構。憑藉豐富的行業背景和創新研發能力,智光研究院在綜合能源工業網際網路平臺應用、大型工業裝置狀態監測和智慧運維管理、能源系統數字化管理和能量最佳化、新能源、儲能、電動化等方面取得了多項成果。目前已成功投入使用綜合能源服務工業網際網路平臺和多個垂直領域應用系統。

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70014783/viewspace-3000470/,如需轉載,請註明出處,否則將追究法律責任。

相關文章