xml地图|网站地图|网站标签 [设为首页] [加入收藏]
Appboy基于MongoDB的数据密集型实践,历时一年半
分类:web前端

图片 1

移动应用已成为获得全球潜在用户最为有力的便捷手段,企业主不应忽视一款设计抢眼、功能全面的商业移动应用的重要性。在开发移动应用时,用户体验和用户界面设计是两大重点,不容忽视。在进行任何应用的开发前,提前理解目标市场的行为模式非常必要。如果不能专注于用户体验,无论设计时花了多少时间,都可能影响到应用的可信度。所谓的“不良用户体验”很可能是“不好的用户界面”所导致的。想要设计体验更佳的应用,在设计开发移动应用时必须牢记并遵照以下要点,这些设计要点在开发移动应用中至关重要:1. 重视响应式设计的概念,这一点非常重要。在为移动应用设计用户界面时,必须记得:这款应用应适用于各类设备与移动应用系统。无论是媒体库、JavaScript还是CSS,应当特别注意多设备平台的问题处理与显示情况。2. 迭代式用户界面设计也是个很大的加分点在设计应用时,想要完全吸引并留住目标用户的注意力,使用迭代式的界面设计是个好办法。别忘了,每个连续迭代的宝贵经验都会让你受益匪浅,并可以在下一个设计项目中重复使用。3. UI设计还需要考虑到508法规遵从与安全性问题。一般来说,在移动应用的设计后期设计者才会考虑安全性与508法规遵从的问题,从而导致整体项目周期拖长。作为一名专业的UI人员,提前咨询后端团队与中介软件专家,以确保正确的数据组以最合适的方式提交是非常重要的。有效的UI设计会格外注重这一点:减少用户的学习难度。这样一来,整体的用户使用效果也会获得相当可观的提高。4. 一名好的UI在保证面向终端用户的同时,遵守问题简单化原则如今,大多数客户端在设计时对“问题简单化”这句话都有误解,采用极简风格的UI。但让问题简单化的真实含义并非如此,而是指:让应用的初次使用者无需阅读详细的介绍与说明,即可打开并使用应用。也就是说,一个简单的用户界面让用户可以通过最简单的步骤来完成多项操作。例如,有效地使用色彩可以让你的应用界面尽可能简单化,这将对鼓励用户下载并定期使用应用起到直接的促进作用。5. 在评估移动应用的UI设计时,让真实用户参与进来。如果你是一名UI设计师,让一名真实用户在评估不同的UI设计方案与观点时参与进来。在开发初期使用这一办法可以减少关于哪些功能应当包括在内,哪些应当去除的疑惑。也不再需要返工,从而节省了项目的经费与时间。6. 让移动UI尽可能以图像显示会更有帮助毫无疑问,外观吸引人的移动应用总是比一个由大量文本组成的设计要更受欢迎。无论是打算让用户使用,还是提醒他们定期重新打开应用,外观更吸引人的UI会更有效果。将丰富的视觉控制装置有效地结合起来,会让用户明白如何与应用进行交互。7.设计一款智能应用UI,遵照OS指南十分必要在设计应用UI时,遵守目标平台OS的用户指南非常必要。强烈推荐尝试导航系统、触控手势与交互的创新。这样会使得你的UI设计风格有所提高,并允许你选择重要功能,放弃不想要的那些。在各大应用市场上架前,应当严格而详细地进行检查。在提交应用前,花些时间研究一些上架的此类应用,应当阅读并遵守每款OS中创建应用UI的指南。总结一款移动应用的UI外观取决于你的目标市场。遵照标准指南来创建的UI使用起来容易理解也比较友好。随着应用开发持续发展,独特而富有直觉的UI会让你的应用鹤立鸡群。文章来源: Medium

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()

