999精品,丝袜综合,大陆老熟妇性,中国老女人AV,亚洲精品国产第一区二区三区

螞蟻集團(tuán)海量數(shù)據(jù)分析下的OLAP引擎實(shí)戰(zhàn)
發(fā)布時(shí)間:2023-07-30 21:11:33 文章來(lái)源:DataFunTalk
當(dāng)前位置: 主頁(yè) > 滾動(dòng) > 正文

導(dǎo)讀 大數(shù)據(jù)時(shí)代,數(shù)據(jù)量呈爆炸式增長(zhǎng),如何從海量數(shù)據(jù)中快速的挖掘出潛在信息成為現(xiàn)階段數(shù)據(jù)庫(kù)領(lǐng)域的重要挑戰(zhàn)。在企業(yè)級(jí)的數(shù)據(jù)分析場(chǎng)景下,采用OLAP分析引擎+ADM的方式是最為常見的性能解決方案。今天會(huì)和大家分享下螞蟻集團(tuán)在OLAP場(chǎng)景下面臨的問(wèn)題及針對(duì)這些問(wèn)題現(xiàn)階段螞蟻集團(tuán)所采用的解決方案。

全文目錄:

為什么需要通過(guò)ADM來(lái)解決OLAP場(chǎng)景下大表性能問(wèn)題 通過(guò)Cube解決OLAP場(chǎng)景下報(bào)表性能問(wèn)題 通過(guò)采樣解決OLAP場(chǎng)景下分析性能問(wèn)題 我們的團(tuán)隊(duì)

分享嘉賓|余志鵬 螞蟻智信(杭州)信息技術(shù)有限公司 高級(jí)技術(shù)專家


(資料圖)

編輯整理|橘子

內(nèi)容校對(duì) |李瑤

出品社區(qū)|DataFun

01

通過(guò)ADM來(lái)解決OLAP場(chǎng)景下大表性能問(wèn)題

1.常見的名詞解釋

在接下來(lái)的正題之前先解釋一下這個(gè)領(lǐng)域的專有名詞。

互聯(lián)網(wǎng)場(chǎng)景主要分為兩種模式:一種是OLTP(OnlineTransaction Processing),一個(gè)是OLAP(Online Analytical Processing)。其中,OLTP主要解決在線的事務(wù)查詢,常見的框架如圖中所示的MVC,底層會(huì)有LOG及業(yè)務(wù)的數(shù)據(jù)庫(kù)。在離線分析場(chǎng)景下,先會(huì)把數(shù)據(jù)同步至離線,如Spark或Hive等離線引擎。在此之上,進(jìn)行基礎(chǔ)建模,目前比較成熟的建模理論就是維度建模,比如我們經(jīng)常用到的的星型模型和雪花模型。當(dāng)數(shù)據(jù)量特別大時(shí)(如螞蟻所面臨的超百億級(jí)數(shù)據(jù)量)很多OLAP引擎無(wú)法支持亞秒級(jí)查詢,因此,ETL會(huì)把DWD向上進(jìn)一步匯總成DWS,比如根據(jù)user_id進(jìn)行匯總。此外,還可以面向具體業(yè)務(wù)應(yīng)用進(jìn)一步整合成應(yīng)用層(ADM層),大大減少在分析時(shí)查詢引擎的數(shù)據(jù)量和復(fù)雜度。這里類似于OLTP場(chǎng)景下的service,越向上通用性會(huì)下降,業(yè)務(wù)越聚焦,業(yè)務(wù)屬性會(huì)越來(lái)越增強(qiáng)。本篇主要介紹OLAP場(chǎng)景所碰到的問(wèn)題,我們先從OLAP場(chǎng)景下一個(gè)流程開始。

2.常見的流程分析

在數(shù)據(jù)驅(qū)動(dòng)決策鏈路中:

