- 產品
- 產品解決方案
- 行業解決方案
- 案例
- 數據資產入表
- 賦能中心
- 伙伴
- 關于
時間:2022-01-02來源:小鎮姑娘瀏覽數:544次
? ? ? ?我不喜歡搞什么花里胡哨的詞匯,讓粉絲聽著撓頭,我就想用大白話分享我自己的建設思路和方案。
? ? ? ?在開始分享之前,我想給兄弟們說一下數倉建設的方法論:“因地制宜,以業務為中心”。
? ? ? ?我們需要思考:業務需求是什么?你該如何用最優的方式去支持?
? ? ? ?我們需要明白:你的架構的好壞,不是你自己認為好就是好,也不是你同事認為好就是好,而是要經得起業務的考驗,這點認知就是年薪30萬的sqlboy(自嗨)和年薪100萬+(業務口碑)的sqlboy的認知差別。尤其是到了互聯網大倉。一個公司高p前100名,20%是技術,80%是業務,為什么會出現這種情況?大家自己思考,業務才是爸爸,一定要認清現實,越往高p走,技術越菜,大部分走向了管理崗位,所以不管你做什么事情都要往業務的角度上思考,業務都不賺錢了,要你技術有啥用。
? ? ? ?下面我就開始拿離線數倉和實時數倉的架構做個對比講解,方便大家易懂。(所有的分層都是為了更高效的解決業務問題,不能說不這么玩就不合理,看業務場景吧)

離線數倉架構圖

? ? ? ?For業務實時數倉架構圖
? ? ? ?ODS層屬于操作數據層,是直接從業務系統采集過來的最原始的數據,包含了所有業務的變更過程,數據粒度也是最細的。
? ? ? ?離線:hive
? ? ? ?實時:kafka(實時數倉,要求時效性,基本上都是讀取kafka)
? ? ? ?數據明細詳情,去除空值,臟數據,超過極限范圍的明細解析。是在ODS層基礎上,根據業務過程建模出來的實時事實明細層,對于訪問日志這種數據,會回流到離線系統供下游使用,最大程度地保證實時和離線數據ODS層和DWD層一致。對ODS層數據進行清洗(去除空值,臟數據,超過極限范圍的數據,行式存儲改為列存儲,改壓縮格式)
? ? ? ?DWD層創建基礎明細表
? ? ? ?明細表用于存儲ODS層原始表轉換過來的明細數據。
? ? ? ?離線:hive
? ? ? ?實時:kafka(實時數倉,復雜的計算邏輯和臟數據提前在flink內部完成,還有緯度退化能在flink內完成盡量在flink內實現,當然也可以把緯度數據同步到doris內,在doris內部做實時join也可以,都可以,根據不同情況制定方案,比如:這個緯度多個報表都需要查詢,個人建議同步到doris內,如果緯度不經常用到,可以直接通過flink關聯。還有一種業務場景就是給算法同學提供模型訓練數據:如果要求的指標就是簡單的sum,count可以直接在flink內產出,關聯緯度信息寫入到kv,復雜的模型訓練指標,可以直接從doris實時查詢結果數據,然后再傳輸給模型,根據sla的要求制定技術方案。)
? ? ? ?服務層—留存-轉化-GMV-復購率-日活 、點贊、評論、收藏;輕度聚合對DWD訂閱明細層數據后,會在實時計算任務中計算各個維度的匯總指標。如果維度是各個垂直業務線通用的,則會放在實時通用匯總層,作為通用的數據模型使用。目標:統計當日、當周、當月活動的每個設備明細
? ? ? ?離線:hive
? ? ? ?實時:doris(一般都是在doris內創建聚合表,創建rollup表或者物化視圖,這樣做的好處是在doris內部提前預聚合,查詢的時候直接命中結果數據,提高實時查詢性能,如果設置本地join,兩個表按照join的字段提前創建colocate join,這樣做的好處是相同的uuid分桶在一起,在join的時候可以減少網絡傳輸,相同的key直接在本地磁盤拉取就可以了。)
? ? ? ?下圖就是本地colocate?join vs shuffle join的性能測試報表


? ? ? ?實時維表層的數據基本上都是從離線維表層導出來的,抽取到在線系統中供實時應用調用。
? ? ? ?離線:hive
? ? ? ?實時:doris/kv(個人建議doris和kv根據業務情況選擇,如果你們的緯度數據只是你們本地業務報表使用,可以存在Doris內,因為方便制作報表數據,如果你們的緯度數據其他合作團隊也想用,建議寫入到kv中,或者給他們binlog日志,讓他們自己解析也可以。)
? ? ? ?做分析處理同步到RDS數據庫里邊個性化維度匯總層,對于不是特別通用的統計維度數據會放在這一層中,這里計算只有自身業務才會關注的維度和指標。目標:當日、當周、當月活躍設備數
? ? ? ?離線:hive/mysql
? ? ? ?實時:doris (目前我接觸的實時的場景,80%都是直接查詢dws層,多個表join產出數據,基本3s內就可以產出結果,如果時間太長,我們在dws層做一個分鐘級別調度,比如5分鐘做個結果表,也就是ads層,實時查詢的時候直接查詢ads層,這樣的好處是提升業務體驗,不好的地方就是你要確保調度的穩定性還有就是數據的時效性問題。)