经过一年半的开发、2500次commit和30多个版本,Phoenix 1.0终于发布啦!无论你要开发APIs、HTML应用,还是服务于本地设备的网络应用,Phoenix 1.0都能为你提供强有力的支持。它用Elixir写成,拥有漂亮的语法、实用的工具和飞快的运行速度。目前已有很多公司在产品中使用Phoenix的成功案例。实时网络一开始,Phoenix致力于创建可及时交互的网站,目标是做到就像在本地终端上一样在网站上实时交互。这个目标通过Channels实现了,通过原文提供的90s的视频你可以了解到它的强大。Channels给服务器提供了多路复用的连接,来支持交互通信。同时Phoenix抽象了传输层,这样你无需关心用户连接服务的方式。无论是WebSocket、Long-polling还是自定义的连接,使用channel的代码都是一样的。你的代码只要针对一个抽象的“socket”就行了,Phoenix会做好剩下的工作。即使是在服务器集群中,你的信息也可以自动地广播到各个节点。Phoenix的JavaScript客户端也提供了了API,使客户端/服务器通信变得异常简单,就像下面这样:不仅仅是浏览器作为一个Web框架,Phoenix的目标是传统的Web应用,但是现在所谓的“web”的概念已经不同以往,框架也需要与时俱进。Phoenix不再局限于浏览器应用,已经可以连接iPhone、Android等其它智能设备。Justin Schneck、 Eoin Shanaghy、David Stump使用objC、Swift、C#和Java写了Channel客户端,实现了这个目标。为了展示这个成果,Justin做了一个Demo,展示Apple Watch、iPhone和Web浏览器通过本地Phoenix驱动来进行交互。短期和长期的生产力除了高可交互性,Phoenix还具有易用性,使团队能够快速开始,并提高生产效率。但是,软件不是一项短期的工作。Elixir也致力于长期项目的可维护性。Erlang的运行是为运行多年,尽可能减少关机时间的系统设计的,有了这些特性,你部署的系统就会支持自我修复、hot-code上传的特性,支持百万的用户连接。除此之外,Phoenix还支持:短期可体验到的优势:通过mix phoenix.new my_app生成项目。开发中可见实时效果。在任何的模板、view或者asset中做修改可以马上在浏览器中检查效果。通过Ecto项目整合了Postgres,MySQL,MSSQL和MongoDB资源。支持资源产生器,像mix phoenix.gen.html User users name:string age:integer来驱动项目中的输入输出。使用了EEx模板的图层提前编译,加快了响应时间,通常是微秒级的时间。提供实时交互的Channel。以及更多特性……长期可体验到的优势:多个Phoenix应用可以运行在同一个系统进程中,也可以通过umbrella应用将大的应用分割成较小的几个部分,可通过该博文进行深入了解:。Erlang的OTP可以实时查看正在运行的程序并诊断问题。新手入门Phoenix手册可以带你快速入门。如果之前没有接触过Elixir的话,下面是一个锐减的学习资源:Elixir入门手册How I Start: ElixirElixir Workshop使用Phoenix将会是一段难忘的经历,让世界为Elixir和Phoenix震惊吧!反馈针对现在选择Elixir还是Go的问题,业界有着广泛的讨论。是选择Go的高性能,还是Elixir对长期项目的优势?有人总结了Elixir的优点:社区:Ruby社区有很多喜欢Elixir的大牛,例如José Valim、Dave Thomas、Bruce Tate、Chris McCord等。BEAM 和 OTP:Erlang VM和OTP在爱立信已是久经沙场,WhatsApp的百万并发也使它的可靠性得到了证实。Hex:像Ruby的Rubygems,Elixir/Erlang的包管理软件是Hex,这已经成为了库的官方标准。Phoenix:Rails让Ruby火了起来,现在,Phoenix正在将历史重现。语法:从Ruby发展而来,它的语法简单明白,很容易读懂。有位用Ruby工作了7年的程序员最近换了Elixir和Phoenix的工作,已经三个月了。他说对这个改变很满意——社区很棒,工具无敌好用,开源库的稳定性和性能都很好,年轻的项目尤其优秀。Elixir和Phoenix的未来很明朗!译者简介:赖信涛,关注Python,喜欢编程和电子游戏。个人博客: 。 原文链接:Phoenix 1.0—the framework for the modern web just landed

图片 2

本文摘录自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 AnalysisAppboy适用于各种大小的客户群体,其中包括了只有数万用户的初级客户,也有客户已经拥有了数千万用户。但是毫无疑问的是,通过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,首先将给这些文档加个数字并对其索引。