首先需將數(shù)據(jù)加到數(shù)據(jù)倉(cāng)儲(chǔ)中,搭建相應(yīng)看板,這些看板主要給經(jīng)營(yíng)決策者日常看數(shù)使用,比如高管、運(yùn)營(yíng)人員,通過(guò)觀測(cè)業(yè)務(wù)數(shù)據(jù)進(jìn)行經(jīng)營(yíng)決策; 當(dāng)數(shù)據(jù)出現(xiàn)異常時(shí),需要分析原因,則需要建立分析的假設(shè)樹,沿著分析思路不斷下鉆分析,找到最終的洞見。然后根據(jù)這個(gè)洞見進(jìn)行決策。

接下來(lái)我們主要看一下業(yè)務(wù)看板的完整流程:

一個(gè)完整制作報(bào)表的流程需要如下幾步:

首先,運(yùn)營(yíng)或PD會(huì)向業(yè)務(wù)BI提出需求,業(yè)務(wù)BI接收到需求后,負(fù)責(zé)制作后續(xù)的看板。業(yè)務(wù)BI基于需求,需要確認(rèn)現(xiàn)有數(shù)據(jù)是否能支持業(yè)務(wù)需求,如果沒有相關(guān)數(shù)據(jù),則需要跟ETL數(shù)據(jù)研發(fā)團(tuán)隊(duì)進(jìn)行需求溝通。在確認(rèn)數(shù)據(jù)后,業(yè)務(wù)BI進(jìn)行看板制作、報(bào)表發(fā)布等工作。那這一流程的一個(gè)核心或者主要耗時(shí)在ADM研發(fā),如果整個(gè)報(bào)表的研發(fā)耗時(shí)為1.5天,那其中ADM的研發(fā)耗時(shí)就要1天,如果一年要產(chǎn)生1萬(wàn)張報(bào)表,則需要1萬(wàn)人日研發(fā)ADM。這種方式不僅效率低下,且會(huì)帶來(lái)具大的研發(fā)成本。

報(bào)表制作好之后,業(yè)務(wù)看數(shù)的時(shí)候,假如某個(gè)指標(biāo)出現(xiàn)異常(當(dāng)業(yè)務(wù)出現(xiàn)下跌進(jìn)行原因查找時(shí)),那么我們?nèi)绾我徊揭徊秸业阶罱K的問(wèn)題原因。首先我們需要提出假設(shè),以上面圖表中的案例:“月份貸款余額下降”為例,為了找到貸款余額下跌的原因,我們可以從產(chǎn)品、用戶、流量等這些維度提出假設(shè):

① 是否是產(chǎn)品余額下降導(dǎo)致

② 是否是新/老客戶影響等,根據(jù)前面的維度建立完整的假設(shè)樹,不斷在各維度空間探索

從而找到貢獻(xiàn)度最大的原因,那么最終要執(zhí)行這個(gè)假設(shè)樹,從而找到這個(gè)原因,具體我們需要做什么呢?

具體實(shí)現(xiàn)流程可分為幾個(gè)流程:

① 定義問(wèn)題

② 找到對(duì)應(yīng)數(shù)據(jù)

③ 寫SQL

④執(zhí)行腳本

⑤ 檢查

這個(gè)過(guò)程需要反復(fù)進(jìn)行,直到找到最終問(wèn)題的原因,從上面這張圖中可以發(fā)現(xiàn),要完整的把所有空間探索完,流程非常長(zhǎng),一般是周級(jí)別,我們?cè)倏匆幌戮唧w耗時(shí)在哪里?

對(duì)探索式分析流程的進(jìn)一步細(xì)化可分為三步:

① 度量定義

② 寫SQL代碼

③ 運(yùn)行結(jié)果

這其中基于分析場(chǎng)景的SQL通常比較復(fù)雜,耗時(shí)長(zhǎng),也是效率低的關(guān)鍵。

除了前述的效率問(wèn)題外,隨著需求增長(zhǎng),ADM快速增長(zhǎng),相應(yīng)的資源和存儲(chǔ)成本均在快速增長(zhǎng),此外,由于很多業(yè)務(wù)都會(huì)隨之著不斷變化,而之前的ADM會(huì)隨著業(yè)務(wù)的變化而失效,然后這些ADM無(wú)法精準(zhǔn)判斷下游下,導(dǎo)致治理成本越來(lái)越高,隨著ADM不斷增多,也帶來(lái)了治理成本高的問(wèn)題。

