時間序列數(shù)據(jù)庫的數(shù)據(jù)集成策略
譯文隨著數(shù)字化轉(zhuǎn)型進入更多行業(yè),產(chǎn)生的數(shù)據(jù)量呈指數(shù)級增長。因此,以不同的格式和結(jié)構(gòu),從不同來源收集如此大量數(shù)據(jù)的數(shù)據(jù)??集成??策略,是當今數(shù)據(jù)工程團隊的主要關(guān)注點。傳統(tǒng)的數(shù)據(jù)集成方法主要側(cè)重于將高度結(jié)構(gòu)化的數(shù)據(jù)整理到數(shù)據(jù)倉庫中,難以處理新數(shù)據(jù)集的數(shù)量和異構(gòu)性。
另一方面,時序數(shù)據(jù)帶來了額外的復(fù)雜性。從本質(zhì)上講,每個時序數(shù)據(jù)點的值會隨著時間的推移而減少,因為數(shù)據(jù)的粒度會隨著數(shù)據(jù)過時而失去相關(guān)性。因此,團隊必須仔細規(guī)劃數(shù)據(jù)集成到時間序列數(shù)據(jù)庫 (TSDB) 中的策略,以確保分析近乎實時地反映趨勢和情況。
在本文中,我們將研究一些最流行的 TSDB 數(shù)據(jù)集成方法:
鑒于對時間序列數(shù)據(jù)的實時洞察需求,大多數(shù)現(xiàn)代事件驅(qū)動架構(gòu)都使用 CDC 實現(xiàn)數(shù)據(jù)流。為了說明它在實踐中是如何工作的,我們將通過??QuestDB(快速TSDB??)的參考實現(xiàn)來展示CDC如何靈活地處理時間序列數(shù)據(jù)源的需求。
提取、轉(zhuǎn)換、加載 (ETL)
ETL 是一種傳統(tǒng)且流行的數(shù)據(jù)集成策略,它涉及將數(shù)據(jù)加載到目標系統(tǒng)(通常是數(shù)據(jù)倉庫)之前首先將數(shù)據(jù)轉(zhuǎn)換為預(yù)定結(jié)構(gòu)。
ETL 的主要優(yōu)點之一是它提供了最高程度的定制。由于數(shù)據(jù)首先被提取到暫存區(qū)域,在那里它被轉(zhuǎn)換為干凈的標準化格式,ETL 系統(tǒng)可以處理各種格式和結(jié)構(gòu)。此外,將數(shù)據(jù)加載到數(shù)據(jù)倉庫后,數(shù)據(jù)科學(xué)團隊可以運行高效的查詢和分析。最后,鑒于ETL生態(tài)系統(tǒng)的成熟,有大量的企業(yè)級工具可供選擇。
另一方面,ETL 的維護需要大量資源和時間。清理和轉(zhuǎn)換數(shù)據(jù)的邏輯可能很復(fù)雜,計算成本很高。這就是為什么大多數(shù)ETL系統(tǒng)通常是面向批處理的,只定期將數(shù)據(jù)加載到倉庫中。隨著數(shù)據(jù)量和數(shù)據(jù)來源的增長,這可能會成為瓶頸。
鑒于這些特性,ETL 系統(tǒng)最常用于在分析之前需要復(fù)雜轉(zhuǎn)換邏輯的數(shù)據(jù)集。它也適用于不需要實時分析的數(shù)據(jù)集,并且可以存儲以進行長期趨勢分析。
提取、加載、轉(zhuǎn)換 (ELT)
顧名思義,ELT 首先將數(shù)據(jù)加載到目標系統(tǒng)(通常是數(shù)據(jù)湖)中,然后在系統(tǒng)本身內(nèi)執(zhí)行轉(zhuǎn)換。鑒于目標系統(tǒng)負責(zé)處理快速加載和轉(zhuǎn)換,ELT 管道通常利用基于云的現(xiàn)代數(shù)據(jù)湖來處理要求。

