數(shù)據(jù)湖與數(shù)據(jù)倉庫:別再糾結(jié)二選一
數(shù)據(jù)湖與數(shù)據(jù)倉庫:別再糾結(jié)二選一
很多團(tuán)隊(duì)在搭建數(shù)據(jù)平臺時,第一反應(yīng)就是要在數(shù)據(jù)湖和數(shù)據(jù)倉庫之間做個非此即彼的選擇。這種二元對立的思維,恰恰是選型中最常見的認(rèn)知偏差。現(xiàn)實(shí)情況是,現(xiàn)代數(shù)據(jù)架構(gòu)早已不是湖與倉的博弈,而是如何讓兩者協(xié)同工作,解決不同層次的數(shù)據(jù)需求。
從業(yè)務(wù)場景倒推技術(shù)選型
數(shù)據(jù)湖與數(shù)據(jù)倉庫的根本差異,在于它們對數(shù)據(jù)的處理哲學(xué)不同。數(shù)據(jù)倉庫強(qiáng)調(diào)事前建模,數(shù)據(jù)在進(jìn)入系統(tǒng)前就要經(jīng)過清洗、轉(zhuǎn)換,形成結(jié)構(gòu)化的星型或雪花型模式,適合已知的、固定的報表和分析需求。數(shù)據(jù)湖則奉行先存儲后定義,原始數(shù)據(jù)以原生格式存放,等到需要分析時再按需處理,更適合探索性分析、機(jī)器學(xué)習(xí)訓(xùn)練這類不確定場景。
選型的起點(diǎn)不是技術(shù)參數(shù),而是業(yè)務(wù)的實(shí)際痛點(diǎn)。如果團(tuán)隊(duì)每天要處理大量固定格式的銷售報表、財(cái)務(wù)對賬,數(shù)據(jù)倉庫的成熟查詢引擎和嚴(yán)格數(shù)據(jù)質(zhì)量管控能直接提升效率。但如果業(yè)務(wù)部門頻繁提出“能不能看看用戶點(diǎn)擊流里有沒有新規(guī)律”這類開放性問題,數(shù)據(jù)湖的靈活性就派上了用場。一個常見的誤判是,把數(shù)據(jù)湖當(dāng)成萬能存儲,結(jié)果因?yàn)槿狈χ卫恚罱K變成數(shù)據(jù)沼澤。
成本與性能的權(quán)衡點(diǎn)
存儲成本是另一個容易被低估的因素。數(shù)據(jù)倉庫通常依賴高性能列式存儲和專用計(jì)算資源,單位存儲成本遠(yuǎn)高于數(shù)據(jù)湖的對象存儲。對于歷史歸檔數(shù)據(jù)、低頻訪問的日志,放在數(shù)據(jù)湖里能大幅降低總體擁有成本。但性能上,數(shù)據(jù)倉庫的查詢優(yōu)化器、索引機(jī)制、物化視圖等特性,讓復(fù)雜聚合查詢的響應(yīng)時間遠(yuǎn)優(yōu)于數(shù)據(jù)湖上的即時計(jì)算。
這里有一個實(shí)用判斷標(biāo)準(zhǔn):如果分析查詢的響應(yīng)時間要求在兩秒以內(nèi),且查詢模式相對固定,數(shù)據(jù)倉庫是更穩(wěn)妥的選擇。如果容忍十秒以上的查詢等待,或者查詢語句在每次運(yùn)行時都可能變化,數(shù)據(jù)湖的彈性計(jì)算優(yōu)勢就能體現(xiàn)出來。很多企業(yè)采用混合策略,把熱數(shù)據(jù)放在數(shù)據(jù)倉庫,溫冷數(shù)據(jù)放在數(shù)據(jù)湖,通過統(tǒng)一的元數(shù)據(jù)層實(shí)現(xiàn)無縫訪問。
治理能力決定數(shù)據(jù)可用性
數(shù)據(jù)湖的普及一度讓“數(shù)據(jù)民主化”成為口號,但實(shí)踐中,缺乏治理的數(shù)據(jù)湖往往導(dǎo)致用戶找不到可信數(shù)據(jù)。數(shù)據(jù)倉庫在這方面有天生的優(yōu)勢,它的ETL流程強(qiáng)制了數(shù)據(jù)標(biāo)準(zhǔn)化,數(shù)據(jù)血緣、質(zhì)量規(guī)則、權(quán)限管控都有成熟工具支撐。而數(shù)據(jù)湖要實(shí)現(xiàn)同等治理水平,需要額外投入元數(shù)據(jù)管理、數(shù)據(jù)目錄、訪問控制等組件。
選型時,評估團(tuán)隊(duì)的數(shù)據(jù)治理成熟度很關(guān)鍵。如果組織內(nèi)部還沒有建立完善的數(shù)據(jù)標(biāo)準(zhǔn),直接上數(shù)據(jù)湖很可能陷入混亂。相反,如果團(tuán)隊(duì)已經(jīng)習(xí)慣了用SQL做分析,且對數(shù)據(jù)一致性有嚴(yán)格審計(jì)要求,數(shù)據(jù)倉庫的強(qiáng)約束反而能降低運(yùn)維成本。近兩年出現(xiàn)的湖倉一體架構(gòu),正是試圖在兩者之間找到平衡,既保留數(shù)據(jù)湖的存儲彈性,又引入數(shù)據(jù)倉庫的事務(wù)支持和查詢性能。
技術(shù)生態(tài)的兼容性考量
現(xiàn)有技術(shù)棧的兼容性往往被忽略。數(shù)據(jù)倉庫通常與BI工具、報表系統(tǒng)配合更緊密,很多商業(yè)數(shù)據(jù)倉庫提供開箱即用的連接器。數(shù)據(jù)湖則與大數(shù)據(jù)生態(tài)深度綁定,Spark、Flink、Presto等引擎在數(shù)據(jù)湖上的表現(xiàn)更優(yōu)。如果團(tuán)隊(duì)已經(jīng)大量使用Python做數(shù)據(jù)科學(xué)或機(jī)器學(xué)習(xí),數(shù)據(jù)湖對Parquet、Avro等開放格式的原生支持能減少數(shù)據(jù)搬移成本。
另一個容易被忽視的點(diǎn)是數(shù)據(jù)入倉的時效性。傳統(tǒng)數(shù)據(jù)倉庫的批量加載模式,在面對實(shí)時數(shù)據(jù)流時顯得力不從心。數(shù)據(jù)湖配合流式計(jì)算框架,能實(shí)現(xiàn)秒級的數(shù)據(jù)攝入。對于需要實(shí)時決策的場景,比如風(fēng)控、推薦系統(tǒng),數(shù)據(jù)湖的流批一體能力更具優(yōu)勢。但如果是每日一次的T+1報表,數(shù)據(jù)倉庫的批量處理反而更穩(wěn)定可靠。
選型不是終點(diǎn)而是起點(diǎn)
企業(yè)數(shù)據(jù)架構(gòu)的演進(jìn)方向,正在從單一存儲走向多模融合。數(shù)據(jù)湖和數(shù)據(jù)倉庫不再是替代關(guān)系,而是互補(bǔ)組件。一個合理的做法是,先梳理清楚數(shù)據(jù)資產(chǎn)的分類:哪些數(shù)據(jù)需要高一致性、低延遲訪問,哪些數(shù)據(jù)適合低成本歸檔、按需探索。然后根據(jù)這些分類,決定哪些數(shù)據(jù)入倉、哪些入湖,并通過統(tǒng)一的查詢層對外提供服務(wù)。
在具體實(shí)施中,可以從小規(guī)模試點(diǎn)開始。比如先選擇一到兩個業(yè)務(wù)場景,分別用數(shù)據(jù)倉庫和數(shù)據(jù)湖搭建原型,對比實(shí)際使用體驗(yàn)、運(yùn)維成本和查詢性能。這種驗(yàn)證方式比紙上談兵的選型更有說服力。隨著數(shù)據(jù)量的增長和業(yè)務(wù)需求的變化,架構(gòu)也需要持續(xù)調(diào)整,沒有一勞永逸的完美方案。