预计算技术+Hologres在阿里采集流量分析产品中的实践

简介: 康凯数据技术及产品部-平台技术

一、预计算与Hologres的关系

image.png

作为一个查询加速团队,我们的愿景是致力于打造低成本、高性能的普惠查询加速引擎,能够支持 A+流量分析、生意参谋、黄金策、友盟、 FBI/QBI等具有海量数据交互分析的产品。在成本可控情况下,使用AQP、FastMap 预计算等技术,大幅提升海量数据的查询性能,将响应时间降低至秒级或毫秒级。

上图最上层的数据产品侧支持了比如A+采集流量分析平台、黄金策(阿里内部对于精细化人群的运营平台)、圈人(对人群特征的分析)、生意参谋(对商家和店铺商业型数据的分析产品)、FBI/QBI(阿里内部 BI 产品与云上 BI 产品)以及友盟数据分析平台。中间层为加速层,底下的存储、计算都由Hologres实现。

image.png

预计算往上即为OLAP 在线分析处理。 而OLAP 按引擎大致可以分为两类:关系模型——没有数据冗余和预处理机制,比较适合大数据量分析比如 Spark、 Presto 等;多维模型——提前按照维度与度量构成Cbube模型达到加速目的,比较适合超大数据量和对性能要求较高的OLAP 场景。

image.png

查询双 11 当天天猫销量最高的商品,传统的方式需要以下几个步骤:首先要将双 11 这一天的数据找出;第二步,按照数据进行商品聚合,如果数据有 10 亿条,则需要按照 10 亿聚合,查询时间根与数据量呈线性关系。

而如果可以按照时间和商品维度将销售量算出,则查询将不再与数据量有关。预计算的核心在于打破查询时间随着数据量呈线性增长的规律。

预计算的结果数据需要载体来存储和计算,因为预计算本身仍然是数据模型的维度。而Hologres是数据库维度,主要做数据分布、数据存储方式、索引以及查询执行计划。

image.png

预计算与Hologres是不同维度的优化,并不冲突。预计算也需要强大的运行载体做存储和计算,且它天然的Cube模型更能发挥 Hologres的作用。

image.png

从查询加速平台的角度考虑,选择Hologres有以下三个原因:

第一,算子能力。预计算中会将很多数据变成 bitmap ,因此需要强劲的 bitmap 引擎。其次, bitmap 无法解决所有问题,比如分钟内转化周期的漏斗、金额频次高基场景,但是 Hologres为其提供了特殊的解法。

第二,统一查询。分析平台不仅有自助分析,也有看板等高QPS、需要毫秒级返回的场景。我们希望可以用一套架构实现不同的分析场景。

第三,基于成本的一体化架构。Hologres提供了热存、冷存、外表等方案,帮助企业降本提效。


二、A+流量分析介绍

image.png

A+流量分析平台是阿里集团统一的全域流量分析平台,以页面、小站活动、 App 等作为切入点,经过埋点采集计算,构建出宏观概览数据,比如坑位效果、类目转化、成交路径分析、用户细分等,致力于打造流量数据分析闭环,帮助业务发现流量问题,提升流量转化。

比如想分析左下 App页面的流量情况,能够查看其 PV、UV、平均停留时长、直接引导界面、全引导 PV 指标等。

为了与预计算模型更好地结合,我们将指标转化成预计算度量形式,比如UV 相当于去重,平均停留时长相当于 abg,直接引导界面相当于四则运算。

image.png

针对流量分析领域的需求产生的分析模型分别是事件分析、留存分析、漏斗分析、转化分析、路径分析。

事件分析是流量分析解决领域最重要、最广泛的分析方法,核心为围绕事件进行多维度分析。事件指用户在产品使用过程中触发的一系列行为,原则上分为几类与比如浏览、点击、曝光。阿里集团用四段式 SPM模型,能够唯一定位到用户在哪个站点、哪个页面、哪个区块和哪个位置触发了该事件。

事件报表界面也比较简单,比如最上是浏览事件用户数,用户 UV 分组、品牌、时间等。为了与预计算结合,我们将指标与预计算模型进行对应。用户数即求去重,页面和时间即group by ,品牌过滤即筛选维度。

image.png

留存本质上有初始行为和后续行为。界面上的分析主体是登录用户或设备,定义留存时要定义两种行为,根据时间计算。而对应到预计算,登录用户对应去重指标,筛选维度对应不同行为的聚合维度等。


