APP下载

技术专栏 | 如何做到30分钟内完成对数十亿受众资料的分析_进行

消息来源:baojiabao.com 作者: 发布时间:2024-05-16

报价宝综合消息技术专栏 | 如何做到30分钟内完成对数十亿受众资料的分析_进行

智慧营销云(Smart Marketing Cloud,以下简称SMC),是TalkingData推出的数字化营销平台。依托TalkingData 及合作伙伴所提供的强大资料支撑,提供了一套从人群构建、客群洞察,再到同步投放、客观监测的一体化解决方案,帮助企业构建完整的数字化营销闭环。

一、受众分析需求及难点

SMC服务多个行业的广告主和广告代理,帮助他们对目标受众人群进行分析、洞察和触达。但是由于SMC汇集了包括一方企业资料、二方媒体资料和TalkingData自有资料在内的多源资料,资料量非常大;此外,为了对受众人群进行全面、深入的画像,TalkingData基于人口属性、移动端行为偏好等建立了拥有六大类别、800多个标签的标签体系,维度非常多。这对资料的处理分析提出了巨大的挑战。

在具体使用中,产品效能是企业非常重视的方面。为了提升SMC的效能,让使用者能够快速、准确的实现目标受众洞察,我们从技术上对SMC的受众分析能力进行了三大方面的优化:

Bitmap计算

在SMC中,由于资料量巨大,我们对所有广告主构建的受众人群均会使用RoaringBitmap进行储存。由于RoaringBitmap只能储存整型资料,而我们需要处理的资料量在大多数情况下高达数十亿条,故我们将RoaringBitmap进行扩充套件,使之支援长整型资料。

原生RoaringBitmap只支援int型别,最大资料储存量为2147483647,由于TalkingData装置资料量约80亿,已远远超过RoaringBitmap的储存范围,所以需要使用长整型来扩充套件RoaringBitmap。

以 set(long)方法为例,定址方法大概如下程式码所示:

publicvoidset(longoffset) {

intindex = ( int) (offset / max);

intvalue= ( int) (offset % max);

bitmaps. get(index). set( value);

}

扩充套件之后的RoaringBitmap,已经获得了比较好的储存和读取速度。但这还只是开始,随后还需要对这些人群资料进行多维度的分析和计算。

RocksDB加速计算

SMC的受众分析维度包含:人口属性维度、装置属性维度、商旅属性、App行为分析等。基于以上维度对某个广告受众人群包进行分析时,需要进行约10万次Bitmap的交并运算,此时系统CPU和I/O就成了瓶颈。于是我们采用RocksDB进行Bitmap的快取,以减少I/O耗时。

RocksDB依靠大量灵活的配置,使之能针对不同的生产环境进行调优,包括直接使用内存、使用Flash、使用硬盘或者HDFS。支援使用不同的压缩演算法,并且有一套完整的工具供生产和除错使用。

RocksDB优势如下:

RocksDB支援snappy、zlib、bzip2 lz4和lz4_hc压缩演算法。对不同层的资料可以配置不同的压缩演算法。一般来说,90%的资料储存在Lmax层。一个典型的安装可能是L0-L2层不配置压缩演算法,中间层用snappy压缩演算法,而Lmax层采用zlib压缩。使用RocksDB后,I/O效能显著提升,原来需要3个小时以上才能计算完成的任务,现在缩短到1.5小时即可计算完毕。

但这个时间仍然太长,让人无法忍受,于是我们想到对系统资料进行抽样,以加快运算速度。

随机抽样是最为常用的演算法之一,它最大的特点是能够通过抽取、计算较小的资料样本量,来尽可能客观的推断资料总体特征。

我们需要进行随机抽样且保持有序,当总装置量为n,需要随机挑选出m个装置,其中m

轮流判断n个阵列成的列表中每个数的概率(m/n),每次判断后n=n-1,若当前被判断的数被选择,则m=m-1,否则 m 不变。

publicstaticSetrandom(longn,intm){

Setset= newTreeSet;

longremaining = n -1;

2019-09-26 16:54:00

相关文章