3. 那么為什么需要ADM,是否有優(yōu)化方案

前述諸多內(nèi)容,引發(fā)了一個(gè)思考:既然ADM會(huì)帶來(lái)這么多的問(wèn)題,那么為什么通過(guò)ADM來(lái)解決這些問(wèn)題。

從流程上來(lái)分析,傳統(tǒng)ETL中,數(shù)據(jù)首先從離線數(shù)倉(cāng)到維度建模(解決ER模型分析復(fù)雜度高問(wèn)題),然后進(jìn)行數(shù)據(jù)維度聚合,繼而在基于現(xiàn)實(shí)業(yè)務(wù)的場(chǎng)景下形成各自ADM。

在上述環(huán)節(jié)中,ADM核心解決兩個(gè)問(wèn)題:① 性能問(wèn)題;② 復(fù)雜度量定義的問(wèn)題,那么接下來(lái)我們就要思考有沒有其他方案解決兩大問(wèn)題。今天我分享的主題是有沒有其他方案解決性能問(wèn)題。

基于前述分享,主要有兩種應(yīng)用場(chǎng)景:一個(gè)是報(bào)表,一個(gè)是探索式分析。報(bào)表的特點(diǎn)在于度量和維度確定,用戶在固定空間內(nèi)看數(shù),針對(duì)這種情況,比較適合用業(yè)內(nèi)常用的的“Cube預(yù)聚合”減少查詢數(shù)據(jù)量(本質(zhì)上是自動(dòng)化ADM,從而提升查詢性能)。探索式分析場(chǎng)景下,度量和維度會(huì)隨著前面所說(shuō)的假設(shè)樹的分支增多,度量數(shù)和維度數(shù)都會(huì)不斷增加,那么,使用Cube由于不知道用戶會(huì)使用哪些組合,則需要提前構(gòu)建成所有可能的組合,成本上會(huì)產(chǎn)生巨大的浪費(fèi)。由于分析的過(guò)程我們主要是做對(duì)比分析,對(duì)于數(shù)據(jù)的精準(zhǔn)度要求沒有報(bào)表看數(shù)的要求這么高,比較適合“采樣的方案”來(lái)減少即時(shí)分析時(shí)的數(shù)據(jù)量。

02

通過(guò)Cube解決報(bào)表的性能問(wèn)題

1.Cube的系統(tǒng)執(zhí)行流程

首先來(lái)看下Cube是如何工作的。

一般一個(gè)報(bào)表配置會(huì)包含業(yè)務(wù)所需的維度、度量,會(huì)設(shè)定查詢的步長(zhǎng)(多少天),會(huì)有一些固定的篩選項(xiàng),按照相關(guān)報(bào)表配置,如果直接翻譯成SQL進(jìn)行引擎查詢,由于數(shù)據(jù)量非常大,常用的MPP引擎或者M(jìn)R引擎查詢速度非常慢。從上面的SQL我們可以發(fā)現(xiàn)我們可以把這個(gè)數(shù)據(jù)提前算好,Cube就是解決這個(gè)問(wèn)題。那么我們?cè)倏纯碈ube的構(gòu)建SQL,這個(gè)Cube就是類似于人工ADM,只是Cube是根據(jù)特征自動(dòng)化的預(yù)聚合,在具體的查詢中,只需要傳入動(dòng)態(tài)變化的參數(shù),數(shù)據(jù)量從10億級(jí)別減少到百萬(wàn)級(jí)別,查詢性能可以從分鐘級(jí)別提升到秒級(jí)。

接下來(lái),我們看一下基于Cube的系統(tǒng)執(zhí)行流程,這里主要分為兩個(gè)階段:

① 構(gòu)建側(cè)

② 查詢側(cè)

在構(gòu)建側(cè),從數(shù)據(jù)模型出發(fā),通過(guò)報(bào)表上的配置抽取出維度、度量,形成一個(gè)完整的Cube定義,隨后對(duì)Cube進(jìn)行剪枝優(yōu)化(哪些組合是不必要的),形成相應(yīng)的Cube構(gòu)建任務(wù),提交至構(gòu)建引擎,比如如Spark,然后將構(gòu)建同步至MPP或RDB引擎,提升即席查詢的性能。

