導讀:在拓斯達的智能工廠整體解決方案項目中,傳統的關系型數據庫已經無法高效處理時序數據,在加載、存儲和查詢等多個方面都遇到了挑戰,最終他們選擇了 TDengine 來匹配工業傳感器數據的應用分析場景。本文將講述他們應用 TDengine 的具體實踐。
企業簡介
廣東拓斯達科技股份有限公司(簡稱:拓斯達,股票代碼:300607)是廣東省首家登陸創業板的機器人骨干企業。拓斯達堅持“讓工業制造更美好”的企業使命,通過以工業機器人、注塑機、CNC為核心的智能裝備,以及控制、伺服、視覺三大核心技術,打造以核心技術驅動的智能硬件平臺,為制造企業提供智能工廠整體解決方案。
項目介紹
在工業領域, 生產、測試、運行階段都可能會產生大量帶有時間戳的傳感器數據,這都屬于典型的時序數據。時序數據主要由各類型實時監測、檢查與分析設備所采集或產生,涉及制造、電力、化工、工程作業等多個行業,具備寫多讀少、量非常大等典型特性。
在我們的業務中,傳統的關系型數據庫(Relational Database)已經無法高效處理時序數據,在加載、存儲和查詢等多個方面都遇到了挑戰。主要問題可以匯總如下:
● 寫入吞吐低:單機寫入吞吐量低,很難滿足時序數據千萬級的寫入壓力;
● 存儲成本大:在對時序數據進行壓縮時性能不佳,需占用大量機器資源;
● 維護成本高:單機系統,需要在上層人工進行分庫分表,維護成本高;
● 查詢性能差:海量實時數據的聚合分析性能差。
為了更好地滿足時序數據的處理需求,我們決定進行數據庫選型調研,最終選擇了時序數據庫(Time-Series Database)TDengine。事實證明,TDengine 針對時序數據的寫入、存儲、索引、查詢等方面都進行了特定的優化,從而實現了更優的數據加載、數據壓縮、查詢寫入性能,非常匹配工業傳感器數據的應用分析場景。
01、選擇 TDengine 的理由
與通用數據庫相比,TDengine 的壓縮率表現驚人,核心原因是其采用列式存儲,而且采用了二階段壓縮策略,還針對不同數據類型采取了不同的壓縮算法,這種壓縮機制使其壓縮率遠超其他數據庫。
此外 TDengine 還擁有極高的讀寫性能,并且讀寫速度受數據存儲規模的影響微乎其微,要知道通用數據庫的數據量一旦過百萬級,讀寫速度就會有明顯下降,之前我們做過一次 MySQL 批量插入數據的測試,性能差距明顯,這也是在大量級數據存儲下我們會選擇 TDengine 的重要原因之一。具體來說,TDengine 優勢如下:
● 數據的讀寫速度快且自帶時間戳,使用 SQL 進行數據庫操作,簡單易學,支持復雜查詢
● 數據壓縮率高,大量級的數據也不會占據過多存儲空間,可導出數據進行備份
● 擁有交流社區和交流群,遇見問題可以和 TDengine 的其他使用者一起探討,而且官方的同學也能提供及時的幫助
當然,世上沒有完美的數據庫,我們在應用之后總結出了兩點待改進的地方:
● 無法使用可視化軟件如 Navicat 等進行數據庫操作(TDengine GUI)
● 目前還沒有 Windows 版的服務端,像我們上一個客戶,只在本地 Windows 上使用程序,在沒有安裝虛擬機和部署到服務器的情況下,就無法部署 TDengine
但每一款產品都是在發現問題和改進問題的步伐中逐漸進步的,而且對于我們的業務實現來說,TDengine 不存在明顯的短板。沒有最優的數據庫,在場景匹配的情況下,我們最終采用了 TDengine。
02、落地實踐
● 平臺架構
我們是通過網關采集設備數據推送到 MQTT,Java 后端監聽到后會寫入 TDengine,在后端按需求查詢處理后再把數據返回給前端。
具體來說,網關會先讀取后臺發布的上行規則,在采集到設備數據后,使用上行規則對數據進行處理計算后再將結果返回給下行規則模塊,后臺監聽到后,會連接 TDengine 進行數據庫表的創建修改和數據寫入。之前在云平臺我們使用過 Kafka 進行數據的發布訂閱,現在所有環境都改為 MQTT 了。
● 超級表及建模思路
在應用 TDengine 時,我們建立了流水數據庫 "iot_platform" 用來存儲網關傳來的數據,便于日后查詢使用。我們遵循“一個采集點一張表,一類數據一個超級表”的思路來建表,在具體實踐上設計了兩張超級表,一張是用于存儲 log 指令內容的“logs”表,另一張是用于存儲其它指令內容的“datas”表,數據類型基本為電流電壓、設備狀態等。在進行數據存儲時首先會對數據加以判斷,再決定將數據存儲到哪張表里。
03、落地效果
運行一段時間后,TDengine 的查詢、寫入速度完全可以滿足我們目前的客戶需求,最慢的分鐘級,最快的能達到 1 秒一條;一個設備一天最多能寫入近十萬條數據,近千個設備同時寫入也完全沒有問題,相較于之前,寫入速度提升了數十倍。查詢數據在以月為單位的時間范圍內沒有過于明顯的延遲,整體的數據壓縮比大概是 1/10,目前每天產生的數據量在數 G 左右。
● 流水數據查詢
查詢某一時間段內的流水數據,使用查詢語句:
● 聚合函數計算一天的數據
使用 TDengine 的函數計算每天的用電量,再通過每天的去計算月和年數據,查詢語句為:
● 計算某一時間段內的數據
04、寫在最后
在工業互聯網快速發展的大背景下,工業生產現場投放了大量的設備傳感器和監控系統,二者提供的實時數據能夠反映設備的狀態和生產的進度,其中的大多數據都是按照時間順序形成的實時數據,這些海量實時數據有著多樣化的分析需求和重要的參考價值。
未來希望 TDengine 可以提供更復雜的流式計算、查詢分析以及監測預警等能力,可以為產品的可視化運維、預測性維護、遠程智能管理等方面提供數據依據,從而降低人員、時間等成本,加速工業化與信息化的深度融合,促進復雜重型裝備制造業的轉型升級,產生社會經濟效益。
(文章來源:TDengine)