Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >秒级去重:ClickHouse在腾讯海量游戏营销活动分析中的应用

秒级去重:ClickHouse在腾讯海量游戏营销活动分析中的应用

作者头像
腾讯云大数据
发布于 2020-10-16 03:10:15
发布于 2020-10-16 03:10:15
2.7K00
代码可运行
举报
文章被收录于专栏:腾讯云大数据腾讯云大数据
运行总次数:0
代码可运行

导语 | 腾讯内部每日都需要对海量的游戏营销活动数据做效果分析,而活动参与人数的去重一直是一项难点。本文将为大家介绍腾讯游戏营销活动分析系统——奕星,在去重服务上的技术思路和迭代方案,希望与大家一同交流探讨。文章作者:王方晓,腾讯运营开发工程师。

一、背景

奕星 (EAS) 是腾讯内部专注于游戏营销活动分析的系统,在营销活动效果分析中,奕星遇到一个最大的问题就是对活动参与人数的去重,并给出对应的活动号码包。单个营销活动的周期是固定的,但活动与活动之间时间很少会有完全相同的情况。

比如A活动时间是1-10号,B活动是5-15号,那么如果想分别得到 A 和 B 的去重参与人数,则必须分别开启任务对 A 和 B 在他们所属的时间区间内进行计算去重。在海量日志中每天对数千个营销活动进行类似计算,对资源消耗是一个不小的挑战。

而实际情况下,需要计算的任务量还远远不止于此,奕星同时还提供游戏官网非活动链接的去重数据,甚至每个链接在每个推广渠道的去重数据,这个任务量级目前高达每天 50W+ 以上。

总结来看,面临的主要问题就是如何在海量数据的情况下,处理数量巨大的而且周期各不相同的去重计算任务。

二、原有解决方案

对于这个问题,奕星之前尝试了不少方案,这里简单介绍一下。

1. 基于TDW临时表的方案

TDW 是腾讯内部通用的一站式大数据平台,服务稳定,功能强大。对于这些任务的计算,奕星最早是想借助于 TDW 的计算能力来完成。

思路很简单,就是在 pysql 中循环对每个活动执行对应的 hiveSQL 来完成 T+1 时效的计算。

但这个方案最大的缺点就是:任务基本都是顺序执行,重复扫描大量日志,导致效率非常低下,而且从HDFS中拉取最终的去重文件也非常耗时。

虽然后面采用多种思路优化,比如将原始日志先每天统一批量去重一次入到临时表里,所有计算基于临时表来完成等,但最终还是效率无法进一步提高而放弃。

2. 基于实时计算+文件增量去重的方案

在奕星的数据统计中,基于 Storm 的实时计算任务,主要是提供各个活动的实时 PV 和参与次数等计数类数据。

由于内存资源有限,业界也有基于近似去重算法(如 hyperloglog )直接在 Storm 中算出近似去重结果的,但无法给出精确的结果和最终的号码包文件,所以不符合选型要求。

而内存资源有限,更不可能容纳下这么大量的号码包数据,所以通过内存完全得出最终精确去重结果的方案基本不现实。

但内存虽然不能容纳整个活动期间的号码数据或者一天之内的号码数据,但是否可以容纳 1 分钟,5 分钟的号码数据?

通过测试计算发现,在内存中缓存 5 分钟内的去重号码数据是完全可行的,并且最高可以将原始日志降低 90% 以上的量级。缓存 1 分钟的话,最高也可以将原始日志降低 70% 以上的量级。

主要的原因是玩家参与活动的时候是即时参与行为,比如一个玩家来到一个活动页面后,一般是连续将活动中能参与的功能都参与下,不会参与完一个等很久再参与下一个,所以导致同一个玩家的日志时间连续性较高,单位时间窗口内去重后量级会降低很多。

基于此,目前奕星主要是基于 Storm 在单位时间窗口内进行初次去重,以达到降低原始数据量级的目的。

最初的基于 TDW 的去重方案,除了重复扫描等问题外,还有一个问题就是:同一个活动不同日期之间的计算无法前后衔接,比如 A 活动在活动期间(1-10号),每天的计算逻辑基本一致,都是要全量扫描 1-10 号之间的日志(或中间结果)来完成计算。

所以团队将目光投向如何在活动前期去重的基础上来增量去重的问题上来。最终选定的方案是基于文件的计算方案,如下图所示,活动每天都滚动生成最新的去重号码包文件,而次日同一个活动的日号码包再与这个总包交叉后得到更新的号码包文件,如此重复,直到活动结束得到最终的活动号码包文件。

3. 基于实时计算+LevelDB增量去重方案