在查詢側(cè),則基于圖表特征和Cube進(jìn)行匹配,匹配出正確的Cube之后,把對(duì)明細(xì)表查詢改寫成基于Cube的查詢。

2.Cube系統(tǒng)的核心指標(biāo)

類似評(píng)價(jià)一輛汽車的好壞我們使用百公里加速、油耗、舒適度等指標(biāo),在這里,同樣在Cube系統(tǒng)里面我們將Cube的優(yōu)化問(wèn)題轉(zhuǎn)化為數(shù)學(xué)問(wèn)題,那么Cube的核心指標(biāo)有以下三個(gè):

慢查詢場(chǎng)景Cube覆蓋率(當(dāng)前能力能覆蓋多少圖表) Cube命中率(應(yīng)該做而沒有做的圖表) Cube利用率(當(dāng)前構(gòu)建的Cube有多少應(yīng)用了)。

(1)那么我們?nèi)绾翁嵘鼵ube能力覆蓋率?

業(yè)內(nèi)常見的開源Cube引擎比如說(shuō)kylin通常是基于SQL進(jìn)行Cube定義,這種方式的好處是SQL是一種標(biāo)準(zhǔn)化語(yǔ)言,和業(yè)務(wù)耦合度低,基于此方式可以開源、通用化,但會(huì)帶來(lái)覆蓋度不高,且特征比較難以提取的問(wèn)題。比如上面圖中的案例中的“最近七天”的條件,在SQL中就是某天開始-某天結(jié)束的時(shí)間范圍,但是這個(gè)時(shí)間范圍從SQL視角并不知道其語(yǔ)義是最近7天,這就導(dǎo)致Cube的構(gòu)建任務(wù)的時(shí)間窗口并不知道是幾天,這個(gè)問(wèn)題還是一個(gè)比較簡(jiǎn)單的問(wèn)題。更復(fù)雜的是SQL中的嵌套語(yǔ)句,更難以識(shí)別。

目前我們的方案中采用的是基于報(bào)表配置定義Cube,這種方式通用性會(huì)比較低,需要與BI場(chǎng)景下的功能進(jìn)行深度耦合,但Cube覆蓋率會(huì)有明顯提升,可以覆蓋更多的場(chǎng)景,解決更多的業(yè)務(wù)問(wèn)題。所以在指標(biāo)的權(quán)衡取舍中我們優(yōu)先考慮的是Cube覆蓋率,而非通用性。接下來(lái)我們看看Cube是如何提取特征進(jìn)行構(gòu)建,以及查詢側(cè)如何改寫。

基于報(bào)表配置定義Cube的流程:

報(bào)表上線——報(bào)表特征提取——Cube定義——構(gòu)建Cube; 報(bào)表查詢——提取查詢特征——Cube路由,找到后進(jìn)行改寫;

(2)那么,如何提升Cube的利用率

(此處圖片中有個(gè)錯(cuò)誤,提升Cube利用率)

Cube利用率較低的原因,主要是因?yàn)槲覀冊(cè)跇?gòu)建的時(shí)候并不知道哪些組合會(huì)被利用,這樣會(huì)導(dǎo)致大量的浪費(fèi),那么,我們可以根據(jù)用戶的使用情況基于用戶查詢特征及HBO進(jìn)行剪枝優(yōu)化。一般來(lái)說(shuō),用戶進(jìn)行查詢時(shí)并不會(huì)使用所有的組合,我們會(huì)記錄用戶相關(guān)查詢組合,對(duì)Cube進(jìn)行剪枝優(yōu)化,大幅縮減構(gòu)建成本,隨著報(bào)表的查詢不斷穩(wěn)定,那么利用率會(huì)越高,然而對(duì)于一些長(zhǎng)尾查詢(比如說(shuō)半個(gè)月查詢一次),會(huì)面臨Cube被回收導(dǎo)致的性能問(wèn)題。

3.Cube的技術(shù)架構(gòu)