三、重点业务Hologres解决方案

image.png

当前,我们能够支持的数据量级为每天新增小于 1t ,分析粒度可以查询周、天、月。该背景下,产生的问题主要有以下几个:其一,性能问题,去重指标平均需要几分钟,用户体验不佳;其二,数据误差。无法满足客户对数据的精确度要求。

事件分析即对条件内的user ID 求基数,留存即对两个行为集合做交再求基数。两个集合做交并求基数很容易联想到数据结构 bitmap ,bitmap的0 或 1 分别对应人存在或不存在。其次,bitmap是由 0 与 1 组成的序列,可代表某一类条件的人的集合。

因此,可以用 bitmap 的高性能计算解决问题。但其中依然存在两个问题:第一,原始 bitmap 虽然只有 1bit,但如果有 10 亿人,数据量依然很大;第二,有了 bitmap ,还需要有存储以进行计算。

因此,我们引入了Hologres Roaring Bitmap。Roaring bitmap可以理解为带压缩的bitmap特殊结构,Hologres Roaring bitmap是分布式的Roaring bitmap实现。

在存储上, Hologres实现了 Roaring bitmap数据类型。建表时,可以建 bigint 类型,也可以建 varchar、 bitmap 类型。在单节上实现了bitmap 级别的交并差操作。此外,Hologres实现了一套基于分布式的 bitmap 执行计划,因此也有了高性能的bitmap 指引擎。

image.png

如上图所示,用颜色区别出不同维度,但是颜色内维度一致。比如黄色代表在 9 月 1 号浏览了 AB 页面的人,绿色代表在 9 月 2 号曝光了 AC 页面的人。如果将该结构变为Bitmap ,应该进行哪些操作?

首先要使 user ID 在bitmap有唯一下标,比如 1001为0,1004 为4。最后生成的 bitmap 结构如上图下方所示。同一个维度具有天然的聚合。绿色代表在 9 月2 号访问了 AC 页面的曝光。

image.png

上图为基于Hologres Roaring Bitmap的架构。

左边为云上 DataWorks,负责调度,每天调度到查询加速引擎系统。引擎内存储了元数据。maxCompute负责将业务数据变为 Bitmap 数据,导入到 Hologres,Hologres下的盘古策略拥有极快的导入性能。Hologres是 MPP 结构,需要按 bitmap 本身分组,某一段内保持自增,这也意味着人在组内的序号是永远固定的。

上图右侧为存储的逻辑视图,不同分组但维度完全一样。

image.png

假设想要查询 9 月1号所有 UV 值,首先,业务层发 SQL 到 Hologres前端节点生成执行计划。Hologres内按组分段,因此组内是并行的。 9 月 1 号有两个数据,首先是Hologres索引,将两个数据索引出来后做 rb_or_agg,将 Bitmap 做并操作,再调 rb_cardinality函数求基数,求到第一组的基数。第六组同理。所有组都为并行,且只需要merge big int 值,速度非常快。

image.png

留存的计算逻辑只需增加一步,因为需要与 2 号数据做交留存。首先,作并,然后做rb_and_cardinality操作,参数为两个 bitmap ,最后求出 count 。

改进之后的查询,几十T量级的UV类指标自助分析平均RT仅需 5s。

image.png

圈人也是Hologres Roaring Bitmap的应用场景,本质上也是 bitmap 之间的交并差,但其结果并非单个数,而是bitmap。而Hologres能够支持 SQL ,因此可以对bitmap进行insert 、select 操作,计算完成后天然地将人圈进Hologres。后续的画像本质上也是 bitmap 。

分析型场景 QPS 不高,但是阿里的生意参谋场景,有一个需求是简单的交并差,它需要进行分析,但不能做成 KV 。因此我们巧妙地利用了非 bitmap 分组,利用业务素材分组加Hologres实现了简单分析场景的1000+QPS 。

Hologres提供了实时生成 bitmap 的能力,可以将明细表导入到 Hologres。查询时实时生成 bitmap 以及进行交并差。

image.png

构建统一查询,主要源于以下几个场景的需求:

① 非加速表和预计算表异库。预计算无法解决客户 100% 的问题,只能解决痛点问题。因此,我们还需要非常快的 OLAP 引擎做支撑。

② 预计算对比宽表能更充分发挥 Hologres性能。将宽表直接置于 OLAP 引擎,如果上层查询非常自由,则分布无法确定,索引也无法确定。而预计算天然的cuboid会变成分表形式,与Hologres结合打造出更高性能。

