DolphinDB 作為集成了高容量高速度流數據分析系統和強大編程語言的一站式解決方案,旨在為用戶提供快速存儲、檢索、分析和計算龐大的結構化數據服務。本文將提供一個輕量化的工業試驗平臺數據處理解決方案,快速簡單地實現海量數據采集、存儲、處理和分析,幫助企業提高產品的質量和競爭力。
1. 場景介紹
工業試驗平臺在工業測試領域廣泛應用,它是一種集成了各種傳感器、數據采集器、控制器、計算機等設備的系統,可以提供模擬高速、高溫、高濕、高壓等各種從簡單機械到復雜化學、生物的工業測試環境,并能對各種類型的產品進行全面、準確、可靠的測試。其典型應用場景包括汽車工業、航空航天、能源電力、醫療化工等領域。
1.1 場景特點
工業試驗平臺的數據存儲與處理面臨多方面的挑戰:
·來自不同設備、不同頻率的多源異構數據接入與存儲
·平臺需要對所有可能影響結果的傳感器和儀器設備進行可用性監控、故障診斷和健康管理,以保障試驗結果的準確性。
·考慮到效率和成本,試驗通常在短時間內進行,但會生成海量的測試數據,因此系統需要支持千萬點每秒的高頻寫入。
·最終試驗結果通常是多維度的,需要系統具備復雜的計算和分析能力。以航空器、車輛載具的故障模式影響及危害度分析(FMECA)為例,試驗結果可能包括故障模式清單、危害性矩陣圖以及 FMEA/CA 表等。因此,流式計算和復雜指標計算的能力對于平臺至關重要。
1.2 解決方案
上述工業試驗平臺在數據存儲與處理時所面臨的問題,可由 DolphinDB 的數據接入、分布式存儲和流計算功能為支撐,搭建以下解決方案:
·多源異構數據融合:依托于豐富的插件生態,DolphinDB 既支持 Kafka、MQTT、MySQL、Oracle 等外部數據源的寫入,也支持批量文件寫入,實現了不同頻率、類型設備的數據寫入與融合。
·實時異常檢測:DolphinDB 實時計算引擎用簡單表達式定義復雜異常規則,實時篩查狀態異常數據,保障設備的正常運轉。
·實時計算平臺:DolphinDB 內置豐富的函數和流計算引擎,可完成時序數據的 ETL、多維度聚合分析和計算、實時預警和機器學習等實時計算任務。
2. 方案實施
本章將通過 DolphinDB 快速簡單地實現海量數據的采集、存儲、處理和分析。首先介紹 DolphinDB 的安裝和部署,講解數據建模的過程,接著使用 DolphinDB 實現數據回放、狀態保持計算、波形錄制等多種功能。
2.1 安裝部署
1.下載官網社區最新版,建議 2.00.10 及以上版本。下載鏈接:DolphinDB 下載
2.Windows 操作系統下的解壓路徑不能包含空格,避免安裝到 Program Files 路徑下。詳細步驟可以參考官網教程:單節點部署與升級
3.本次測試使用免費的社區版,企業版 license 可申請免費試用。
安裝及測試過程中,有任何問題,可添加小助手(dolphindb1)咨詢。
2.2 數據建模
在該案例中,1臺設備有5000個測點,每個測點的采集頻率為50Hz(即每秒采集50次)。我們使用寬表進行建模,它包含5002個字段,分別為時間戳、設備號和測點1到測點5000.
首先建立一個組合分區的分布式數據庫,以小時和設備號哈希值為組合分區依據,通過時間戳和設備號進行分區索引。
第一步:建庫
在此處,我們采用時間分區和哈希分區組合的方式進行數據切分和建模。
具體而言,當設備產生的數據量在每小時、每天、每月、每年等時間間隔內持續穩定在100MB到1GB的最佳實踐范圍內時,我們僅使用時間值作為分區依據進行數據建模。如果時間分區的大小超過1GB,則可以根據哈希值來建立第二級哈希分區。哈希分區將字符串或數字等數據類型轉換成哈希值,并將相同哈希值的數據分配到同一分區內,以實現數據切分。簡單來說,如果我們希望將第一級分區切分成10份,則第二級分區可以設置為哈希5分區。分區教程可見:DolphinDB 分區教程
在本案例中,每秒會生成50條記錄,即每小時將生成180.000條記錄。因此,每小時的數據量大小為3.35GB。對于每天產生的數據,我們會首先進行小時分區切分,然后對于每個小時的數據,會基于設備id的哈希值再進行切分。最終,可以通過時間戳和設備id進行分區索引。
第二步:建表
表的信息如下:
第三步:數據接入
DolphinDB 支持對接消息中間件和標準協議實時接入試驗平臺數據,以用于實時監控預警等場景。也支持批量導入文件,在試驗完成后導入數據進行分析,用于不需要實時監控的場景,以減輕系統壓力。詳情見DolphinDB 數據導入概述及DolphinDB 插件消息中間件。
在本教程中,我們使用自定義函數模擬設備 d001 實時生成一小時數據,共180.000條數據,將生成的數據實時寫入 DolphinDB 數據庫中,并通過數據回放,展示實時流計算功能。詳細的實現過程請參考文章末尾的完整示例代碼。
2.3 功能實現
DolphinDB 作為集成了高容量高速度流數據分析系統和強大編程語言的一站式解決方案,旨在為用戶提供快速存儲、檢索、分析和計算龐大的結構化數據服務。在以下內容中,我們將介紹 DolphinDB 在 SQL 查詢、數據分析、數據導出和備份、數據導入和備份恢復、關系模型、數據回放、波形錄制、存儲過程、狀態保持計算、時間序列聚合引擎和磁盤查詢等方面所提供的豐富功能。
以下各節中的代碼僅展示了實現各項功能的核心語句,詳細的實現過程請參考文章末尾的完整示例代碼。有關 DolphinDB 的詳細文檔,請參閱 DolphinDB 文檔中心。
2.3.1 SQL查詢
DolphinDB 具有豐富而多樣化的查詢功能,其中包括總數查詢、條件查詢、單點查詢和范圍查詢等多種功能,可以滿足客戶的不同查詢需求。并且,DolphinDB 能夠輕松地處理海量數據,實現毫秒級的查詢響應。
2.3.2 數據分析(降采樣,滑動平均計算)
降采樣是指將數字信號的采樣率降低的過程,即通過去除部分采樣點來減少信號的采樣率。降采樣通常用于降低信號的復雜度,以便減少計算量和存儲空間。DolphinDB 為用戶提供了 bar 函數,能夠輕松實現降采樣過程,幫助用戶有效管理大規模數據。
滑動平均,也叫做指數加權平均,可以用來估計變量的局部均值,使得變量的更新與一段時間內的歷史取值有關。通過 DolphinDB 提供的 mavg 函數,用戶能夠使用一條語句輕松實現滑動平均的計算,這極大地提高了數據的處理效率。
降采樣圖像
滑動平均圖像
2.3.3 數據導出和導入
為了方便用戶在不同數據源和目標之間進行數據轉換和傳輸,DolphinDB 提供了多種數據導入導出方式。在數據導出方面,DolphinDB 支持兩種方式:使用 saveTable 將一個表對象以二進制形式保存到文件中,或使用saveText將數據保存到文本文件中。
DolphinDB 還提供了多種靈活的數據導入方法,以幫助用戶輕松地從多個數據源導入海量數據。對于本地數據,DolphinDB 提供了兩種方式:CSV 文本文件導入和二進制文件導入。對于外部數據,DolphinDB 支持多種方式:二進制文件導入,ODBC、MySQL、MongoDB、HBase 等第三方數據庫導入,還支持連接消息中間件以發布和訂閱消息。
2.3.4 數據備份和備份恢復
DolphinDB 提供了簡單易用的數據備份和恢復功能,幫助用戶保護重要數據。使用 DolphinDB 編程語言,用戶可以自定義所需的備份策略和恢復方案。DolphinDB 以分區為單位進行數據備份,每個分區備份為一個數據文件。用戶可以使用 backup 函數指定要備份的數據庫、表或分區,以及備份文件的路徑。使用 migrate 函數可以恢復數據庫中已備份的數據。
2.3.5 關系模型
DolphinDB 對關系模型的支持包括以下幾點:
·除了包含時間戳的時序數據,還支持存儲和處理不含時間戳的關系型數據
·支持標準的 SQL 語言。包括常用的 select、insert、update 和 delete 等操作,group by 和 order by 等子局,還擴展了context by 和 pivot by 以擴展數據的分析能力
·支持復雜的多表關聯,包括 inner join、left join、left semijoin 和 full join,已經拓展的 asof join 和 window join以便用戶能夠方便地將不同數據表中的數據進行關聯和整合。
這些功能的支持使得 DolphinDB 能夠更好地滿足用戶對于數據處理和分析的需求,提高工作效率和數據處理的準確性。
2.3.6 數據回放
DolphinDB 提供了歷史數據回放的功能。該功能可以幫助用戶更加方便地發現歷史數據中的異常,從而有助于排查試驗故障。具體實現方式是通過 replay 函數,將內存表或數據庫表中的記錄按照一定速率寫入到目標表中,以模擬實時數據流不斷注入目標表的場景。
replay 函數支持單表回放和多表回放兩種模式。在最基礎的單表回放模式中,一個輸入表將被回放至一個具有相同表結構的目標表中。而在多表回放模式中,多個輸入表將被回放至多個目標表中,且輸入表與目標表一一對應。
通過 DolphinDB 的歷史數據回放功能,用戶可以更加靈活地進行數據分析,并且能夠更加快速地定位數據異常問題。這一功能的應用范圍非常廣泛,可以被廣泛應用于各種數據分析場景中。
數據回放
2.3.7 波形錄制
錄制某段波形數據在工業場景中是一項很常見的需求,錄制關鍵數據可以提高故障排查的效率。例如,當某個指標出現20%的幅度偏移時,記錄前10秒和后10秒內的數據,自動保存備查。在 DolphinDB 中能通過自定義函數輕松實現波形錄制功能,并且可以根據用戶的需求進行個性化功能定制。
2.3.8 存儲過程
2.3.9 狀態保持計算
在工業場景中,統計設備使用時長的需求十分常見。通過對設備使用時長的統計,可以實現設備保養預警和設備生命周期管理,同時也能夠幫助運維人員更好地進行設備維護,從而延長設備的使用壽命。DolphinDB提供了統計設備使用時長的功能,可以為運維人員制定維保計劃提供數據支持,實現預防性維護。
具體實現過程中,設備信息表會記錄不同設備的開關機時間,表中包含時間戳、設備ID和設備狀態三個字段。統計設備使用時長需要計算設備的關機時間和開機時間之差,并將差值進行總和。
DolphinDB 使用列式存儲,可以輕松地計算出每列相鄰元素之間的差值,因此可以快速計算出設備使用時長。相比之下,MySQL 和 PostgreSQL 等傳統的關系數據庫使用行式存儲,需要迭代才能計算出每列相鄰元素之間的差值,這種方法繁瑣復雜且耗時長。
2.3.10 時間序列聚合引擎
DolphinDB 數據庫功能強大,可以在實時數據流計算場景中高效地進行計算。用戶可以通過簡單的表達式實現復雜的流計算。DolphinDB 的流式數據處理引擎能夠實現低延遲高吞吐的流式數據分析,并提供了十種不同的引擎以滿足不同的計算需求。此外,DolphinDB 數據庫支持多種數據終端輸出,如共享內存表、流數據表、消息中間件、數據庫和 API 等。在計算復雜表達式時,用戶還可以通過級聯多個流數據引擎來實現復雜的數據流拓撲。此外,DolphinDB 數據庫還提供了 createTimeSeriesEngine 函數,可以進一步提高計算效率,實現基于時間的滑動窗口或滾動窗口進行實時計算。
3. 性能測試
3.1 測試環境
本文將通過 DolphinDB 數據庫,以腳本的形式實現大型試驗平臺的以上功能。
部署環境如下:
模擬一次持續 1 小時的試驗數據。
3.2 測試結果
我們對 DolphinDB 的性能進行了測試,測試結果如下表。從表格中可以看出,在處理180.000條數據時,DolphinDB 的查詢響應時間均在毫秒級別。這表明 DolphinDB 在處理大規模數據時表現出了出色的性能。
4. 總結
以上為 DolphinDB 在工業試驗平臺的簡單應用,可見 DolphinDB 特別適用于對速度要求極高的低延時或實時性任務,例如基于海量歷史數據的交互式查詢與計算、實時數據處理與監控等。當然上述內容僅僅是一個簡單的 DolphinDB 使用案例,DolphinDB 除了上述簡單的存儲、分析之外,還能支持更加復雜的數據處理和業務邏輯限于篇幅,本文不作過多介紹。感興趣的用戶可查閱 DolphinDB 教程 進行更加深入的了解。
相關稿件