文件增量去重的方案,运行了一段时间后,就出现了一个很大的问题:就是每日新增的文件量巨大,日均几十万。

虽然没有达到把单台机器 inode 占满的情况,但在增量去重时,大量的小文件 IO 操作,导致增量去重效率非常低,最后被迫只支持高优先级业务的活动和单个活动参与量大于一定阀值的大活动。

经过团队小伙伴的调研,最终将目光锁定在 Google 的 LevelDB 上,LevelDB 是 Google 开源的持久化 KV 单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般。

也就是说,LevelDB 很适合应用在查询较少,而写入很多的场景,这正好符合我们号码包去重服务的应用场景。

另外号码包的存储本身也是一个K-V的存储,文件名为 key,文件内容为 value,正好跟 LevelDB 支持的 K-V 结构类似。

使用 LevelDB 后,可以毫秒级得到某个活动的准确去重人数,并且可以在 10 秒内导出千万量级的号码包文件,相比传统的文件操作,大大提高了号码包去重服务的整体效率。

三、基于CLickHouse的解决方案

虽然基于 LevelDB 的去重服务可以很好的满足大部分营销活动的人数去重需求。但扩展性较差,数据回溯困难等问题比较突出,类似于基于预计算模式的 OLAP 系统。比如系统只支持活动整个期间内的去重人数计算,如果想知道活动期间内某一段时间内的去重就无法实现。

另外如果某个活动引入了脏数据后,只能将整个活动的 K-V 结构删除后重跑,非常耗时。团队经过调研后,将目光锁定到基于 MPP 的 OLAP 方案上。

基于 MPP 的 OLAP 系统,在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点通过专用网络或者商业通用网络互相连接,彼此协同计算,作为整体提供数据库服务

相对于基于预计算模式的 OLAP 系统来说,它最大的优点就是灵活,扩展性强,而最大的缺点是响应时间不及时,甚至需要较长的时间等待。

而在营销活动效果分析中,往往灵活性比效率要更加重要,或者说效率是可以稍微妥协的一面,所以我们选择基于 MPP 的 OLAP 系统。

目前市面上有很多优秀的 OLAP 系统,但要么是收费的(Vertica),要么是基于 hadoop 生态的(presto,Impala),整体架构比较重。

