用戶行為分析
在用戶行為分析和圈人場景中,經常需要從億級甚至幾十億級用戶中快速篩選出符合特定標簽的指標結果,本文為您介紹Hologres中如何進行用戶行為分析。
行業背景與痛點
UV(Unique Visitor)是行為分析中最常見的指標,代表訪問網頁的自然人,可以引申為某段時間內某個指標精確去重后的數量。例如大促時,電商商家需要實時計算店鋪的IPVUV、加購UV、成交UV等,并根據UV情況及時調整運營策略,從而達成銷售目標。在實際查詢中,可能會根據業務需求查詢固定周期的UV(如1天、7天、一個月等),以及查詢任意周期的UV(如查詢某半年內的UV)。
在計算用戶UV時,由于業務需求不同,計算的維度和數據量也不同,通常會有以下訴求。
用戶數據量大,每天幾億條,維度多(10+以上),需要支持各維度間任意組合查詢。
查詢時間需要更靈活,不僅局限于天、周、月、年等,還需要支持更細粒度的任意長周期實時查詢。
需要對用戶數量精確去重。
面對上述高復雜度UV計算場景,業界常用的手段包括使用Apache Kylin等預計算系統或Flink+MySQL的固定維度組合方案,通過ETL處理周期性刷新,這些方案的優勢在于,可以在一定程度上提升計算效率,但會遇見以下痛點。
需求維度過多時,會帶來存儲爆炸,預計算時間長。
精確去重需要消耗大量資源,容易出現OOM(Out Of Memory)。
數據處理時效性低,實時性差,更多是支持固定周期的UV計算,無法支持更加靈活開放的任意時間周期處理。
另外一種做法是直接查詢明細表,使用Count Distinct計算UV,該方案的優勢是計算靈活性高,可以支持任意周期的UV計算,但是大部分系統的算力都不足以支撐明細數據的規模,尤其是當計算周期變長時,查詢速度會變慢,同時明細表的方式也無法很好地支持高并發訪問。
Hologres解決方案與優勢
Hologres是基于分析服務一體化理念(Hybrid Serving & Analytical Processing,HSAP)設計的實時數倉產品,采用分布式架構,支持數據實時寫入,高并發、低延時的分析處理PB級數據,兼容PostgreSQL協議,使用最熟悉的工具就能進行開發。
在行為分析(UV)場景中,Hologres支持基于明細表的Count Distinct靈活查詢,查詢效率相比其他產品更高,也支持基于RoaringBitmap的預聚合方案,結合Hologres自身的高性能,就能實現億級UV精確計算。
Count Distinct
Count Distinct是原生PG語法,Hologres針對Count Distinct場景做了非常多的性能優化(包括單個Count Distinct、多個Count Distinct、數據傾斜、SQL沒有Group By字段等場景),直接使用明細寬表的方案也能很好的提升查詢性能。
RoaringBitmap
RoaringBitmap是一種壓縮位圖索引,RoaringBitmap自身的數據壓縮和去重特性十分適合于大數據下的UV計算。其主要原理如下:
對于32Bit數,RoaringBitmap會構造216個桶,對應32位數的高16位;32位數的低16位則映射到對應桶的一個Bit上。單個桶的容量由桶中已有的最大數值決定。
Bitmap把32位數用1位表示,可以極大的壓縮數據。
Bitmap位運算為去重提供了手段。
RoaringBitmap使用詳情請參見RoaringBitmap函數。
根據業務數據規模、業務時效性等不同需求,我們總結了以下四種UV計算場景,以滿足不同的業務需求。
即席查詢UV計算方案
方案介紹
不使用預聚合的方案,直接對明細表Count Distinct計算UV,通過篩選時間周期來實現任意長周期的UV計算。詳情請參見即席查詢UV方案。
優點
實時性好,可以滿足用戶的實時UV計算需求,同時計算靈活,可以按需選擇時間周期進行UV計算,無需預計算和調度等配置,就能實現即席的UV、PV查詢。Hologres在UV場景上,也對Count Distinct進行了特別優化,計算效率相比其他產品有顯著提升。
缺點
數據量變大時,計算時效可能會降低,支持的QPS也會降低。
適用場景
適用于小規模數據量(千萬級)的靈活UV計算場景。
通過預聚合實現近實時UV統計
方案介紹
結合Hologres RoaringBitmap,在Hologres中通過周期性調度的方式預聚合,就能實現任意長周期的UV靈活計算。詳情請參見通過預聚合實現近實時UV統計。
優點
計算性能優異,可以實現高QPS低延遲的UV計算(基數精確去重計算),且可以支持任意周期范圍。
缺點
需要做一次預計算,并對聚合表數據進行周期性更新,會增加維護任務。
適用場景
適用于大規模數據量(億級)的任意長周期高QPS的UV計算。
Hologres+MaxCompute通過預聚合實現離線UV統計
方案介紹
對于超大數據量的UV計算,通過MaxCompute離線構建Bitmap,在Hologres中直接按照業務查詢維度查聚合結果表,即可實現亞秒級的UV計算。只需進行一次最細粒度的預聚合計算,生成一份最細粒度的預聚合結果表,得益于Hologres的計算能力,就能實現超大數據量的離線UV計算。方案詳情請參見畫像分析 - RoaringBitmap優化方案。
優點
可支持超大規模的離線UV計算,且計算效率高。
缺點
需要引入MaxCompute UDF構建Bitmap,使用難度較高,更適合有UDF開發經驗的業務。
適用場景
適用于超大數據規模的UV計算。
Hologres+Flink通過預聚合實現實時UV統計
方案介紹
對于UV計算時效性要求較高的場景(如實時大屏實時展示UV),可通過Hologres+Flink的方案實現。在實時UV場景中,Flink關聯Hologres用戶維表,并基于RoaringBitmap,實時對用戶標簽進行去重。詳情請參見Hologres+Flink通過預聚合實現實時UV統計。
優點
可實現更細粒度的實時計算UV、PV等數據,數據鏈路簡單,維度計算靈活,時效性更高。
缺點
需要使用Flink的窗口函數等,有一定使用難度,更適合有Flink開發經驗的業務。
適用場景
適用于實時UV計算場景,如大促時的實時大屏等。