與 ETL 管道相比,ELT 系統(tǒng)可以提供更實時的數(shù)據(jù)分析,因為原始數(shù)據(jù)是動態(tài)攝取和轉(zhuǎn)換的。大多數(shù)基于云的數(shù)據(jù)湖都提供 SDK 或端點,以微批量高效攝取數(shù)據(jù),并提供幾乎無限的可擴展性。然而,ELT并非沒有缺點。由于轉(zhuǎn)換由目標系統(tǒng)完成,因此,此類操作受到數(shù)據(jù)湖支持的功能的限制。如果需要更復(fù)雜的轉(zhuǎn)換邏輯,可能需要執(zhí)行其他步驟來重新提取數(shù)據(jù)并以更友好的格式存儲數(shù)據(jù)。
對于大多數(shù)用例,ELT 是比 ETL 更有效的數(shù)據(jù)集成策略。如果您的應(yīng)用程序可以利用基于云的工具并且不需要復(fù)雜的處理,那么 ELT 可能是近乎實時地處理大量數(shù)據(jù)的絕佳選擇。
變更數(shù)據(jù)捕獲 (CDC)
對于新項目,團隊可以計劃將 TSDB 用作 ETL 或 ELT 管道中的目標系統(tǒng)之一。但是,對于現(xiàn)有項目,遷移到 TSDB 或?qū)?TSDB 添加到組合中可能是一個挑戰(zhàn)。首先,可能需要修改或使用新的驅(qū)動程序/SDK 將數(shù)據(jù)流式傳輸?shù)?TSDB。即使支持相同的驅(qū)動程序,數(shù)據(jù)格式也可能需要更改以充分利用 TSDB 功能。CDC工具可用于彌補這一差距。
CDC 原則上很簡單:Debezium 等 CDC 工具會持續(xù)監(jiān)控源系統(tǒng)中的更改,并在發(fā)生更改時通知數(shù)據(jù)管道。導(dǎo)致更改的應(yīng)用程序通常甚至不知道有一個 CDC 進程在監(jiān)聽更改。這使得 CDC 非常適合將新的實時數(shù)據(jù)管道集成到現(xiàn)有架構(gòu)中,因為它需要對現(xiàn)有應(yīng)用程序進行少量更改或無需更改。因此,CDC 可以與 ETL 或 ELT 管道結(jié)合使用。例如,源系統(tǒng)可以是SQL RDBMS(例如MySQL,PostgreSQL等)或NoSQL DB(例如MongoDB,Casandra),其中一個目標系統(tǒng)可以是TSDB以及其他數(shù)據(jù)湖或倉庫。

使用 CDC 進行數(shù)據(jù)集成的主要優(yōu)點是它提供實時數(shù)據(jù)復(fù)制。與使用批處理的傳統(tǒng) ETL 和 ELT 系統(tǒng)不同,對源系統(tǒng)的更改會連續(xù)流式傳輸?shù)揭粋€或多個目標系統(tǒng)中。這對于近乎實時地跨多個數(shù)據(jù)庫復(fù)制子集或整個數(shù)據(jù)非常有用。目標數(shù)據(jù)庫甚至可能位于不同的地理區(qū)域或用于不同的目的(即長期存儲與實時分析)。對于值隨時間的變化通常最有用的時序數(shù)據(jù),CDC 可以有效地捕獲該增量以獲得實時見解。
CDC 的參考實施

Java Spring 應(yīng)用程序?qū)⒐善眱r格信息發(fā)布到 PostgreSQL 中。然后,Debezium Connector 從 PostgreSQL 讀取更改,并將其發(fā)布到 Kafka 上。另一方面,QuestDB的Kafka連接器從Kafka主題中讀取并將它們流式傳輸?shù)絈uestDB。
在這個參考架構(gòu)中,Java Spring 應(yīng)用程序正在將數(shù)據(jù)轉(zhuǎn)換并加載到 PostgreSQL 上,然后再復(fù)制到 TSDB 進行進一步分析。如果需要更像ELT的管道,來自另一個提供商的原始數(shù)據(jù)可以直接加載到PostgreSQL上,并在以后的QuestDB中轉(zhuǎn)換。
使用此架構(gòu)需要注意的重要一點是,CDC 可以與現(xiàn)有系統(tǒng)無縫集成。從應(yīng)用程序的角度來看,它可以保留PostgreSQL的事務(wù)保證,同時在管道中添加一個新的TSDB組件。
結(jié)論
對于使用 TSDB 存儲和分析時序數(shù)據(jù)的組織來說,數(shù)據(jù)集成起著重要作用。在本文中,我們探討了使用 ETL 或 ELT 的一些優(yōu)點和缺點。我們還研究了如何將 CDC 與這些管道結(jié)合使用,以提供到 TSDB 的實時復(fù)制。
鑒于時間序列數(shù)據(jù)的特殊性,使用 TSDB 正確存儲和分析它們非常重要。如果是要從頭開始構(gòu)建,請考慮構(gòu)建 ELT 管道以將數(shù)據(jù)流式傳輸?shù)?TSDB。要與現(xiàn)有系統(tǒng)集成,請考慮利用 CDC 工具來限制對當前架構(gòu)的中斷。
























