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

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

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

全文目錄:

為什么需要通過ADM來解決OLAP場景下大表性能問題 通過Cube解決OLAP場景下報表性能問題 通過采樣解決OLAP場景下分析性能問題 我們的團(tuán)隊

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


(資料圖)

編輯整理|橘子

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

出品社區(qū)|DataFun

01

通過ADM來解決OLAP場景下大表性能問題

1.常見的名詞解釋

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

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

2.常見的流程分析

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

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

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

一個完整制作報表的流程需要如下幾步:

首先,運(yùn)營或PD會向業(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)隊進(jìn)行需求溝通。在確認(rèn)數(shù)據(jù)后,業(yè)務(wù)BI進(jìn)行看板制作、報表發(fā)布等工作。那這一流程的一個核心或者主要耗時在ADM研發(fā),如果整個報表的研發(fā)耗時為1.5天,那其中ADM的研發(fā)耗時就要1天,如果一年要產(chǎn)生1萬張報表,則需要1萬人日研發(fā)ADM。這種方式不僅效率低下,且會帶來具大的研發(fā)成本。

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

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

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

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

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

① 定義問題

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

③ 寫SQL

④執(zhí)行腳本

⑤ 檢查

這個過程需要反復(fù)進(jìn)行,直到找到最終問題的原因,從上面這張圖中可以發(fā)現(xiàn),要完整的把所有空間探索完,流程非常長,一般是周級別,我們再看一下具體耗時在哪里?

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

① 度量定義

② 寫SQL代碼

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

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

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

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

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

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

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

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

02

通過Cube解決報表的性能問題

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

首先來看下Cube是如何工作的。

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

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

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

② 查詢側(cè)

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

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

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

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

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

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

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

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

基于報表配置定義Cube的流程:

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

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

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

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

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

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

03

通過采樣解決探索式分析的性能問題

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

04

我們的團(tuán)隊

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

也因為前面的團(tuán)隊文化,以及不斷的產(chǎn)品&技術(shù)創(chuàng)新,DeepInsight在螞蟻內(nèi)部的多個活動及評選中獲得了非常多的獎項,也得到了非常多用戶的認(rèn)可。

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

標(biāo)簽:

最近更新