文档

用户行为分析(UV)概述

更新时间:

在用户行为分析和圈人场景中,经常需要从亿级甚至几十亿级用户中快速筛选出符合特定标签的指标结果,本文为您介绍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计算场景,如大促时的实时大屏等。