③ 分析型场景不仅有自助分析、看板分析,高 QPS 高性等场景也希望可以通过 Hologres实现点查。

④ 预计算范畴问题。实时更新场景,比如维度表要实时更新,原维度表无法导入,则可能会出现跨库问题,因此需要在一个库里。

image.png

上图从左到右是数据的生产过程。左边是原始表,中间平台是 model cube 维度。表维度分别是城市、事件、页面和日期。如果需要求一个pv,Cuboid是 2n。Cuboid 生成后,到 Hologres逻辑结构做聚合,一个Cuboid 对应一张表,天然分开。

image.png

Cuboid天然地将维度减少了,在做分布时,可以将常用查询作为分布键。该层决定了查询时完全的分布式。第二步,利用 Hologres segment key 字段,通常为时序字段,一般会带日期,而日期决定了 shard内文件的快速搜索。然后将Cluster key 配置上高频filter索引,能够快速找到 block。最后通过bitmap columns 将非高频 filter 配置上,能够在每个块中利用 bitmap 索引快速找到数据。

以上查询在在预计算类的自助分析平台平均RT小于 1 秒, KV 类指标RT约10ms,可支撑百万QPS。

image.png

成本是企业的重点关注。作为一个查询加速平台,我们维护的表种类非常多,比如最底层的明细表、分表、抽样表等。业务系统会自己做分表,但是通用产品比如 BI 产品不会帮助业务做分表。分表也属于 OLAP 查询加速领域的需求,可能会做近实时计算进行抽样。

多种表的查询种类和使用周期不一样,与成本息息相关。Hologres提供了热存、冷存、外表等存储介质,性能依次降低,成本依次升高。可根据实际业务表的分析需求和时间周期的查询需求自由选择。


Q&A

Q:bitmap分组,假设是五百万一组,如果在第一组里的人是浏览,第二组是预付款,两组之间的人如何对应上?

A:bitmap 存储位与表的维度没有任何关系,比如在第六组第五个的人永远都是在第五个。

Q:冷数据是通过在 Hologres建外表的形式存在 MaxComputer 里吗?

A:不是。冷数据与外表的区别在于外表还是外部存储,比如存到 MC ,但是冷数据是 Hologres自己的,只不过通过OSS 实现。

Q:通过什么方式使用冷热数据?

A:直接使用。冷存数据由Hologres管理,但是存在 Hologres内部的 OSS里。热存用SSD,存储格式依然是Hologres自己内部的格式,带索引。使用方式上,有一张分区表,在分区表上定策略,可以指定保留 7 天或14 天,14 天以上的数据分区会整体转移到冷存。

Q:Hologres里什么时候建议建分区表?