從下往上來(lái)看,Cube架構(gòu)構(gòu)建的第一步是進(jìn)行物化發(fā)現(xiàn),包括離線圖表發(fā)現(xiàn)、在線圖表發(fā)現(xiàn),同時(shí)組成圖表發(fā)現(xiàn)的能力;第二步進(jìn)行物化構(gòu)建,實(shí)現(xiàn)在確定時(shí)間范圍內(nèi)可以構(gòu)建更多的Cube;第三步是物化識(shí)別,在查詢時(shí)進(jìn)行識(shí)別。其他還有包括Cube治理、監(jiān)控告警等相關(guān)輔助能力,上述內(nèi)容共同構(gòu)成完成的Cube系統(tǒng)。

03

通過(guò)采樣解決探索式分析的性能問(wèn)題

1.探索式分析的理論基礎(chǔ)

探索式分析的特點(diǎn)是度量靈活、維度靈活。分析過(guò)程往往是找規(guī)律,不需要數(shù)據(jù)的絕對(duì)精準(zhǔn),所以我們可以利用這個(gè)特性,對(duì)原表進(jìn)行采樣,減少表的數(shù)據(jù)量,從而提升查詢性能。

采樣的核心理論支持是統(tǒng)計(jì)學(xué),基于統(tǒng)計(jì)學(xué)原理還原真實(shí)數(shù)據(jù)情況。從表中可以看到,目前統(tǒng)計(jì)學(xué)中的一些原子計(jì)算,現(xiàn)在比較常用的是count、avg、sum及count Distinct等,其理論支持是伯努利分布或中心極限定理。

2.采樣分析的誤差及權(quán)重問(wèn)題

在實(shí)踐中,上述統(tǒng)計(jì)學(xué)計(jì)算也會(huì)存在一些問(wèn)題。

(1)COUNTD導(dǎo)致的誤差問(wèn)題

隨機(jī)采樣情況下,COUNTD會(huì)導(dǎo)致較大誤差。從圖中示例可以看出,當(dāng)我對(duì)原始表進(jìn)行50%采樣,統(tǒng)計(jì)用戶數(shù)并還原回原始數(shù)據(jù)計(jì)算,得出的結(jié)果用戶數(shù)是8,但實(shí)際上,user_id是4。這種情況下,是Count Distinct的本質(zhì)是先做Distinct再做Count,而隨機(jī)采樣的本質(zhì)并不是基于Distinct的結(jié)果進(jìn)行采樣,導(dǎo)致結(jié)果無(wú)法還原。

針對(duì)這個(gè)情況,解決思路是先要把COUNTD轉(zhuǎn)化成COUNT,這樣就從一個(gè)非統(tǒng)計(jì)量轉(zhuǎn)化成一個(gè)統(tǒng)計(jì)量。我們把原始表映射到一系列的桶上,而這樣就可以保證每個(gè)桶內(nèi)部的數(shù)據(jù)是不重復(fù)的,這樣對(duì)于原表的COUNTD就轉(zhuǎn)化為這樣對(duì)分桶表的COUNT,這樣就由非統(tǒng)計(jì)量變成統(tǒng)計(jì)量。我們這里的采樣比例就轉(zhuǎn)化為取幾個(gè)分桶的數(shù)據(jù),并可以按比例進(jìn)行還原,即可得到真實(shí)數(shù)據(jù)下的結(jié)果。

(2)另外,我們看一下下鉆數(shù)據(jù)如何確保不同維值下數(shù)據(jù)的精準(zhǔn)度

理論上,我們開展分析的誤差率基本是要滿足95%置信度下的誤差率。當(dāng)樣本量不同時(shí),為滿足誤差率要求,相應(yīng)的采樣比例也應(yīng)該發(fā)生變化。

舉例來(lái)看,當(dāng)我們要計(jì)算全國(guó)的GMV時(shí),對(duì)應(yīng)原始數(shù)據(jù)量有1000萬(wàn)訂單,此時(shí),按照我們1%的采樣比例,10萬(wàn)筆訂單即可滿足誤差率要求;當(dāng)我們想下鉆到具體某一個(gè)城市的GMV,比如上圖中的三沙市,由于城市規(guī)模小,訂單數(shù)小,對(duì)應(yīng)城市的原始數(shù)據(jù)可能僅為1萬(wàn)筆訂單,按照1%的采樣,只有100筆訂單。按照左下角的公式,需要滿足95%置信度下3%的誤差率,這個(gè)樣本顯然無(wú)法滿足要求,而按照公式,需要滿足這個(gè)條件,采樣數(shù)據(jù)需要達(dá)到3000才可以,也就是對(duì)三沙市的采樣比例需要達(dá)到30%。

