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