关闭

Appboy基于MongoDB的数据密集型实践

发表于:2015-9-14 10:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:mongodb    来源:51Testing软件测试网采编

  【编者按】本文摘录自Appboy联合创始人兼CIO Jon Hyman在MongoDB World 2015上的演讲。Appboy正在过手机等新兴渠道尝试一种新的方法,让机构可以与顾客建立更好的关系,可以说是市场自动化产业的一个前沿探索者。在移动端探索上,该公司已经取得了一定的成功,知名产品有iHeartMedia、PicsArt、Etsy、Samsung、Urban Outfitters等。本文主要包括Statistical Analysis、Multivariate Testing and Rate Limiting、Flexible Schemas: Extensible User Profiles和Data Intensive Algorithms四方面内容。
  以下演讲摘录:
  为了支撑其营销自动化平台,Appboy为其分析和定位引擎使用了MongoDB作为其主要数据存储层。时下,Appboy每天需要处理上万用户的数十亿数据点。本文将分享Appboy关于MongoDB的最佳实践,看看该公司如何在规模迅速扩大后仍然保持敏捷。本文将谈及诸多话题,如文档随机抽样、多变量测试及其Multi-arm bandit optimization、Field tokenization,以及Appboy如何在一个个体用户基础上存储多维数据从而优化以最佳的时间给终端用户提供信息。
  Part 1:Statistical Analysis
  Appboy适用于各种大小的客户群体,其中包括了只有数万用户的初级客户,也有客户已经拥有了数千万用户。但是毫无疑问的是,通过Appboy营销自动化技术,即使拥有上亿用户规模的客户仍然可以便捷地收集和储存用户数据。
  Appboy平台的核心是customer segmentation(客户细分)。segmentation允许机构根据行为数据、消费史、技术特性、社交概要等来定位。创新和智能的使用Segmentation和信息自动化使机构可以无缝地、轻松地将安装用户转化为活跃的用户,从而斩获kpi,Segments可以按需定制。
  当客户使用Appboy仪表板定义segment时,Appboy可以在一些特征上做实时计算,比如群体大小、开通消息推送的用户规模、用户平均消费能力。这些计算需要实时和交互式的,而在不具备谷歌规模的基础设施上,在这种规模上做交互式分析是极具挑战的。这里存在的挑战是如何更有效率的支撑如此规模,以及如何服务于各种体积的用户。基于这些原因,随机抽样是个不错的选择。
  关于统计抽样
  在现实世界中,随机的统计抽样时刻发生着,比如针对美国总统的舆情调查不可能去单独的问每个人,全国收视率统计也并不是靠评级机构查看每个用户的电视机。相反,这些数来源于统计抽样,统计抽样通过抽样小部分群体来获得更大群体的特征。通过统计数据,1个小样本就可以对大规模群体做出准确的评估。许多政治民意调查只调查几千成年人就可以估计数以百万计的公民的政治倾向。但调查机构的报告与统计也经常带有所谓的置信区间,也称为偏差。
  统计抽样的使用
  相同的原则可以运用到这里。与传统分析数据库相比,抽样用户有一个明显的优势,因为这里可以从用户的整体行为上进行抽样,而不是从原始事件流中取样。需要注意的是,Appboy只针对segment 交互式反馈做抽样,从而在网络仪表板反馈。当做营销活动或对Segment进行分析作为Facebook Custom Audience 时,准确用户会被计算,而这些原则并不适用。
  在开始时,会在已知范围document 内添加一个随机数字,称之为“bucket”。选择一个合理的小用户群,从而有可能聚焦每个用户,需要注意的是,这个抽样规模乘以bucket的数量必须覆盖该范围。举个例子,只选择了1到10的抽样显然不可以支撑上亿规模,1到100万显然是个不错的选择。在Appboy共拥有1万个“bucket”,所以应该是0到9999。
  假设这里有1000万个documents(代表用户),首先将给这些文档加个数字并对其索引。
  {
  random: 4583,
  favorite_color: “blue”,
  age: 29,
  gender: “M”,
  favorite_food: “pizza”,
  city: “NYC”,
  shoe_size: 11
  }
  db.users.ensureIndex({random:1})
  第一步是获得1个随机样本。1000万个document ,10000随机的buckets,每个buckets应该有1000个用户:
  db.users.find({random: 123}).count() == ~1000db.users.find({random: 9043}).count() == ~1000db.users.find({random: 4982}).count() == ~1000
  如果抽取整个用户基础的1%,那就是10万的用户。为了实现这一点,必须选择一个随机范围来“托管”这些用户。举个例子,这些都是可以的:
  db.users.find({random: {$gt: 0, $lt: 101})
  db.users.find({random: {$gt: 503, $lt: 604})
  db.users.find({random: {$gt: 8938, $lt: 9039})
  db.users.find({$or: [
  {random: {$gt: 9955}},
  {random: {$lt: 56}}
  ])
  在有了随机样本后,下一步就是对其分析。要衡量其真正的大小,首先需要进行一个计数,因为鉴于随机性这里不可能精确到100000。
  在并行的方式,这里可以在样本上添加任意查询,这里拿找出最喜欢蓝色的男性用户比例。
  sample_size = db.users.find({random: {$gt: 503, $lt: 604}).count()
  observed = db.users.find({random: {$gt: 503, $lt: 604}, gender: “M”, favorite_color: “blue”).count()
  假如,样本大小设定是100000,观察数是11302。从这里可以推断出,在1000万用户中有11.3%的用户符合标准。要称为优秀的统计学家,还应该提供一个置信区间来估计偏离值。置信区间背后的数学有点复杂,但是,如果想自己尝试的话,有无数样本sizecalculators可供参考。本文使用的案例中,置信区间为+ / – 0.2%。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号