為了解決前面的問(wèn)題,顯然,我們不能按照統(tǒng)一的采樣比例進(jìn)行采樣,那么,我們是否可以針對(duì)不同的維值數(shù)據(jù)量進(jìn)行分別設(shè)置其采樣比例呢?答案是肯定的。

以圖中為例,第一步:從原始表中計(jì)算各城市的采樣比例,將原始表中的user_id映射到分桶上。第二步:根據(jù)前面不同的維值數(shù)據(jù)量,設(shè)置不同的采樣比例,其中上海、北京原始數(shù)據(jù)比較多,采樣比例相對(duì)小,占用分桶中的一個(gè)格子,合肥相對(duì)采樣比例多,占用2個(gè)格子,而三沙市原始數(shù)據(jù)少,相關(guān)數(shù)據(jù)全部采用,則占用3個(gè)格子,從而形成最終的采樣結(jié)果表,這樣我們就可以兼顧不同的維值下的數(shù)據(jù),保證每個(gè)維值下的誤差率都在我們要求范圍之內(nèi)。第三步:按照不同的采樣比例進(jìn)行還原。值得注意的是,由于每一個(gè)維值采用了不同的采樣比例,還原的時(shí)候會(huì)相對(duì)比統(tǒng)一的采樣比例更復(fù)雜,性能上也會(huì)低一些。如上圖所示,我們算全國(guó)的用戶數(shù)量的時(shí)候,需要用到開窗函數(shù),先對(duì)不同的維值計(jì)算分組,然后對(duì)所有的維值結(jié)果求SUM。

3.采樣的技術(shù)架構(gòu)

在前面講到了Cube的架構(gòu)圖,內(nèi)在的結(jié)構(gòu)有些相似性,Cube架構(gòu)中做的是Cube預(yù)聚合,采樣架構(gòu)中則是利用采樣的方式減少數(shù)據(jù)量,這里都會(huì)有具體的構(gòu)建任務(wù)。采樣計(jì)算中最核心的是采樣算法,包括此前提到的解決COUNTD較大誤差采用的哈希分桶采樣及加權(quán)采樣;另一個(gè)是采樣樣本的管理(和Cube管理類似),比如無(wú)效樣本回收、基于特征匹配分層維度等多樣本的決策管理。在構(gòu)建完成之后,就是查詢測(cè),需要能進(jìn)行路由,Cube里面是路由到cube表,而在采樣計(jì)算的環(huán)節(jié)里面則是路由到采樣表,最查詢進(jìn)行改寫,對(duì)查詢的結(jié)果進(jìn)行還原。這樣就形成了完成的采樣架構(gòu)。

04

我們的團(tuán)隊(duì)

DeepInsight是螞蟻集團(tuán)內(nèi)部的BI工具,通過(guò)數(shù)據(jù)驅(qū)動(dòng)決策,提升公司商業(yè)決策力。整體團(tuán)隊(duì)強(qiáng)調(diào)的是公平、公正、公開;合情、合理、合法。鼓勵(lì)創(chuàng)新,提出新的假設(shè),然后驗(yàn)證,落地。鼓勵(lì)成長(zhǎng)思維,只有認(rèn)知的提升才能引領(lǐng)這個(gè)領(lǐng)域前進(jìn)。

也因?yàn)榍懊娴膱F(tuán)隊(duì)文化,以及不斷的產(chǎn)品&技術(shù)創(chuàng)新,DeepInsight在螞蟻內(nèi)部的多個(gè)活動(dòng)及評(píng)選中獲得了非常多的獎(jiǎng)項(xiàng),也得到了非常多用戶的認(rèn)可。

今天的分享就到這里,謝謝大家。

標(biāo)簽:

最近更新