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