查詢速度最高提升50倍!火山引擎ByteHouse在廣告投放領(lǐng)域?qū)嵺`分享

據(jù)QuestMobile報(bào)告顯示,移動(dòng)互聯(lián)網(wǎng)已經(jīng)進(jìn)入了下半場(chǎng),在使用人數(shù)和使用時(shí)長(zhǎng)方面已經(jīng)沒有明顯增長(zhǎng),互聯(lián)網(wǎng)已經(jīng)流量趨于飽和。

作為廣告投放主要陣地,由于互聯(lián)網(wǎng)平臺(tái)流量紅利逐漸消退,越來(lái)越多的廣告企業(yè)和從業(yè)者開始探索精細(xì)化營(yíng)銷的新路徑,取代以往的全流量、粗放式的廣告轟炸。精細(xì)化營(yíng)銷意味著要在數(shù)以億計(jì)的人群中優(yōu)選出那些最具潛力的目標(biāo)受眾,這無(wú)疑對(duì)提供基礎(chǔ)引擎支持的數(shù)據(jù)倉(cāng)庫(kù)能力,提出了極大的技術(shù)挑戰(zhàn)。


(資料圖)

在人群圈選分析中, 分析師一般利用各種標(biāo)簽組合,挑選出最合適的人群,進(jìn)而完成廣告推送,達(dá)到精準(zhǔn)投放的效果。但由于人群查詢?cè)诓煌瑯?biāo)簽組合下的結(jié)果集大小不同,在一次廣告投放中,分析師需要經(jīng)過(guò)多次的邏輯調(diào)整,以獲得"最好"的人群包。抖音集團(tuán)擁有廣泛的廣告投放場(chǎng)景,在日常實(shí)踐中,我們發(fā)現(xiàn)以下痛點(diǎn)問(wèn)題:

●首先,數(shù)據(jù)預(yù)估。廣告主需要對(duì)選定的人群組合進(jìn)行預(yù)估,以便判斷投放情況并確定投放預(yù)算。但廣告平臺(tái)用戶越來(lái)越多,有的平臺(tái)DAU達(dá)到上億,使得人群包數(shù)據(jù)量過(guò)大,技術(shù)上只能采用1/10抽樣存儲(chǔ),將導(dǎo)致10%誤差。

●其次,性能問(wèn)題。為了保證人群圈選精準(zhǔn)度,廣告主往往會(huì)設(shè)定多樣、復(fù)雜的人群圈選條件,導(dǎo)致底層計(jì)算邏輯復(fù)雜,比如單次計(jì)算可能包含幾百,甚至上千個(gè)人群包。Hive和Elasticsearch等方案在處理大數(shù)據(jù)量時(shí),查詢速度慢。如果研發(fā)人員查詢某個(gè)廣告主的所有用戶,該方案需要掃描整個(gè)用戶庫(kù),整個(gè)過(guò)程需要幾分鐘甚至幾個(gè)小時(shí),無(wú)法滿足廣告主實(shí)時(shí)性要求。

●最后,存儲(chǔ)問(wèn)題。Hive和Elasticsearch等方案需要額外的索引結(jié)構(gòu),使得存儲(chǔ)空間變大,導(dǎo)致成本增加。

在以往,研發(fā)團(tuán)隊(duì)通常使用兩種方案來(lái)解決以上問(wèn)題:

方案一:將每個(gè)人群包存儲(chǔ)為一個(gè)Array類型的數(shù)據(jù)結(jié)構(gòu),每次查詢需要從Array中找到某一個(gè)特定ID。

方案二:使用一個(gè)表來(lái)存儲(chǔ)用戶ID,在查詢的時(shí)使用In/Join計(jì)算多個(gè)人群的交集。

經(jīng)過(guò)內(nèi)部長(zhǎng)期使用經(jīng)驗(yàn),無(wú)論是方案一或方案二,都存在當(dāng)數(shù)據(jù)量逐漸增大,查詢速度無(wú)法滿足實(shí)時(shí)分析需求的問(wèn)題?;诟咝阅堋⒎植际教攸c(diǎn),ClickHouse可以滿足大規(guī)模數(shù)據(jù)的分析和查詢需求,因此研發(fā)團(tuán)隊(duì)以開源ClickHouse為基礎(chǔ),研發(fā)出火山引擎云原生數(shù)據(jù)倉(cāng)庫(kù)ByteHouse,并在其中定制一套處理模型——BitEngine,用于解決集合的交并補(bǔ)計(jì)算在實(shí)時(shí)分析場(chǎng)景中的性能提升問(wèn)題。

據(jù)介紹,BitEngine是一個(gè)高效集合數(shù)據(jù)處理模型,底層基于MergeTree Family存儲(chǔ)引擎,并在此基礎(chǔ)上引入了BitMap64類型,開發(fā)了系列相關(guān)運(yùn)算函數(shù)。BitEngine提供的BitMap64類型適合表達(dá)具有特定關(guān)系的大量實(shí)體ID的集合,將集合的交并補(bǔ)運(yùn)算轉(zhuǎn)化為bitmap之間的交并補(bǔ)運(yùn)算,從而達(dá)到遠(yuǎn)超普通查詢的性能指標(biāo)。

那么,BitEngine如何應(yīng)用在人群圈選場(chǎng)景中?舉個(gè)例子,廣告主需求為圈選出“人群包A”和“人群包B”的交集人群,完成廣告精準(zhǔn)投放。

人群包情況:

●人群包A = [10001, 20001,30001,40001,50001],人群包B = [10001, 20001,20002,20003,20004]

期望結(jié)果: 

●通過(guò)BitEngine計(jì)算A&B = [10001, 20001]

首先,人群包按照一定規(guī)則劃分為多個(gè)區(qū)間,任意兩個(gè)區(qū)間之間的人群包沒有交集,由BitEngine保障數(shù)據(jù)的讀取和計(jì)算是嚴(yán)格按照區(qū)間進(jìn)行;其次,BitEngine在數(shù)據(jù)讀取時(shí)會(huì)為每一個(gè)文件構(gòu)建一個(gè)讀任務(wù),由一個(gè)線程調(diào)度模塊完成整個(gè)任務(wù)調(diào)度和讀??;最后,BitEngine完成所有中間結(jié)果計(jì)算后,按照結(jié)果的輸出要求做一次數(shù)據(jù)合并,由此完成交集計(jì)算。已上線業(yè)務(wù)的測(cè)試表明,相比普通和Array或者用戶表方式,BitEngine在查詢速度上有10-50倍提升。

BitEngine上線前后查詢耗時(shí)監(jiān)控

BitEngine不僅僅在抖音集團(tuán)海量廣告投放場(chǎng)景中使用,目前更是集成在火山引擎云原生數(shù)據(jù)倉(cāng)庫(kù)ByteHouse中對(duì)外輸出。火山引擎ByteHouse主要為用戶提供極速分析體驗(yàn),能夠支撐實(shí)時(shí)數(shù)據(jù)分析和海量數(shù)據(jù)離線分析,具備便捷的彈性擴(kuò)縮容能力,極致分析性能和豐富的企業(yè)級(jí)特性,目前已經(jīng)與中國(guó)地震臺(tái)網(wǎng)中心、海王集團(tuán)、莉莉絲游戲、極客邦科技等諸多行業(yè)企業(yè)達(dá)成合作,深度助力各個(gè)行業(yè)數(shù)字化轉(zhuǎn)型。(作者:陳升)

推薦DIY文章
當(dāng)智能健身走向全民化:AEKE輕力量家庭智能健身房引領(lǐng)未來(lái)
海藝AI:迎合“AI時(shí)代”發(fā)展潮流,刷新繪圖市場(chǎng)傳統(tǒng)認(rèn)知
布局產(chǎn)業(yè)新高地!海星醫(yī)藥健康創(chuàng)新園B區(qū)奠基儀式隆重舉行
未來(lái)五年500億投入打底,北汽藍(lán)谷錨定細(xì)分市場(chǎng)增量
【展會(huì)直擊】華秋慕尼黑上海電子展精彩ing,助力電子產(chǎn)業(yè)高質(zhì)量發(fā)展!
桂花網(wǎng)藍(lán)牙網(wǎng)關(guān)助力司乘人員職業(yè)健康監(jiān)測(cè)
精彩新聞

超前放送