而作为战斗民族开源神器的 ClickHouse 不但拥有自己的文件系统和极高的压缩比,在集群部署上甚至可以不用 zk 来独立部署,甚至在性能上“吊打”商业的 OLAP 系统(详见官方测评数据:https://clickhouse.tech/benchmark/dbms/)。

综合以上考虑,最终选择了 ClickHouse,去重服务就变成了 SQL 查询,例如下面这条 SQL 就是查询 LOL 官网某个页面在 9 月 6 日这 1 天的 UV:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select uniqExact(uvid) from tbUv where date='2020-09-06' and url='http://lol.qq.com/main.shtml'

在 24 核 96G 内存的机器上,实际测试下来在 1 亿条记录中,精确去重一个参与量为100W 的活动,仅需 0.1 s 不到,而导出这个号码包文件只需要 0.2 s 不到。

虽然查询效率上比 LevelDB 有一点差距,但灵活性却大大提高,可以任意指定时间区间和条件来做去重查询,符合当前业务场景关注灵活度的需求场景,而且性能上从毫秒到秒级的延迟基本也可以接受。

四、结语

去重服务的的问题伴随奕星系统整个开发和运营周期,期间经历过很多尝试,部分临时的尝试方案尚未在本文列出,但一直的出发点就是业务需求本身,并且结合当时的运维环境来选取对应的技术方案。

不追求绝对的高性能(意味成本也高),而关注最合适,易于扩容,搬迁,故障替换等有利于服务长期稳定运营的特性。当然,随着更多利器的出现,也会去不断的尝试使用,毕竟科学技术才是第一生产力。

目前 ClickHouse 在奕星等多个数据系统和诸多个性化营销分析的场景中落地使用,数据总规模超过 5 千亿,还在不断增长中。

本文只是通过对去重问题的历史回顾顺带简单介绍了一下 ClickHouse,更多关于ClickHouse 的详细介绍和实操,可以自行搜索官方文档和其他分享内容,最后欢迎大家来评论区探讨 ClickHouse 有关的更详细的问题和应用场景。

点击文末「阅读原文」,了解腾讯云弹性MapReduce(提供ClickHouse集群的快速构建)更多信息~

腾讯云大数据

长按二维码 关注我们

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Apache Doris 常见适用场景浅析
三个显示关键词及一个隐式关键词:MPP 架构、OLAP、列式存储以及隐藏的全面向量化。
苏奕嘉
2025/07/14
820
Apache Doris 常见适用场景浅析
技术分享 | ClickHouse & StarRocks 使用经验分享
本篇分享下个人在实时数仓方向的一些使用经验,主要包含了ClickHouse 和 StarRocks 这两款目前比较流行的实时数仓,文章仅代表个人拙见,有问题欢迎指出,Thanks♪(・ω・)ノ
爱可生开源社区
2023/01/17
5K0
【流计算 Oceanus】巧用 Flink 实现高性能 ClickHouse 实时数仓
Apache Flink 是流式计算处理领域的领跑者。它凭借易用、高吞吐、低延迟、丰富的算子和原生状态支持等优势,多方位领先同领域的开源竞品。
KyleMeow
2021/11/25
5.3K3
众安保险:为了实时数据更新,我们把ClickHouse换成了StarRocks
近年来,众安保险致力于加速数据价值向业务价值转化,在“互联⽹+保险⾦融”的双轮驱动下,诞生了数字化转型中专门针对业务数据管理和分析的系统产品——集智。
java进阶架构师
2022/05/17
1.9K0
众安保险:为了实时数据更新,我们把ClickHouse换成了StarRocks
小程序是如何设计百亿级用户画像分析系统的?
导语 | We 分析是微信小程序官方推出的、面向小程序服务商的数据分析平台,其中画像洞察是一个非常重要的功能模块。微信开发工程师钟文波将描述 We 分析画像系统各模块是如何设计,在介绍基础标签模块之后,重点讲解用户分群模块设计。希望相关的技术实现思路,能够对你有所启发。 目录 1 背景介绍    1.1 画像系统简述    1.2 画像系统设计目标 2 画像系统整体概述 3 基础标签模块    3.1 功能描述    3.2 技术实现 4 用户分群模块    4.1 功能描述    4.2 人群包实时预估
腾讯云开发者
2023/03/10
2.5K0
小程序是如何设计百亿级用户画像分析系统的?
苏宁基于 ClickHouse 的大数据全链路监控实践
ClickHouse 是一款优秀的 OLAP 分析引擎,尤其是在单表分析 、Colocate Join 方面性能表现尤为突出。ClickHouse 之所以在众多的 OLAP 分析引擎中成为佼佼者,主要是因为它具备以下特点:列式存储、LSM-Tree 存储引擎、向量化执行引擎、异步 Merge 和 Mutation 机制、并发 MPP+ SMP 等。
深度学习与Python
2020/09/14
2.2K0
ClickHouse 在有赞的实践之路
本文主要介绍了 ClickHouse 的简单原理,有赞 OLAP 相关组件以及 ClickHouse 在有赞的实践之路。
用户1278550
2021/02/01
1.8K0
ClickHouse 在有赞的实践之路
Clickhouse 实践
在数据量日益增长的当下,传统数据库的查询性能已满足不了我们的业务需求。而Clickhouse在OLAP领域的快速崛起引起了我们的注意,于是我们引入Clickhouse并不断优化系统性能,提供高可用集群环境。本文主要讲述如何通过Clickhouse结合大数据生态来定制一套完善的数据分析方案、如何打造完备的运维管理平台以降低维护成本,并结合具体案例说明Clickhouse的实践过程。
ruochen
2021/11/21
1.7K0
查询提升 200 倍,ClickHouse 你值得拥有!
来源:https://juejin.im/post/6863283398727860238
Java技术栈
2020/11/23
1.4K0
查询提升 200 倍,ClickHouse 你值得拥有!
腾讯计费:亿万级大促活动自动化保障体系
9月14-15日,GOPS全球运维大会上海站圆满举行,为期两天的运维盛宴,为各位运维人带来了相互交流和学习的绝佳平台,来自腾讯技术工程事业群(TEG)计费平台部的黄宇给大家带来了「亿万级大促活动自动化保障体系」的主题分享。 我们同步了嘉宾现场沙龙分享视频(内含高清PPT),请点击下方「腾讯技术课小程序」卡片即可查看: 同时附上整理好的演讲稿: 黄宇,来自腾讯技术事业群的计费平台部,在鹅厂长期从事虚拟支付、多终端支付、账户存储、风控、结算等领域的工作,带领团队负责腾讯千亿级计费大盘的整体运营和质量,目前
腾讯技术工程官方号
2019/09/30
3.1K0
腾讯计费:亿万级大促活动自动化保障体系
主流大数据OLAP框架对比
随着互联网、物联网、5G、人工智能、云计算等技术的不断发展,越来越多的数据在互联网上产生,对互联网的运营也开始进入精细化,因此大数据、数据分析、数字营销开始变成每个互联网企业的重点。在做数据分析时有OLAP、OLTP是我们必定会遇到的技术,在介绍OLAP引擎技术选型之前,我们先看看这两个技术分别是什么意思?
qihang
2024/03/16
2.4K0
[业界方案] ClickHouse业界解决方案学习笔记
本文通过分析总结几篇文章来看目前工业界可能偏好的解决方案。学习目的是:大致知道其应用领域,技术特点和未来方向,看看目前工作中是否可以用到,或者当以后选型时候能够做到心里有数。
罗西的思考
2020/09/07
1.9K0
架构探索之ClickHouse
Tech 导读 ClickHouse是一款开源的列式数据库管理系统,适用于在线分析处理(OLAP)场景,本文通过介绍ClickHouse,帮助读者今后快速地处理大规模数据,并获得实时的分析结果,为业务提供有力支持。
京东技术
2024/01/22
5030
架构探索之ClickHouse
微信ClickHouse实时数仓的最佳实践
导语 | 微信作为一款国民级应用,已经覆盖了社交、支付、出行等人们生活的方方面面。海量多样化的业务形态,对数据分析提出了新的挑战。为了满足业务数据分析的需求,微信WeOLAP团队联手腾讯云,共建千台规模、数据PB级、批流一体的ClickHouse数据仓库,实现了10倍以上的性能提升。本文将由浅入深,为大家揭晓微信在ClickHouse实时数仓实践中积累的经验及方法。 (作者:微信WeOLAP团队&腾讯云数据仓库Clickhouse团队) 一、微信遇到的挑战 一般来说,微信主要的数据分析场景包含以下几
腾讯云开发者
2021/11/29
1.4K0
从 Clickhouse 到 Apache Doris:有赞业务场景下性能测试与迁移验证
有赞是国内领先的电商 SaaS 服务商,目前拥有社交电商、新零售、美业、教育及有赞国际化五大业务体系,通过旗下的社交电商、门店管理、解决方案以及其他新零售 SaaS 软件产品,全面帮助商家解决在移动互联网时代遇到的推广获客、成交转化、客户留存、复购增长、分享裂变等问题,帮助每一位重视产品和服务的商家实现顾客资产私有化、互联网客群拓展、经营效率提升,最终助力商家成功。
SelectDB技术团队
2023/09/12
1.9K0
一文了解ClickHouse
ClickHouse是Yandex(俄罗斯最大的搜索引擎)开源的一个用于实时数据分析的基于列存储的数据库,其处理数据的速度比传统方法快100-1000倍。ClickHouse的性能超过了目前市场上可比的面向列的DBMS,每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。
用户1278550
2020/05/15
1.5K0
超快!大数据分析引擎ClickHouse
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
凹谷
2021/01/18
1.8K0
超快!大数据分析引擎ClickHouse
微信 ClickHouse 实时数仓的最佳实践
作者:微信WeOLAP团队&腾讯云数据仓库 Clickhouse 团队 微信作为一款国民级应用,已经覆盖了社交、支付、出行等人们生活的方方面面。海量多样化的业务形态,对数据分析提出了新的挑战。为了满足业务数据分析的需求,微信 WeOLAP 团队联手腾讯云,共建千台规模、数据 PB 级、批流一体的 ClickHouse 数据仓库,实现了 10 倍以上的性能提升。下文将由浅入深,为大家揭晓微信在 ClickHouse 实时数仓实践中积累的经验及方法。 一、微信遇到的挑战 一般来说,微信主要的数据分析场景
腾讯技术工程官方号
2021/11/25
1.5K0
QQ音乐PB级ClickHouse实时数据平台架构演进之路
QQ音乐是腾讯音乐旗下一款领先的音乐流媒体产品,平台打造了“听、看、玩”的立体泛音乐娱乐生态圈,为累计注册数在8亿以上的用户提供多元化音乐生活体验,畅享平台上超过3000万首歌曲的海量曲库。优质服务的背后,是每天万亿级新增音乐内容和行为数据,PB数据量级的数据计算服务。
腾讯云开发者
2020/06/03
14.2K1
ClickHouse大数据领域企业级应用实践和探索总结
2020年下半年在OLAP领域有一匹黑马以席卷之势进入大数据开发者的领域,它就是ClickHouse。在2019年小编也曾介绍过ClickHouse,大家可以参考这里进行入门:
王知无-import_bigdata
2021/01/20
1.6K0
ClickHouse大数据领域企业级应用实践和探索总结
推荐阅读
相关推荐
Apache Doris 常见适用场景浅析
更多 >
LV.0
这个人很懒,什么都没有留下~
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
加入腾讯云技术交流站
洞悉AI新动向 Get大咖技术交流群
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验