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