數倉架構在將來一段時間內會逐漸消亡,會被一種新的Lakehouse架構取代,該架構主要有以下特性算法
Lakehouse能夠解決數據倉庫面臨的幾個主要挑戰,如數據陳舊,可靠性,總成本,數據格式不開放和有限場景支持。sql
數據倉庫將業務數據庫的數據收集到集中式倉庫來幫助企業領導者得到分析看法,而後將其用於決策支持和商業智能(BI),倉庫使用寫模式(schema-on-write)寫入數據,對下游消費者進行了優化,此爲第一代數據分析平臺。數據庫
慢慢地第一代系統開始面臨若干挑戰,首先是計算與存儲耦合使得擴容成本增長;其次愈來愈多的數據集是非結構化的,例如視頻,音頻和文本文檔,數據倉庫沒法存儲和查詢這些數據。編程
爲了解決這些問題,引入第二代數據分析平臺,其將全部原始數據導入數據湖:具備文件API的低成本存儲系統,該API以通用且一般是開放的文件格式保存數據,例如Apache Parquet和ORC,能夠基於HDFS實現低成本數據湖存儲,數據湖是一種讀模式(schema-on-read)架構,能夠靈活地以低成本存儲任何數據。緩存
該架構中的一小部分數據隨後將被ETL到下游數據倉庫以提供最重要的決策支持和BI應用程序。安全
從2015年起,S3,ADLS,GCS,OSS等雲數據湖開始取代HDFS,雲上的架構與第二代系統中的架構基本相同,雲上有Redshift、Snowflake和ADB等數據倉庫,這種兩層的數據湖+數倉架構在行業中占主導地位(財富500強企業中幾乎都在使用)。但這種架構也面臨了一些挑戰,儘管因爲分開的存儲(例如S3)和計算(例如Redshift)而使雲數據湖和倉庫的體系架構表面上便宜,可是對於用戶來講,兩層體系結構卻很是複雜。在第一代平臺中全部數據都從運營數據系統直接ETL到倉庫,而在這種架構中,數據首先被ETL到數據湖,而後又被ELT到數倉,引入額外的複雜性、延遲和故障率,並且企業用例中包括機器學習之類的高級分析,數據湖和倉庫都支持得不理想,具體來講,當前的數據架構一般會遇到以下四個問題:服務器
一種被普遍採用的解決方案是不使用數據湖,將全部數據存儲在內置了計算和存儲分離功能的倉庫中,但這種解決方案可行性有限,由於其不支持管理視頻/音頻/文本數據或從ML和數據科學工做負載中直接訪問。數據結構
隨着愈來愈多的業務應用開始依賴運營數據和高級分析,Lakehouse架構能夠消除數據倉庫中的一些主要挑戰,Lakehouse的時機已經到來。架構
Lakehouse爲如下關鍵問題提供解決方案:併發
當前的行業趨勢代表客戶對兩層數據湖+數倉架構並不滿意,首先近年來幾乎全部的數據倉庫都增長了對Parquet和ORC格式的外部表支持,這使數倉用戶能夠從相同的SQL引擎查詢數據湖表(經過鏈接器訪問),但它不會使數據湖表更易於管理,也不會消除倉庫中數據的ETL複雜性、陳舊性和高級分析挑戰。實際上這些鏈接器的性能一般較差,由於SQL引擎主要是針對其內部數據格式進行了優化,而僅憑這些分析引擎並不能解決數據湖的全部問題並取代倉庫,數據湖仍然缺少基本的管理功能(例如ACID事務)和有效的訪問方法(例如與數據倉庫性能匹配的索引)。
Lakehouse可定義爲基於低成本,可直接訪問存儲的數據管理系統,該系統還提供傳統的分析型DBMS管理和性能功能,例如ACID事務,數據版本,審計,索引,緩存和查詢優化。所以Lakehouse結合了數據湖和數據倉庫的主要優點:開放格式的低成本存儲可經過前者的各類系統訪問,然後者則具備強大的管理和優化功能。而核心問題是可否能夠有效地結合這些優點:特別是Lakehouse對直接訪問的支持意味着它們放棄了數據獨立性的某些方面,這一直是關係型DBMS設計的基礎。
Lakehouse特別適合具備單獨計算和存儲的雲環境:不一樣的計算應用程序能夠在徹底獨立的計算節點(例如ML的GPU羣集)上按需運行,同時直接訪問相同的存儲數據,但也能夠在本地存儲系統(例如HDFS)上實現Lakehouse。
實現Lakehouse的第一個關鍵思想是使用標準文件格式(如Apache Parquet)將數據存儲在低成本的對象存儲(例如Amazon S3)中,並在對象存儲上實現元數據層,其定義哪些對象是表版本一部分。這使系統能夠在元數據層實現諸如ACID事務處理或版本控制之類的管理功能,同時將大量數據保留在低成本對象存儲中,並容許客戶端使用標準文件格式直接從該存儲中讀取對象,儘管元數據層增長了管理功能,但不足以實現良好的SQL性能,數據倉庫使用多種技術得到很好的性能,例如將熱數據存儲在SSD等高速設備、維護統計信息、構建有效的訪問方法(例如索引)以及優化數據格式和計算引擎。基於現有存儲格式的Lakehouse中沒法變動格式,可是也能夠實如今保持數據文件不變狀況下的其餘優化,包括緩存、輔助數據結構(例如索引和統計信息)和數據佈局優化。
Lakehouse既能夠加快高級分析負載,又能夠爲其提供更好的數據管理功能。許多ML庫(例如TensorFlow和Spark MLlib)已經能夠讀取數據湖文件格式(如Parquet)。所以將它們與Lakehouse集成的最簡單方法是查詢元數據層,以肯定哪些Parquet文件屬於表,而後將它們傳遞給ML庫。
Lakehouses的第一個組件是元數據層,其能夠實現ACID事務和其餘管理功能。諸如S3或HDFS之類的數據湖存儲系統僅提供了低級的對象存儲或文件系統接口,在這些接口中,即便是簡單的操做(如更新跨多個文件的表)也不是原子的,這個問題使得一些組織開始設計更豐富的數據管理層,從Apache Hive ACID開始,其使用OLTP DBMS跟蹤給定表版本中哪些數據文件是Hive表的一部分,並容許操做以事務方式更新此集合。近年來一些新系統提供了更多功能和改進的可伸縮性,如2016年Databricks開發的Delta Lake,其將有關哪些對象是表中一部分的信息存儲在數據湖中,做爲Parquet格式的事務日誌,使其可以擴展到每張表數十億個對象;Netflix的Apache Iceberg也使用相似的設計,並支持Parquet和ORC存儲;Apache Hudi始於Uber也相似,儘管它不支持併發寫入(正在支持中),該系統側重於簡化流式數據入數據湖。
這些系統的經驗代表它們能夠提供與原始Parquet/ORC數據湖相似或更好的性能,同時還增長了很是有用的管理功能,例如事務處理,零拷貝和時間旅行。元數據層對數據質量很是重要,例如能夠對Schema進行校驗,使其不破壞數據質量,另外元數據層能夠實現諸如訪問控制和審覈日誌記錄之類的治理功能,例如元數據層能夠在授予客戶端憑據以從雲對象存儲讀取表中的原始數據以前,檢查是否容許客戶端訪問表,而且記錄全部訪問行爲。
將來方向和替代設計。因爲數據湖的元數據層很是新,所以存在許多懸而未決的問題和替代設計。例如Delta Lake設計爲將事務日誌存儲在它運行的同一對象存儲中(例如S3)以簡化管理(消除了運行單獨存儲系統的須要)並提供高可用性和高讀取帶寬,但對象存儲的高延遲限制了它能夠支持的每秒事務處理速率,在某些狀況下將元數據使用更快的存儲系統的設計可能更可取。一樣Delta Lake,Iceberg和Hudi僅支持單表事務,但也能夠擴展以支持跨表事務,優化事務日誌的格式和管理對象的大小也是未解決的問題。
Lakehouse方案的最大技術問題多是如何提供最新的SQL性能,同時又放棄了傳統DBMS設計中很大一部分的數據獨立性,有不少解決方案,例如能夠在對象存儲上添加一個緩存層,以及是否能夠更改數據對象存儲格式而不使用現有的標準(例如Parquet和ORC(不斷改進這些格式的新設計不斷涌現))。不管採用何種設計,核心挑戰在於數據存儲格式已成爲系統公共API的一部分以容許快速直接訪問,這與傳統DBMS不一樣。
咱們提出了幾種技術能夠在Lakehouse中優化SQL性能,而且與數據格式無關,所以能夠將其與現有格式或將來數據格式一塊兒使用,這些與格式無關的優化大體以下:
對於分析系統中的典型訪問模式,這三個優化能夠很好地協同工做。典型的工做負載中大多數查詢傾向於集中在數據的"熱"子集上,Lakehouse可使用與數據倉庫相同的優化數據結構對其進行緩存,以提供相同的查詢性能。 對於雲對象存儲中的"冷"數據,性能的主要決定於每一個查詢讀取的數據量,在該狀況下數據佈局優化(將共同訪問的數據聚類)和輔助數據結構(如區域圖,使引擎快速肯定要讀取的數據文件範圍)的組合可使Lakehouse系統與數倉同樣最小化I/O開銷,儘管使用標準的開放文件格式(相比於數倉內置文件格式)。
高級分析庫一般不是使用SQL命令編寫,其須要訪問大量數據,如何設計數據訪問層以最大程度地提升運行在頂部的代碼的靈活性,仍然能夠從Lakehouse的優化中受益。
機器學習API迅速發展,可是一些數據訪問API(例如TensorFlow的tf.data)沒有嘗試將查詢語義推入底層存儲系統,一些API還專一於CPU到GPU的傳輸和GPU計算,這在數據倉庫中並未引發太多關注。
咱們須要標準ML接口以使數據科學家可以充分利用Lakehouse(甚至數據倉庫)中強大的數據管理功能,如事務,數據版本控制和時間旅行等。
Lakehouse還提出了其餘一些研究問題,功能日益豐富的數據湖的行業趨勢也對數據系統研究的其餘領域產生了影響。
在開放的數據湖文件格式上實現數據倉庫功能的統一數據平臺體系結構能夠爲當今的數據倉庫系統提供具備競爭力的性能,並有助於應對數據倉庫用戶面臨的許多挑戰,儘管限制數據倉庫的存儲層以標準格式直接訪問看起來彷佛是一個重大限制,但諸如熱數據緩存和冷數據數據佈局優化之類的優化可使Lakehouse得到很不錯的性能,另外鑑於數據湖中已有大量數據,而且有機會大大簡化企業數據架構,行業極可能會向Lakehouse架構逐步過渡。