和以 mysql 為代表的傳統事務型資料庫相比,資料倉儲有乙個很大的特點,就是主要面向批量寫和查詢進行優化,可以不支援更新、事務這些高階特性。一些商用的資料倉儲分析系統,例如 vertica,已經可以做到千億級資料的秒級匯入和秒級查詢。
神策資料一直致力於幫助企業搭建資料倉儲,實現資料的秒級響應,積累資料資產。本文主要通過神策資料在技術上的探索與實踐,**如何利用現有的開源元件實現分析型資料倉儲當中的讀寫分離。
分析性資料倉儲一般有如下幾個特點:
面臨著複雜的多維分析需求,能夠進行任意維度的上捲下鑽;
儲存的資料維度一般較多,所以是寬表,而且一般比較稀疏;
資料量比較大,一次寫入,多次查詢。
針對這樣特點,分析性資料庫一般選擇列儲存資料格式,例如 parquet 等。優點是對於統計分析效率很高,而且對於稀疏的寬表具有很高的儲存壓縮比。所以我們可以認為列儲存格式是一種面向讀進行優化的儲存格式,我們稱為 readoptimized store(ros)。
但是列儲存格式也有乙個缺點:這種格式的資料一旦生成,就很難進行修改,也很難往已有的資料檔案當中插入新資料,只能增加新的資料檔案。像 mysql 這種傳統的資料庫,使用的行儲存檔案格式是一種適合修改和插入的儲存格式,我們可以認為這種行儲存格式是面向寫進行優化的儲存格式,稱為 writeoptimized store(wos)。
綜上所訴,要實現乙個可以秒級匯入、秒級查詢的分析型資料庫,如果只選用 ros,則很難支援大資料量的秒級匯入。如果只選用 wos,則很難實現任意維度的秒級查詢,所以我們需要進行讀寫分離。
資料倉儲當中需要同時存在 wos 和 ros,這樣對於所有的寫操作我們都生成 wos 型檔案;同時所有的讀操作,則主要依賴於 ros 檔案,但也要查詢少量的 wos 檔案。整體示意圖如下:
圖1 讀寫分離原理圖
如圖所示,wos 檔案需要定期轉換為 ros 檔案,同時因為 ros 在資料倉儲當中一般是分為多個 partition 存在,所以乙個 wos 可能轉化為多個 ros。轉化的過程需要是原子操作,因為對上層查詢引擎來說,同一時刻,同樣的資料只能有乙份。
前面簡單介紹了讀寫分離方案的原理,具體的工程實踐過程中,神策資料的工程師還面臨著很多方案的選擇和實踐難點。下面簡單介紹一下神策資料在搭建資料倉儲的實踐中啃過的「硬骨頭」。
以 sequencefile 為例,我們在定義自己的 impala 表的時候,可以指定乙個特殊的 partition 檔案的儲存格式為 sequencefile,同時其它的 partition 作為正常的按照日期 partition 的資料,指定格式為 parquet,這種方式的優勢體現在始終只有乙個表。
後來基於查詢效率和未來架構公升級方面的考慮,我們最終選擇了 kudu 作為 wos,架構實現示意圖如下:
圖2 讀寫分離的實現圖
如圖所示,我們會建立三張物理表,其中兩張 kudu 表作為 wos,一張 parquet 表作為 ros。所有的寫操作都會寫入到 ingesting 狀態的 kudu 表中,當 ingesting 表寫到一定大小之後,會自動轉換為 staging 狀態。
這時我們一方面生成一張新的 kudu 表作為 ingesting 表,另一方面開始 wos 到 ros 的轉換,通過乙個叫做 mover 的任務執行這個操作。將 staging 狀態的 kudu 表中的資料全部轉換到對應 partition 的 parquet 表當中。
staging 狀態的表轉換完成且 ingesting 狀態的表寫滿時,會觸發乙個切表操作,需要更新元資料,告訴 impala 使用新的資料進行查詢,整個切表的操作是原子的。而且已經轉化的 staging 表還需要保留一段時間,避免切表之前發起的查詢操作沒有及時執行完成。
對於查詢請求來說我們會建立乙個包含 staging 表、ingesting 表和 ros 表的虛擬表,即乙個 view。使用者的查詢始終指向乙個 view,但是下面的物理表會經常發生變化。這樣就兼顧查詢資料的不斷更新及查詢效能的優化兩方面了。
在實現的過程中還有很多具體的工作,例如如何對錶進行加列操作,保證各個表的結構一致;parquet 表中碎檔案較多影響查詢效率,如何定期合併等。限於篇幅,這裡不再具體介紹。神策資料最終的技術架構如下圖:
圖3 神策資料技術架構圖
綜上所述,神策資料為了實現資料驅動,在資料倉儲的讀寫效率方面做了比較深入的探索,也參考了眾多優秀的開源專案,做了適配產品的優化,累計十萬行**以上,大資料行業技術才是企業的核心競爭力,也希望大家在技術和業務層面進行開放性的**。
資料倉儲的分析工具
資料倉儲是多種技術的綜合體,它由資料倉儲 資料倉儲管理系統和資料倉儲工具三個部分組成。資料倉儲的資料分析工具用於幫助使用者對資料進行分析 獲取資訊,是資料倉儲系統的重要組成部分。在整個系統中,資料倉儲居於核心地位,是資訊挖掘的基礎。資料倉儲管理系統負責管理整個系統的運轉,是整個系統的引秦。資料倉儲工...
4 資料倉儲 操作型資料庫 VS 分析型資料庫
操作型資料庫 vs 分析型資料庫 因為主導功能的不同 面向操作 面向分析 兩類資料庫就產生了很多細節上的差異 1 資料組成差別 資料時間範圍差別 操作型資料庫只會存放90天以內的資料,而分析型資料庫存放的則是數年內的資料。這點也是將操作型資料和分析型資料進行物理分離的主要原因 2 資料組成差別 資料...
SQLSERVER資料倉儲的構建與分析
例項構建過程與分析 1 現在以乙個比較簡單的例項來分析和 ms sql server 資料倉儲的構建過程。實際上資料倉的構建是相當複雜的,他結合了資料倉儲的前端技術和很強的業務要求。在這兒只是以乙個簡單的例項來說明他大致的構建流程。2 構建資料倉儲模型,他包括兩部分,一是要考慮原來的資料來源能夠提供...