譯者 | 陳峻
審校 | 孫淑娟
一、云數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)湖和湖倉(cāng)一體之間的區(qū)別
1.數(shù)據(jù)倉(cāng)庫(kù)
作為一種分析類(lèi)中央存儲(chǔ)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)可用于存儲(chǔ)已結(jié)構(gòu)化、且已過(guò)濾的數(shù)據(jù)。而作為數(shù)據(jù)倉(cāng)庫(kù)典型用戶的數(shù)據(jù)分析師,他們通常擁有著豐富的SQL知識(shí)、以及數(shù)據(jù)處理能力。他們通過(guò)對(duì)倉(cāng)庫(kù)里的數(shù)據(jù)進(jìn)行優(yōu)化和轉(zhuǎn)換,可實(shí)現(xiàn)快速地訪問(wèn)、查詢和分析,并在此基礎(chǔ)上獲取洞見(jiàn),并構(gòu)建出儀表板和數(shù)據(jù)報(bào)告,進(jìn)而推動(dòng)業(yè)務(wù)成果的轉(zhuǎn)換。
2.數(shù)據(jù)湖
2000年初,最初被Yahoo和Google等大型互聯(lián)網(wǎng)公司采用的數(shù)據(jù)湖,雖然與數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)收集與存儲(chǔ)功能類(lèi)似,但是,它旨在處理大量原始的、非結(jié)構(gòu)化的、以及半結(jié)構(gòu)化的大數(shù)據(jù)。因此,與倉(cāng)庫(kù)相比,數(shù)據(jù)湖通??梢匀菁{更多的數(shù)據(jù),并能夠處理更多的用例。
在大多數(shù)情況下,各種未經(jīng)處理的原始數(shù)據(jù),會(huì)被直接加載到數(shù)據(jù)湖中,因此它需要具有專(zhuān)業(yè)知識(shí)的數(shù)據(jù)科學(xué)家,對(duì)數(shù)據(jù)進(jìn)行后續(xù)操作和轉(zhuǎn)換。正是由于數(shù)據(jù)湖非常擅長(zhǎng)處理各種實(shí)時(shí)攝取的數(shù)據(jù)流,因此它的一個(gè)典型用例是:以批處理的方式,啟用自助服務(wù)式(self-service)的ELT,并對(duì)數(shù)據(jù)進(jìn)行自動(dòng)化的處理、調(diào)度、構(gòu)建、以及維護(hù)各個(gè)數(shù)據(jù)管道的復(fù)雜性。
3.湖倉(cāng)一體(Data Lakehouse)
不同于簡(jiǎn)單的數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)湖架構(gòu),湖倉(cāng)一體通常被認(rèn)為是一種高度重視開(kāi)放式的數(shù)據(jù)管理新架構(gòu)。它的目標(biāo)是通過(guò)將上述兩者組合到一個(gè)平臺(tái)上,直接對(duì)數(shù)據(jù)湖本身運(yùn)行分析,以消除多個(gè)查詢引擎的繁瑣。
二、什么是Snowflake?
作為一種基于云端的數(shù)據(jù)倉(cāng)庫(kù),Snowflake專(zhuān)為在AWS、Microsoft Azure和Google Cloud Platform(GCP)等主流云服務(wù)提供商上運(yùn)行的數(shù)據(jù)業(yè)務(wù)所構(gòu)建。它是一種軟件即服務(wù)(SaaS)的解決方案,能夠使企業(yè)將收集到數(shù)據(jù)整合到集中位置,以便進(jìn)行分析。
Snowflake被認(rèn)為是云數(shù)據(jù)倉(cāng)庫(kù)行業(yè)中最大的公司之一。它提供了為支持商業(yè)智能用例而構(gòu)建的自助式服務(wù)平臺(tái),并且允許用戶利用SQL來(lái)查詢數(shù)據(jù),并創(chuàng)建可以推動(dòng)業(yè)務(wù)決策的儀表板和報(bào)告。
三、什么是Databricks?
與Snowflake類(lèi)似,Databricks也是一個(gè)基于云端的數(shù)據(jù)平臺(tái)。但是它屬于數(shù)據(jù)湖類(lèi)型,而非數(shù)據(jù)倉(cāng)庫(kù)。當(dāng)然,Databricks如今已擴(kuò)展到了湖倉(cāng)一體化的范疇。如果說(shuō)Snowflake專(zhuān)注于分析和報(bào)告的話,那么Databricks更多重視的是機(jī)器學(xué)習(xí)、數(shù)據(jù)科學(xué)、以及數(shù)據(jù)流使用案例。由于能夠支持多種開(kāi)發(fā)語(yǔ)言,因此Databricks更適合于數(shù)據(jù)工程師和數(shù)據(jù)科學(xué)家。
作為一個(gè)基于Apache Spark的大數(shù)據(jù)平臺(tái),Databricks主要被用于存儲(chǔ)大量未經(jīng)處理的原始數(shù)據(jù)。簡(jiǎn)單而言,它圍繞著Apache Spark的分布式計(jì)算框架,構(gòu)建了數(shù)據(jù)管理層,并消除了人員管理和維護(hù)基礎(chǔ)設(shè)施的負(fù)擔(dān)。
四、架構(gòu)
1.Snowflake
Snowflake是一種基于ANSI SQL的無(wú)服務(wù)器解決方案,并具有完全分離的存儲(chǔ)和計(jì)算處理層。Snowflake利用大規(guī)模的并行處理(Massively Parallel Processing,MPP)來(lái)處理查詢,每個(gè)單獨(dú)的虛擬倉(cāng)庫(kù)(即計(jì)算集群)都在本地存儲(chǔ)著整個(gè)數(shù)據(jù)集的一部分。Snowflake使用微分區(qū)(Micro Partitions)的方式,在內(nèi)部將數(shù)據(jù)組織并優(yōu)化為已壓縮的列格式,以便它們被保存到云端存儲(chǔ)處。
Snowflake能夠以自動(dòng)化的方式,管理文件大小、壓縮、結(jié)構(gòu)、元數(shù)據(jù)、統(tǒng)計(jì)信息、以及其他用戶不可見(jiàn)、且只能通過(guò)SQL查詢和訪問(wèn)到的數(shù)據(jù)對(duì)象。Snowflake中的所有處理,都使用被稱(chēng)為虛擬倉(cāng)庫(kù)的計(jì)算集群來(lái)完成。這些集群往往由多個(gè)MPP節(jié)點(diǎn)所組成。
作為一種SaaS解決方案,Snowflake在后端管理著大量來(lái)自用戶請(qǐng)求、基礎(chǔ)設(shè)施、元數(shù)據(jù)、身份驗(yàn)證、查詢解析、訪問(wèn)控制、以及優(yōu)化等方面的內(nèi)容。由于能夠跑在AWS、GCP和Azure三大云平臺(tái)上,因此Snowflake的倉(cāng)庫(kù)技術(shù)能夠方便用戶非常便捷地使用SQL進(jìn)行快速查詢。
2.Databricks
同屬于SaaS方案且能夠跑在AWS、GCP和Azure的Databricks,卻在架構(gòu)上完全不同。它源于Spark,是一種圍繞著單個(gè)節(jié)點(diǎn)或集群所構(gòu)建的、可以被部署在云端的多語(yǔ)言引擎。Databricks可以運(yùn)行在控制層面和數(shù)據(jù)層面之外。其中,數(shù)據(jù)層面包括了待處理的所有數(shù)據(jù),而控制層面包括了由Databricks管理的所有后端服務(wù)。與Snowflake類(lèi)似,Databricks也是無(wú)服務(wù)器的,因此能夠支持近乎無(wú)限的并發(fā)請(qǐng)求。
總的說(shuō)來(lái),Databricks架構(gòu)包含了如下核心組件:
(1)Databricks的Delta Lake
Delta Lake是Databricks的數(shù)據(jù)倉(cāng)庫(kù)版本。它作為一個(gè)額外的存儲(chǔ)系統(tǒng),運(yùn)行在傳統(tǒng)的數(shù)據(jù)湖之上。Delta Lake的核心是將現(xiàn)有數(shù)據(jù)湖上的流式和批處理統(tǒng)一起來(lái),充當(dāng)Spark計(jì)算和云存儲(chǔ)之間的中間地帶。Delta Lake架構(gòu)包含如下三種類(lèi)型的數(shù)據(jù)表:
- 青銅表:原始數(shù)據(jù)
- 白銀表:稍做“提純”的數(shù)據(jù),但尚未準(zhǔn)備好被使用
- 黃金表:已提純且可以使用的數(shù)據(jù)
Delta在各張表中所保存的所有數(shù)據(jù),都會(huì)以parquet文件形式,被保存在云存儲(chǔ)中。
(2)Databricks的Delta Engine
Delta Engine是一個(gè)與Apache Spark相兼容的高性能查詢引擎,可協(xié)助處理Delta Lake中的數(shù)據(jù)。它通過(guò)其改進(jìn)的查詢優(yōu)化器,針對(duì)SQL和DataFrame的工作負(fù)載,提高了Delta Lake的整體性能。由C++編寫(xiě)的該優(yōu)化器,被策略性地放置在了執(zhí)行層和云對(duì)象存儲(chǔ)之間,充當(dāng)著緩存層和執(zhí)行引擎的作用。
(3)Notebooks
Notebooks包含著可運(yùn)行的代碼、可視化且可描述的文本。它們可以通過(guò)基于Web的界面被訪問(wèn)到。借助各種Notebooks,開(kāi)發(fā)者可以使用Scala、R、SQL、以及Python語(yǔ)言,以協(xié)作的方式構(gòu)建不同的模型。
(4)MLFlow
MLflow是由Databricks創(chuàng)建的另一個(gè)開(kāi)源平臺(tái),可用于配置機(jī)器學(xué)習(xí)的環(huán)境,并從Spark、TensorFlow、ONNX等現(xiàn)有庫(kù)中運(yùn)行測(cè)試,以實(shí)現(xiàn)大規(guī)模、可靠地管理機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)等生命周期。MLFlow具有三個(gè)核心組件,分別是:實(shí)驗(yàn)跟蹤、模型管理和模型開(kāi)發(fā)。
五、可擴(kuò)展性
1.Snowflake
Snowflake具有自動(dòng)擴(kuò)展和自動(dòng)掛起兩種功能,可以在空閑和忙碌期間啟停集群。雖然在Snowflake中,開(kāi)發(fā)者無(wú)法任意調(diào)整節(jié)點(diǎn)的大小,但是可以通過(guò)單擊,來(lái)自動(dòng)擴(kuò)展出多達(dá)10個(gè)倉(cāng)庫(kù)。當(dāng)然,在單個(gè)表中每個(gè)隊(duì)列的DML被限制為20個(gè)。
2.Databricks
Databricks也具有自動(dòng)擴(kuò)展的功能。也就是說(shuō),集群會(huì)根據(jù)單個(gè)查詢和用戶并發(fā)的實(shí)際使用情況,自動(dòng)擴(kuò)縮容。不過(guò),由于Databricks主要是為數(shù)據(jù)科學(xué)家設(shè)計(jì)的,其UI較為復(fù)雜,因此用戶調(diào)整起來(lái)會(huì)略顯費(fèi)勁。
六、安全與合規(guī)
無(wú)論是在Snowflake中,還是在Databricks中,所有靜態(tài)存儲(chǔ)的數(shù)據(jù)都會(huì)被自動(dòng)加密。它們都提供了RBAC(role-based access control,基于角色的訪問(wèn)控制),都能夠符合諸如:SOC 2 Type II、ISO 27001、HIPAA、以及GDPR等各種法規(guī)和認(rèn)證。
不過(guò),不同于Snowflake,Databricks并沒(méi)有存儲(chǔ)層,開(kāi)發(fā)者需要使用的是諸如AWS S3、Azure Blob Storage、Google Cloud Storage等對(duì)象級(jí)存儲(chǔ)。
七、數(shù)據(jù)支持
Snowflake和Databricks都支持半結(jié)構(gòu)化(如:Parquet、Avro、Orc、CSV、以及JSON)和結(jié)構(gòu)化的數(shù)據(jù)。Snowflake于2021年9月宣布支持非結(jié)構(gòu)化的數(shù)據(jù)。而在湖倉(cāng)一體方面,Databricks還可以處理任何時(shí)間類(lèi)型或格式的數(shù)據(jù),其中就包含了非結(jié)構(gòu)化的數(shù)據(jù)。由于Databricks支持多種開(kāi)發(fā)語(yǔ)言,因此它在該領(lǐng)域占有優(yōu)勢(shì)。它的Spark引擎更適合于處理數(shù)據(jù)流、ML、AI、以及與數(shù)據(jù)科學(xué)工作相關(guān)的負(fù)載。而由于Snowflake最初是作為一種數(shù)據(jù)分析工具被設(shè)計(jì)的,因此其核心能力源于SQL。顯然,SQL以處理數(shù)據(jù)轉(zhuǎn)換見(jiàn)長(zhǎng)。當(dāng)然,Snowflake最近也宣布了通過(guò)引入Snowpark來(lái)支持Python、Java和Scala等語(yǔ)言。
八、管理
Databricks已經(jīng)消除了大量與管理、操作Spark相關(guān)的基礎(chǔ)設(shè)施工作,但是用戶仍然需要通過(guò)大量的手動(dòng)輸入,來(lái)調(diào)整集群大小、更新配置、以及切換計(jì)算選項(xiàng)。可見(jiàn),Databricks的門(mén)檻較高,學(xué)習(xí)曲線較為陡峭。
而基于SQL的Snowflake更為簡(jiǎn)單,用戶只需單擊幾下鼠標(biāo),即可開(kāi)始使用。同時(shí),Snowflake還提供了針對(duì)對(duì)象、角色、用戶、權(quán)限、以及訪問(wèn)等方面的精細(xì)控制。而Databricks除了執(zhí)行常規(guī)作業(yè)之外,也允許用戶實(shí)施保護(hù)日志、控制作業(yè)屬性、以及所有權(quán)。
九、數(shù)據(jù)保護(hù)
1.Snowflake
Snowflake有兩個(gè)獨(dú)特的功能--時(shí)間旅行(Time Travel)和故障安全(Fail-safe)。其中,時(shí)間旅行功能是在數(shù)據(jù)更新之前,保留數(shù)據(jù)的狀態(tài)。一般而言,時(shí)間旅行僅限于1天之內(nèi),但是企業(yè)客戶則可以指定最多90天的時(shí)間跨度。該功能可被應(yīng)用到數(shù)據(jù)表、模式和數(shù)據(jù)庫(kù)上。而故障安全是指,在時(shí)間旅行保留期結(jié)束后的7天期限內(nèi),可保護(hù)和恢復(fù)歷史數(shù)據(jù)。
2.Databricks
Databricks的Delta Lake也具有時(shí)間旅行的功能。其工作方式與Snowflake非常相似。在Delta Lake中存儲(chǔ)的數(shù)據(jù)會(huì)被自動(dòng)實(shí)施版本控制,以便用戶按需訪問(wèn)或使用該數(shù)據(jù)的歷史版本。Databricks的主要優(yōu)勢(shì)之一在于,由于它運(yùn)行在基于對(duì)象級(jí)存儲(chǔ)的Spark上,因此其本身無(wú)需存儲(chǔ)任何數(shù)據(jù),也就省去了各種本地用例。
十、售價(jià)
1.Snowflake
Snowflake采取的是基于個(gè)人倉(cāng)庫(kù)使用情況的計(jì)費(fèi)模式。由于各種倉(cāng)庫(kù)有著X-Small、Small、Medium、Large、X-Large等多種尺寸,因此它們?cè)谝?guī)模成本和服務(wù)器集群數(shù)量上有著很大的差異。X-small類(lèi)型的Snowflake倉(cāng)庫(kù)的基本定價(jià),從大約每秒0.0003積分或每小時(shí)1積分開(kāi)始。而Snowflake標(biāo)準(zhǔn)版上的X-Small倉(cāng)庫(kù)的按需使用模式,則是從每積分2美元起售。
隨著倉(cāng)庫(kù)規(guī)模的使用量遞增,成本和積分的消耗也會(huì)增加。對(duì)此,Snowflake提供了幾個(gè)版本,來(lái)根據(jù)使用情況讓用戶預(yù)購(gòu)積分。通常情況下,預(yù)購(gòu)容量的模式會(huì)比按需模式的費(fèi)率更低。按需存儲(chǔ)的售價(jià)為每月40美元,前端客戶則為每TB 23美元。當(dāng)然,積分的成本也會(huì)因業(yè)務(wù)層級(jí)的不同,而有所差別。
2.Databricks
與Snowflake相比,Databricks提供的存儲(chǔ)要便宜得多。畢竟所有內(nèi)容都被存儲(chǔ)在客戶自己的對(duì)象級(jí)存儲(chǔ)環(huán)境中。由于其中的部分?jǐn)?shù)據(jù)可能不需要被頻繁訪問(wèn),因此我們可以對(duì)它們進(jìn)行高度優(yōu)化。例如,S3中的存儲(chǔ)起售價(jià)為每TB 23美元。而且根據(jù)數(shù)據(jù)規(guī)模和訪問(wèn)頻率的需求,此類(lèi)費(fèi)用可能會(huì)大幅降低。
Databricks是基于DBU(Databricks處理單元)定價(jià)的,其中包括經(jīng)典、高級(jí)和企業(yè)三種商業(yè)價(jià)格等級(jí)。價(jià)格區(qū)間會(huì)從每個(gè)DBU 0.07美元到0.65美元不等,具體取決于DBU的大小。
十一、云基礎(chǔ)設(shè)施
作為托管式SaaS服務(wù),Snowflake和Databricks無(wú)論在啟動(dòng),還是在運(yùn)行后端基礎(chǔ)架構(gòu)等方面都處理得不錯(cuò)。而且,這兩種解決方案都可以在多個(gè)不同的云環(huán)境中運(yùn)行。當(dāng)然,基于Spark的Databricks,需要更多的手動(dòng)輸入和微調(diào),才能充分發(fā)揮其潛能。
十二、性能
由于Snowflake和Databricks支持的用例各不相同,因此,我們很難簡(jiǎn)單斷言哪個(gè)性能更好。值得注意的是,Snowflake在數(shù)據(jù)訪問(wèn)時(shí),優(yōu)化了所有的存儲(chǔ),更適合交互式查詢。
十三、Databricks和Snowflake的主要區(qū)別
Snowflake在處理生產(chǎn)級(jí)商業(yè)智能負(fù)載方面非常強(qiáng)大,這些負(fù)載往往需要以一致性的方法,運(yùn)行或生成報(bào)告和儀表板。因此,Snowflake可以取代傳統(tǒng)的數(shù)據(jù)倉(cāng)庫(kù),并提供更快的性能。
不過(guò),基于SQL的Snowflake并沒(méi)有針對(duì)處理大量數(shù)據(jù)(特別是流式用例)進(jìn)行優(yōu)化。它以簡(jiǎn)單的方式,協(xié)助數(shù)據(jù)分析師將數(shù)據(jù)民主化(democratize),進(jìn)而擴(kuò)展并處理更多的負(fù)載。當(dāng)然,其核心用例仍然是數(shù)據(jù)倉(cāng)庫(kù)。
作為基于Spark的解決方案,Databricks的湖倉(cāng)一體平臺(tái)支持更廣泛的功能需求,特別是:ELT、數(shù)據(jù)科學(xué)、以及機(jī)器學(xué)習(xí)等方面。Databricks允許開(kāi)發(fā)者將數(shù)據(jù)保存在自己的托管對(duì)象存儲(chǔ)中,并提供了托管式Delta Lake(數(shù)據(jù)處理引擎)和Delta Engine(SQL查詢引擎)良好使用體驗(yàn)。
通過(guò)Databricks的Delta Lake和Delta Engine平臺(tái),開(kāi)發(fā)者雖然基本可以實(shí)現(xiàn)由Snowflake提供的所有功能,但是鑒于它是一個(gè)復(fù)雜的工具,開(kāi)發(fā)者仍然需要花時(shí)間去優(yōu)化和構(gòu)建功能齊全的湖倉(cāng)一體化。同時(shí),Databricks也會(huì)比Snowflake更需要用戶投入維護(hù)時(shí)間和經(jīng)歷。
總而言之,Databricks和Snowflake數(shù)據(jù)平臺(tái)都可以支持高性能的SQL查詢與數(shù)據(jù)處理。其中,Databricks提供了所有部件和說(shuō)明手冊(cè),來(lái)設(shè)置一整套功能齊全的湖倉(cāng)一體化,因此更善于處理數(shù)據(jù)工程、ETL/ELT、數(shù)據(jù)科學(xué)和數(shù)據(jù)流負(fù)載;而Snowflake則通過(guò)各種預(yù)構(gòu)建的工具,處理生產(chǎn)環(huán)境中的數(shù)據(jù),以供后期分析使用。
原文鏈接:https://dzone.com/articles/databricks-vs-snowflake-the-definitive-guide
譯者介紹
陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對(duì)內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專(zhuān)注傳播網(wǎng)絡(luò)與信息安全知識(shí)與經(jīng)驗(yàn);持續(xù)以博文、專(zhuān)題和譯文等形式,分享前沿技術(shù)與新知;經(jīng)常以線上、線下等方式,開(kāi)展信息安全類(lèi)培訓(xùn)與授課。






















