广告库存管理系统性能优化实战

目录:

· 写在最前

· 数据表的构建优化

· 数据的查询优化

· 优化结果展示

· 优化总结

· 关于我们

▐ 写在最前

1. 本文概述

阿里妈妈品牌合约广告,在2021年广告售卖策略发生变化,大促订单量为历史的至少3倍以上。为了保证运营同学的大促下单体验,广告库存管理系统急需性能优化。经过一系列优化后,最终在双11前完成计算性能5-10倍的提升。

系统底层计算引擎为Hologres,通过SQL完成大部分计算逻辑。本文结合阿里妈妈广告库存管理系统,分享Hologres数据库在数据表建立、数据表查询、数据表运维三个阶段的分析与优化方法。

2. 阿里妈妈广告库存管理系统简介

互联网广告业务初始阶段,拥有流量的媒体与广告资源的代理商是市场的主要参与者。线下广告的业务逻辑被照搬到线上,由广告代理公司和媒体签订协议,确保某些广告位在某时间段被指定广告商占有,同时广告商按整体合同支付广告费用,也就是早期的CPT合约广告。

为了提升广告投放效果,需要对广告进行更精细化的售卖,于是合约式广告重点发展为CPM计费的展示量合约广告,俗称"CPM广告"。展示量合约指的是约定某种受众条件下的展示量,然后按照事先约定好的单位展示量价格来结算。这种合约又被称为担保式投送即GD。实际执行中,在未能完成合约中的投放量时,可能要求媒体承担一定的赔偿。

广告库存管理系统是阿里妈妈合约保量广告能力实现的重要系统之一,主要负责广告库存的分配。在展示量合约广告中,库存中存放的是预估的未来N天的广告的展示量信息。广告主通过询量(库存余量查询)与锁量(库存余量锁定)来确认并购买所需的广告量完成下单,后续投放引擎精准的按时按量完成广告投放。

由于广告库存数据量庞大且定向条件众多,导致单次计算量较大,在亿到百亿级别。由于下单请求量极大,尤其是大促期间出现井喷,当天可达到数十万,所以单次请求耗时需要稳定在秒级别,才能保证用户良好的下单体验。询量计算建模分为两种:细粒度占量计算建模竞争系数计算建模

  • 细粒度占量计算:计算逻辑相对简单,适用于定向少,单次计算量在千万到亿级别,不支持库存腾挪的场景。

  • 竞争系数计算:定向条件众多,单次计算量在十亿级别,支持库存腾挪,可配合二部图求解最大化库存。

3. Hologres的简介

Hologres是阿里巴巴自主研发的一站式实时数仓产品,支持高并发和低延时地分析处理PB级数据,并首次提出HSAP(Hybrid Serving/Analytical Processing)服务分析一体的理念。在实时数据的高频点写、点查时,bulkload导入和分析性查询依然能够保证其稳定性与准确性。具体细节可详见:

  • Hologres官方使用文档:

    https://help.aliyun.com/product/113622.html

  • Hologres实现原理解析:

    https://zhuanlan.zhihu.com/p/360750135

  • 链接工具Holoweb:

    https://holoweb.dw.alibaba-inc.com

一、数据表的构建优化

Hologres的快速查询与数据表构建方式强相关,使用的合理表设计不仅能够提高性能,并且可以节约计算和存储的成本。广告库存管理表非常复杂,定向和计算逻辑较多,数据量在亿级别。

为了方便理解,结合业务逻辑将库存管理的计算流程进行抽象化简,用最基础最通用的方式,举例完成全程的优化细节讲解。细粒度占量方式和单次总量余量库存相关计算如下图所示:

beaf044d0694a8fccf8805e0f3134c52.png
  • 库存预估表:预估未来每天每个资源位广告请求量的明细表,天级别全表更新。

  • 库存占量表:广告主下单占用的库存的明细表。每次在BP的下单操作会将锁量数据写入。

  • 库存余量计算:根据过滤条件,筛选库存预估明细中未被占用的总量。

1.1 表组的构建

表组又称Table Group,简称TG。表组是Hologres重要理念之一,主要用于指定单次计算的执行并行度,即shard count(分片的数量)。Hologres的shard本质上完成了数据“分库分表”的效果,所有的shard并行执行。强相关的表在建立时指定相同的表组,数据在分布时会根据设置的字段值构建在一起,在执行计算时直接Local Join来加速计算。

询量业务在同一数据库中有多个业务线,如品牌特秀、品牌优酷等。计算量与性能要求不同,需要表组隔离。

-- 创建 64个Shard的TG
CALL HG_CREATE_TABLE_GROUP ('inquiry_system_texiu_tg', 64);
-- 创建 128个Shard的TG
CALL HG_CREATE_TABLE_GROUP ('inquiry_system_youku_tg', 128);

注: 集群扩容可配合调整shard count,调整shard count需要重建表组,重建关联表。

1.2 数据表的建立

由上图所示,构建两张表:库存预估表和库存占量表。两张表通常会绑定使用,为了高效的计算,需要在数据表建立时指定相关参数才能发挥Hologres全部性能。

1.2.1 表存储类型选取

主要分为行存列存两种存储类型(行列混合存在最新版本支持,在此不进行讨论):

  • 行存:主要用于点查整行的场景,高QPS的依照主键的查询。Blink/Flink的维表和结果表必须使用行存。

  • 列存:主要用于多列的分析型复杂关联查询,如Join、GROUP BY等。

1.2.2 表索引构建
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值