TalkingData :如何做到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)方法为例,寻址方法大概如下代码所示:
public void set(long offset) { int index = (int) (offset / max()); int value = (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优势如下:
为需要存储TB级别数据到本地FLASH或者RAM的应用服务器设计;
针对存储在高速设备的中小键值进行优化——支持存储在flash或者直接存储在内;
性能随CPU数量线性提升,对多核系统友好。
RocksDB支持snappy、zlib、bzip2 lz4和lz4_hc压缩算法。对不同层的数据可以配置不同的压缩算法。一般来说,90%的数据保存在Lmax层。一个典型的安装可能是L0-L2层不配置压缩算法,中间层用snappy压缩算法,而Lmax层采用zlib压缩。使用RocksDB后,I/O性能显著提升,原来需要3个小时以上才能计算完成的任务,现在缩短到1.5小时即可计算完毕。
但这个时间仍然太长,让人无法忍受,于是我们想到对系统数据进行抽样,以加快运算速度。
随机抽样算法
随机抽样是最为常用的算法之一,它最大的特点是能够通过抽取、计算较小的数据样本量,来尽可能客观的推断数据总体特征。
我们需要进行随机抽样且保持有序,当总设备量为n,需要随机挑选出m个设备,其中m < n。输出是[0 , n-1] 范围内m个随机整数的有序列表,不允许重复。从概率的角度说,我们希望得到没有重复的有序选择,其中每个选择出现的概率相等。简单来说就是从n个数中, 随机抽取m个数据,并保持有序。
轮流判断n个数组成的列表中每个数的概率(m/n),每次判断后n=n-1,若当前被判断的数被选择,则m=m-1,否则 m 不变。
实现方式:
public static Set<Long> random(long n,int m){ Set<Long> set = new TreeSet<Long>(); long remaining = n-1; for (long i = 0; i<n ;i++){ if (Math.random() * remaining < m){ set.add(i); m -= 1; } remaining -= 1; } return set;
}
我们使用次方法从总设备量中随机抽取受众人群分析样本数据并加工成Bitmap。我们假设另此Bitmap为A,男性全量数据M,则计算X人群中的男性占比P的公式为:
采用随机抽样方式获得的占比结果还是会有一定偏差。经对比50组随机构建的受众人群包,对性别占比进行分析,相对误差率均未超过8%,在可接受范围之内。
经过随机抽样计算之后,Bitmap数据占用RocksDB存储显著减小,Bitmap计算效率显著提高,数十亿数据量的受众分析任务可在30分钟内计算完成。
基于以上这些优化,智能营销云可以快速完成对广告受众的分析,让广告主在整个广告投放过程中及时了解自己的目标受众特点以及分布情况,从而指导广告主及时对广告投放受众群体进行调整。
【会员企业】TalkingData
TalkingData 成立于2011年,是国内领先的数据服务提供商。TalkingData秉承“数据改变企业决策,数据改善人类生活”的愿景,围绕TalkingData SmartDP数据智能平台(TalkingData数据中台)构建“连接、安全、共享”的数据智能应用生态,致力于用数据+科技的能力为合作伙伴创造价值,帮助商业企业和现代社会实现以数据为驱动力的智能化转型。
会员专栏
会员专栏是针对会员企业的高质量原创内容与精彩观点的分享栏目,为会员企业提供深度思考、创新理念、案例经验、专业成就等内容分享的平台,旨在扩大会员企业先进思想的影响,传播AI大数据的正确理念,促进AI大数据落地应用,助力传统产业智能化转型升级。
会员专栏欢迎广大会员企业积极参与、踊跃投稿,投稿请注意须为原创。
投稿邮箱:contact@tsingdata.com
合作联系:小数点(decimal_point)
编辑:黄继彦
校对:林亦霖
TalkingData :如何做到30分钟内完成对数十亿受众数据的分析 | 会员专栏相关推荐
- k8s aws 部署_如何在短短30分钟内使用CircleCI设置到AWS S3的持续部署
k8s aws 部署 by Adam Watt 通过亚当·瓦特 如何在短短30分钟内使用CircleCI设置到AWS S3的持续部署 (How to setup Continuous Deployme ...
- 30分钟内使用MongoDB
最近,我被NoSQL错误咬住了-或是我的同事Mark Atwell提出的"燃烧在哪里!" 运动. 尽管我无意于在不久的将来或可预见的将来回避友好的" SELECT ... ...
- 请使用recaptcha_如何在30分钟内使用ReCaptcha和PHP构建Bootstrap电子邮件表单
请使用recaptcha by Ondrej Svestka 通过Ondrej Svestka 如何在30分钟内使用ReCaptcha和PHP构建Bootstrap电子邮件表单 (How to bui ...
- 机器人坐标系建立_如何在30分钟内建立一个简单的搜索机器人
机器人坐标系建立 by Quinn Langille 奎因·兰吉尔(Quinn Langille) 如何在30分钟内建立一个简单的搜索机器人 (How to Build A Simple Search ...
- Retrace AV推出新型涂料添加剂,可在30分钟内灭杀新冠病毒
新型涂料添加剂可在30分钟内消灭新冠病毒,为家庭和工作场所提供高达99.99%的保护 伦敦--(美国商业资讯)--全球数十亿人正尝试重返办公室.学校和社交场所.政府和企业主需要尽其所能提振信心,让 ...
- 如何零基础零费用的在30分钟内用hugo+github pages创建一个专属于你的个人博客 - 简单快捷到建议人手一个
写这篇文章的原因是在网上看了很多的教程,踩了不少的坑,更多的白费了很多功夫,也没找到一篇从头到尾完整有效的个人建站方法. 有些教程年代久远,有些教程极为繁琐,有些教程压根跑不通. 为了方便自己,做个记 ...
- 如何实现生成订单30分钟内未支付则自动取消?
如何实现生成订单30分钟内未支付则自动取消? 数据库轮询 JDK的延迟队列 Quartz 时间轮算法 使用消息队列 数据库轮询 不是很推荐的一种方式,需要定时扫描数据库,借助定时任务工具,如果是多服务 ...
- 停车30分钟内不收费,程序员远程操控挪车,实现自动免费停车...
还记得前几天关于野生钢铁侠如何创造 自动驾驶自行车 的故事吗? 掌握核心科技的程序员们,又开始开脑洞啦!最近又有一个北京的开发者开了 这个脑洞的背景: 北京道路停车的自动收费,停车不足30分钟不计费 ...
- swiftui_使用SwiftUI在30分钟内制作一个应用
swiftui This post was first delivered as a live coding presentation at a Telstra Purple Back2Base ev ...
- Pandas数据处理|筛选与兼职打卡时间差异在一分钟内的全职打卡数据
需求与背景 某公司旗下有很多便利店,但近期却发现个别门店存在全职帮兼职打卡的情况,为此总部领导决定对所有门店的打卡时间数据进行分析,将每一个门店,全职人员和兼职人员上班卡.下班卡其中之一相差1分钟以内 ...
最新文章
- 《C#精彩实例教程》小组阅读05 -- C#变量与常量
- web标准常见问题整理
- JDBC(11)—数据库连接池
- erp开发模式_ERP的完整形式是什么?
- LeetCode 2149. 按符号重排数组(双指针)
- pytorch 池化
- SAP License:未清项启用
- bzoj 4319: cerc2008 Suffix reconstruction(构造)
- mysql unsigend_创建表 查询数据
- 计算机通信网络学什么软件,通信工程专业需要用到的电脑软件有哪些
- gwr模型用什么做_干货|教你如何用Stata做二元选择模型
- ubuntu下使用CPU频率控制
- UEFI 模式下重新安装系统注意事项
- NAS存储文件权限的设置方法
- 移动硬盘突然在电脑上无法显示
- Python数据分析之探索性分析(多因子复合分析)
- 贝叶斯算法应用于反垃圾邮件
- POJ 1375 Intervals
- URL的作用是什么?它由几部分组成?
- 数据挖掘流程总结及挖掘算法比较
热门文章
- 清华小学上册计算机教学案例,创新型教学案例.doc
- 2022-2028年全球及中国点胶枪行业发展现状调研及投资前景分析
- 央行降准:对股市、楼市、债市、商品、人民币汇率的影响
- MIPI扫盲——DSI介绍(一)
- excel 永久保存宏命令
- 一、爬虫 - 新浪爱问共享资源全下载之解决方案
- 蓝桥杯——调手表(python解答)
- 冰点还原无法修改计算机时间,设置冰点还原解冻期间方法
- Ubuntu18.04 配置 bond4 + RG-5750-LACP
- android 以太网 热插拔,android_8.1 hdmi设备热插拔事件