假如,样本大小设定是100000,观察数是11302。从这里可以推断出,在1000万用户中有11.3%的用户符合标准。要称为优秀的统计学家,还应该提供一个置信区间来估计偏离值。置信区间背后的数学有点复杂,但是,如果想自己尝试的话,有无数样本sizecalculators可供参考。本文使用的案例中,置信区间为+ / - 0.2%。优化在实践中,当执行统计抽样时,Appboy基于这些高等级概念概念做了大量优化。首先,Appboy使用MongoDB聚合框架,并且大量使用缓存。因为这里使用的是内存映射存储引擎,对于这种抽样,使用MongoDB的好处是一旦将随机样本加载到内存就可以运行任意查询。这么做为web仪表盘上提供了卓越的体验,用户可以通过添加和删除选择标准并立即看到统计数据更新,从而用户可以进行交互式探索。Part 2:多变量测试和比率限制多变量测试的快速入门在当今竞争激烈的市场中,用户细分是必不可少的。随着经验与品牌继续快速转向移动等新兴渠道,对营销来说,信息定制化和关联性性比以往更加重要,这就是用户分类为什么会成为与客户交互的先决条件。因此一旦定义了一个划分,下一个目标是优化消息推送使其转换最大化,多变量测试则是实现这一目标的一种途径。多变量测试是一个实验,用来比较用户对相同营销活动多个不同推广手段的反应。这些版本拥有相同的营销目标,但在措辞和风格上有所不同,而多变量测试的目标就是为了确定哪个版本能达到最好的转换。例如,假设您有3个不同的推送通知消息:Message 1:This deal expires tomorrow!Message 2:This deal expires in 24 hours!Message 3:Fourth of July is almost over! All deals end tomorrow!此外,除下消息,通常还会测试大量的图片搭配合文本。使用多变量测试,机构可以发现哪种措辞产生更高的转化率。在下次发送推送式通知谈生意时,就可以知道哪种语气和措辞更有效。更好的是,可以通过限制测试的大小,比如在一小部分听众内,找出哪些消息更有效,然后发送这些有效的消息给其他人。在进行一个多变量测试时,消息推送的目标是测试全体,但是同一细分中的其他用户不会收到该条消息。从而,机构可以通过对比两种反应来进行评估。技术应用从技术的角度来看,接收消息的人应该是随机的。也就是说,如果你有100万用户且想要发送一个测试给50000人,这50000人应该是随机分布在你的用户群里。同样的,如果你想测试10到50000用户,随机性有助于确保每个测试组的用户都不同。思考这个问题,它与1个消息中的比率限制问题是一行。许多客户想要给一小群用户发送一条消息。比如,一个电子商务公司想随机的在用户群中发放50000个优惠码。这在概念上,是同样的问题。为了实现这一点,这里可以通过每个文档上的随机值来扫描用户:Appboy会在不同的随机范围内通过随机值用并行处理的方式来管理用户。并追踪全局状态,因此可以知道何时达到比率的极限。对于多变量测试而言,随后还会通过发送比率或者是随机地选择一个消息版本。注意那些有数学思维的人可能已经注意到,如果在随机字段中使用统计分析,并基于相同的随机字段选择个体接收消息,那么在某些情况下,将会产生偏差。为了阐释这一说法,假定使用随机bucket值为10来选择所有用户,给他们随机发送消息。这意味着,在这个用户bucket中收到消息的用户将不再是随机分布。作为一个简单的解决方案,Appboy对用户使用多个随机值,注意不要为了多个目的使用相同的随机值。Part 3:模式灵活——可扩展的用户配置文件在每个用户打开Appboy的任意一个应用,一个丰富的用户概要文件都会被创建。用户的基本字段看起来是这样:

Appboy客户端还可以存储每个用户的“自定义属性”。作为一个例子,一个体育应用程序可能想存储用户“最喜欢的球员”,而电子商务应用程序可能会存储客户最近购买的品牌等。

第一步是获得1个随机样本。1000万个document ,10000随机的buckets,每个buckets应该有1000个用户:

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}}])

本文由澳门新葡亰手机版发布于web前端,转载请注明出处:Appboy基于MongoDB的数据密集型实践,历时一年半

上一篇:编译器架构,时髦语言Rust进前50澳门新葡亰手机 下一篇:没有了
猜你喜欢
热门排行
精彩图文