時(shí)間序列數(shù)據(jù)庫(kù)的數(shù)據(jù)集成策略
譯文隨著數(shù)字化轉(zhuǎn)型進(jìn)入更多行業(yè),產(chǎn)生的數(shù)據(jù)量呈指數(shù)級(jí)增長(zhǎng)。因此,以不同的格式和結(jié)構(gòu),從不同來(lái)源收集如此大量數(shù)據(jù)的數(shù)據(jù)??集成??策略,是當(dāng)今數(shù)據(jù)工程團(tuán)隊(duì)的主要關(guān)注點(diǎn)。傳統(tǒng)的數(shù)據(jù)集成方法主要側(cè)重于將高度結(jié)構(gòu)化的數(shù)據(jù)整理到數(shù)據(jù)倉(cāng)庫(kù)中,難以處理新數(shù)據(jù)集的數(shù)量和異構(gòu)性。
另一方面,時(shí)序數(shù)據(jù)帶來(lái)了額外的復(fù)雜性。從本質(zhì)上講,每個(gè)時(shí)序數(shù)據(jù)點(diǎn)的值會(huì)隨著時(shí)間的推移而減少,因?yàn)閿?shù)據(jù)的粒度會(huì)隨著數(shù)據(jù)過(guò)時(shí)而失去相關(guān)性。因此,團(tuán)隊(duì)必須仔細(xì)規(guī)劃數(shù)據(jù)集成到時(shí)間序列數(shù)據(jù)庫(kù) (TSDB) 中的策略,以確保分析近乎實(shí)時(shí)地反映趨勢(shì)和情況。
在本文中,我們將研究一些最流行的 TSDB 數(shù)據(jù)集成方法:
鑒于對(duì)時(shí)間序列數(shù)據(jù)的實(shí)時(shí)洞察需求,大多數(shù)現(xiàn)代事件驅(qū)動(dòng)架構(gòu)都使用 CDC 實(shí)現(xiàn)數(shù)據(jù)流。為了說(shuō)明它在實(shí)踐中是如何工作的,我們將通過(guò)??QuestDB(快速TSDB??)的參考實(shí)現(xiàn)來(lái)展示CDC如何靈活地處理時(shí)間序列數(shù)據(jù)源的需求。
提取、轉(zhuǎn)換、加載 (ETL)
ETL 是一種傳統(tǒng)且流行的數(shù)據(jù)集成策略,它涉及將數(shù)據(jù)加載到目標(biāo)系統(tǒng)(通常是數(shù)據(jù)倉(cāng)庫(kù))之前首先將數(shù)據(jù)轉(zhuǎn)換為預(yù)定結(jié)構(gòu)。
ETL 的主要優(yōu)點(diǎn)之一是它提供了最高程度的定制。由于數(shù)據(jù)首先被提取到暫存區(qū)域,在那里它被轉(zhuǎn)換為干凈的標(biāo)準(zhǔn)化格式,ETL 系統(tǒng)可以處理各種格式和結(jié)構(gòu)。此外,將數(shù)據(jù)加載到數(shù)據(jù)倉(cāng)庫(kù)后,數(shù)據(jù)科學(xué)團(tuán)隊(duì)可以運(yùn)行高效的查詢和分析。最后,鑒于ETL生態(tài)系統(tǒng)的成熟,有大量的企業(yè)級(jí)工具可供選擇。
另一方面,ETL 的維護(hù)需要大量資源和時(shí)間。清理和轉(zhuǎn)換數(shù)據(jù)的邏輯可能很復(fù)雜,計(jì)算成本很高。這就是為什么大多數(shù)ETL系統(tǒng)通常是面向批處理的,只定期將數(shù)據(jù)加載到倉(cāng)庫(kù)中。隨著數(shù)據(jù)量和數(shù)據(jù)來(lái)源的增長(zhǎng),這可能會(huì)成為瓶頸。
鑒于這些特性,ETL 系統(tǒng)最常用于在分析之前需要復(fù)雜轉(zhuǎn)換邏輯的數(shù)據(jù)集。它也適用于不需要實(shí)時(shí)分析的數(shù)據(jù)集,并且可以存儲(chǔ)以進(jìn)行長(zhǎng)期趨勢(shì)分析。
提取、加載、轉(zhuǎn)換 (ELT)
顧名思義,ELT 首先將數(shù)據(jù)加載到目標(biāo)系統(tǒng)(通常是數(shù)據(jù)湖)中,然后在系統(tǒng)本身內(nèi)執(zhí)行轉(zhuǎn)換。鑒于目標(biāo)系統(tǒng)負(fù)責(zé)處理快速加載和轉(zhuǎn)換,ELT 管道通常利用基于云的現(xiàn)代數(shù)據(jù)湖來(lái)處理要求。
與 ETL 管道相比,ELT 系統(tǒng)可以提供更實(shí)時(shí)的數(shù)據(jù)分析,因?yàn)樵紨?shù)據(jù)是動(dòng)態(tài)攝取和轉(zhuǎn)換的。大多數(shù)基于云的數(shù)據(jù)湖都提供 SDK 或端點(diǎn),以微批量高效攝取數(shù)據(jù),并提供幾乎無(wú)限的可擴(kuò)展性。然而,ELT并非沒(méi)有缺點(diǎn)。由于轉(zhuǎn)換由目標(biāo)系統(tǒng)完成,因此,此類操作受到數(shù)據(jù)湖支持的功能的限制。如果需要更復(fù)雜的轉(zhuǎn)換邏輯,可能需要執(zhí)行其他步驟來(lái)重新提取數(shù)據(jù)并以更友好的格式存儲(chǔ)數(shù)據(jù)。
對(duì)于大多數(shù)用例,ELT 是比 ETL 更有效的數(shù)據(jù)集成策略。如果您的應(yīng)用程序可以利用基于云的工具并且不需要復(fù)雜的處理,那么 ELT 可能是近乎實(shí)時(shí)地處理大量數(shù)據(jù)的絕佳選擇。
變更數(shù)據(jù)捕獲 (CDC)
對(duì)于新項(xiàng)目,團(tuán)隊(duì)可以計(jì)劃將 TSDB 用作 ETL 或 ELT 管道中的目標(biāo)系統(tǒng)之一。但是,對(duì)于現(xiàn)有項(xiàng)目,遷移到 TSDB 或?qū)?TSDB 添加到組合中可能是一個(gè)挑戰(zhàn)。首先,可能需要修改或使用新的驅(qū)動(dòng)程序/SDK 將數(shù)據(jù)流式傳輸?shù)?TSDB。即使支持相同的驅(qū)動(dòng)程序,數(shù)據(jù)格式也可能需要更改以充分利用 TSDB 功能。CDC工具可用于彌補(bǔ)這一差距。
CDC 原則上很簡(jiǎn)單:Debezium 等 CDC 工具會(huì)持續(xù)監(jiān)控源系統(tǒng)中的更改,并在發(fā)生更改時(shí)通知數(shù)據(jù)管道。導(dǎo)致更改的應(yīng)用程序通常甚至不知道有一個(gè) CDC 進(jìn)程在監(jiān)聽(tīng)更改。這使得 CDC 非常適合將新的實(shí)時(shí)數(shù)據(jù)管道集成到現(xiàn)有架構(gòu)中,因?yàn)樗枰獙?duì)現(xiàn)有應(yīng)用程序進(jìn)行少量更改或無(wú)需更改。因此,CDC 可以與 ETL 或 ELT 管道結(jié)合使用。例如,源系統(tǒng)可以是SQL RDBMS(例如MySQL,PostgreSQL等)或NoSQL DB(例如MongoDB,Casandra),其中一個(gè)目標(biāo)系統(tǒng)可以是TSDB以及其他數(shù)據(jù)湖或倉(cāng)庫(kù)。
使用 CDC 進(jìn)行數(shù)據(jù)集成的主要優(yōu)點(diǎn)是它提供實(shí)時(shí)數(shù)據(jù)復(fù)制。與使用批處理的傳統(tǒng) ETL 和 ELT 系統(tǒng)不同,對(duì)源系統(tǒng)的更改會(huì)連續(xù)流式傳輸?shù)揭粋€(gè)或多個(gè)目標(biāo)系統(tǒng)中。這對(duì)于近乎實(shí)時(shí)地跨多個(gè)數(shù)據(jù)庫(kù)復(fù)制子集或整個(gè)數(shù)據(jù)非常有用。目標(biāo)數(shù)據(jù)庫(kù)甚至可能位于不同的地理區(qū)域或用于不同的目的(即長(zhǎng)期存儲(chǔ)與實(shí)時(shí)分析)。對(duì)于值隨時(shí)間的變化通常最有用的時(shí)序數(shù)據(jù),CDC 可以有效地捕獲該增量以獲得實(shí)時(shí)見(jiàn)解。
CDC 的參考實(shí)施
Java Spring 應(yīng)用程序?qū)⒐善眱r(jià)格信息發(fā)布到 PostgreSQL 中。然后,Debezium Connector 從 PostgreSQL 讀取更改,并將其發(fā)布到 Kafka 上。另一方面,QuestDB的Kafka連接器從Kafka主題中讀取并將它們流式傳輸?shù)絈uestDB。
在這個(gè)參考架構(gòu)中,Java Spring 應(yīng)用程序正在將數(shù)據(jù)轉(zhuǎn)換并加載到 PostgreSQL 上,然后再?gòu)?fù)制到 TSDB 進(jìn)行進(jìn)一步分析。如果需要更像ELT的管道,來(lái)自另一個(gè)提供商的原始數(shù)據(jù)可以直接加載到PostgreSQL上,并在以后的QuestDB中轉(zhuǎn)換。
使用此架構(gòu)需要注意的重要一點(diǎn)是,CDC 可以與現(xiàn)有系統(tǒng)無(wú)縫集成。從應(yīng)用程序的角度來(lái)看,它可以保留PostgreSQL的事務(wù)保證,同時(shí)在管道中添加一個(gè)新的TSDB組件。
結(jié)論
對(duì)于使用 TSDB 存儲(chǔ)和分析時(shí)序數(shù)據(jù)的組織來(lái)說(shuō),數(shù)據(jù)集成起著重要作用。在本文中,我們探討了使用 ETL 或 ELT 的一些優(yōu)點(diǎn)和缺點(diǎn)。我們還研究了如何將 CDC 與這些管道結(jié)合使用,以提供到 TSDB 的實(shí)時(shí)復(fù)制。
鑒于時(shí)間序列數(shù)據(jù)的特殊性,使用 TSDB 正確存儲(chǔ)和分析它們非常重要。如果是要從頭開(kāi)始構(gòu)建,請(qǐng)考慮構(gòu)建 ELT 管道以將數(shù)據(jù)流式傳輸?shù)?TSDB。要與現(xiàn)有系統(tǒng)集成,請(qǐng)考慮利用 CDC 工具來(lái)限制對(duì)當(dāng)前架構(gòu)的中斷。