A:预计算场景不需要建分区表。如果没有实现预计算,首先小数据量不建议建分区,因为小分区多会导致碎片比较多、文件比较多。另外每天固定查分区数据或整日替换等场景建议建分区。一般情况下,大于 1 亿则建议建分区。

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
相关文章
|
存储 消息中间件 分布式计算
Hologres实时数仓在B站游戏的建设与实践
本文介绍了B站游戏业务中实时数据仓库的构建与优化过程。为满足日益增长的数据实时性需求,采用了Hologres作为核心组件优化传统Lambda架构,实现了存储层面的流批一体化及离线-实时数据的无缝衔接。文章详细描述了架构选型、分层设计(ODS、DWD、DIM、ADS)及关键技术挑战的解决方法,如高QPS点查、数据乱序重写等。目前,该实时数仓已广泛应用于运营分析、广告投放等多个场景,并计划进一步完善实时指标体系、扩展明细层应用及研发数据实时解析能力。
Hologres实时数仓在B站游戏的建设与实践
|
存储 分布式计算 MaxCompute
Hologres实时湖仓能力入门实践
本文由武润雪(栩染)撰写,介绍Hologres 3.0版本作为一体化实时湖仓平台的升级特性。其核心能力包括湖仓存储一体、多模式计算一体、分析服务一体及Data+AI一体,极大提升数据开发效率。文章详细解析了两种湖仓架构:MaxCompute + Hologres实现离线实时一体化,以及Hologres + DLF + OSS构建开放湖仓架构,并深入探讨元数据抽象、权限互通等重点功能,同时提供具体使用说明与Demo演示。
|
SQL 弹性计算 运维
Hologres计算组实例&分时弹性入门实践
本文由骆撷冬(Hologres PD)撰写,围绕Hologres计算组实例与分时弹性的入门实践展开。内容分为三部分:第一部分介绍Hologres计算组实例的原理与架构,解决负载隔离、资源浪费、大任务和运维难题;第二部分演示计算组实例的入门实践,包括管理、授权、连接及监控等操作;第三部分讲解分时弹性的使用,涵盖配置方法、成本优化及监控告警。通过具体案例与操作步骤,帮助用户更好地理解和应用Hologres的弹性计算能力。
|
SQL 运维 网络安全
【实践】基于Hologres+Flink搭建GitHub实时数据查询
本文介绍了如何利用Flink和Hologres构建GitHub公开事件数据的实时数仓,并对接BI工具实现数据实时分析。流程包括创建VPC、Hologres、OSS、Flink实例,配置Hologres内部表,通过Flink实时写入数据至Hologres,查询实时数据,以及清理资源等步骤。
|
SQL 存储 机器学习/深度学习
基于 Dify + Hologres + QWen3 进行企业级大数据的处理和分析
在数字化时代,企业如何高效处理和分析海量数据成为提升竞争力的关键。本文介绍了基于 Dify 平台与 Hologres 数据仓库构建的企业级大数据处理与分析解决方案。Dify 作为开源大语言模型平台,助力快速开发生成式 AI 应用;Hologres 提供高性能实时数仓能力。两者结合,不仅提升了数据处理效率,还实现了智能化分析与灵活扩展,为企业提供精准决策支持,助力数字化转型。
1458 2
基于 Dify + Hologres + QWen3 进行企业级大数据的处理和分析
|
SQL DataWorks 关系型数据库
DataWorks+Hologres:打造企业级实时数仓与高效OLAP分析平台
本方案基于阿里云DataWorks与实时数仓Hologres,实现数据库RDS数据实时同步至Hologres,并通过Hologres高性能OLAP分析能力,完成一站式实时数据分析。DataWorks提供全链路数据集成与治理,Hologres支持实时写入与极速查询,二者深度融合构建离在线一体化数仓,助力企业加速数字化升级。
|
存储 消息中间件 Java
抖音集团电商流量实时数仓建设实践
本文基于抖音集团电商数据工程师姚遥在Flink Forward Asia 2024的分享,围绕电商流量数据处理展开。内容涵盖业务挑战、电商流量建模架构、流批一体实践、大流量任务调优及总结展望五个部分。通过数据建模与优化,实现效率、质量、成本和稳定性全面提升,数据质量达99%以上,任务性能提升70%。未来将聚焦自动化、低代码化与成本优化,探索更高效的流批一体化方案。
1045 12
抖音集团电商流量实时数仓建设实践
|
存储 SQL Java
Flink CDC + Hologres高性能数据同步优化实践
本文整理自阿里云高级技术专家胡一博老师在Flink Forward Asia 2024数据集成(二)专场的分享,主要内容包括:1. Hologres介绍:实时数据仓库,支持毫秒级写入和高QPS查询;2. 写入优化:通过改进缓冲队列、连接池和COPY模式提高吞吐量和降低延迟;3. 消费优化:优化离线场景和分区表的消费逻辑,提升性能和资源利用率;4. 未来展望:进一步简化用户操作,支持更多DDL操作及全增量消费。Hologres 3.0全新升级为一体化实时湖仓平台,提供多项新功能并降低使用成本。
1184 1
Flink CDC + Hologres高性能数据同步优化实践
|
存储 弹性计算 运维
Hologres计算组实例&分时弹性入门实践
本文整理自 Hologres 产品团队的观秋老师关于Hologres 计算组实例&分时弹性入门实践的分享。内容主要为以下三部分: 1. Hologres 计算组实例介绍 2. 计算组实例入门实践 3. 分时弹性入门实践
590 16
|
SQL 存储 JSON
实时数仓 Hologres 产品介绍:一体化实时湖仓平台
本次方案的主题是实时数仓 Hologres 产品介绍:一体化实时湖仓平台,介绍了 Hologres 湖仓存储一体,多模式计算一体、分析服务一体和 Data+AI 一体四方面一体化场景,并对其运维监控方面及客户案例进行一定讲解。 1. Hologres :面向未来的一体化实时湖仓 2. 运维监控 3. 客户案例 4. 总结
1152 14

热门文章

最新文章