整天看用户埋点数据,知道数据是咋来的吗?

我们平时看到的报表复杂而多样,能够通过多种纬度的数据评估用户的使用习惯和对应功能的价值。然而这些报表是如何产生的呢?今天咱们就看看上报数据一步一步变成报表的大致流程。

所有上报的数据都是为了记录一次事件的发生或者描述一个状态,具体的上报数据可以设计为KEY-VALUE的形式或者数据组合的形式。KEY- VALUE的形式主要用来统计简单的计数类上报,如按钮点击的次数,某个选项的值等,KEY用来区分不同的事件,VALUE代表事件发生的次数、状态值等;数据组合的主要用来描述一个事件或者状态需要多种属性描述的场景,比如下载成功事件,描述这个事件的数据组合可能包括对应的下载地址、下载渠道来源、下载耗时等信息。

当上报数据设计好后,后续的工作才能正常开展。下面一步一步说。

1、埋点

所谓「埋点」,就是在正常的功能逻辑中添加统计逻辑。拿统计微信右上角「+」的点击次数为例,上报的数据可以采用KEY-VALUE形式,我们定义 KEY为「CLICK_ADD_BTN」,VALUE的值为点击的次数。当用户点击「+」时,展示菜单的代码会通过按钮的「回调」(详见《聊聊同步、异步和回调》)来触发执行,程序猿在业务代码执行完后,又加上了统计代码,把「CLICK_ADD_BTN」对应的VALUE加1,「+」被统计到了一次使用。

2、上报

并不是每统计到一次事件或者状态就会发起数据上报,客户端统计到的数据会先暂时存储在内存或者磁盘上,当用户启动、退出应用程序的时候,或者在其他更合适的时机,将当前周期统计到的事件批量上报到服务器,这样做的目的主要是考虑到与服务器多次建立连接的性能损耗(详见《不得不知的TCP和UDP》) 和流量问题(相同大小的数据分多次发送比一次发送要消耗更多流量),另外客户端在上报具体的统计事件之外,还会将标识用户的ID一并上报,后续用于计算用户相关的数据如日使用用户和留存率等。

3、后台记录日志

数据上报到服务器后,服务器会将客户端上报的原始数据存储到服务器的磁盘中。一般来说,非强实时性的数据上报到服务器后,并不会立即参与计算,获得最终的统计结果,比如一个功能的日使用次数,日用户数,日留存等数据,而是等到服务器负载较低的时间段利用预先配置的计划任务进行离线处理。这样处理的目的是为了节约服务器资源(钱),因为大家肯定不想因为计算统计数据而影响实时业务的处理效率。

4、计算&入库

报表中展示的数据,并不是客户端上报的原始数据,比如「+」的使用次数、使用用户数、日留存率这三组数据,都是通过对客户端上报的「CLICK_ADD_BTN」对应VALUE值的累加并结合上报用户ID二次计算得出的。

如果我们的产品达到微信这种日登陆数五六亿,那么每天上报的统计数据将是海量的,为了从这种海量的数据中计算出「+」的使用次数、使用用户数等信息,就需要用到「数据仓库工具」,比如当下流行的Hive处理工具,它基于Hadoop分布式系统基础框架,利用计算机集群的能力进行分布式计算。当「数据仓库工具」计算出最终的结果后,计划任务会将结果(「+」的日使用次数、日使用用户数等数据)保存到数据库中,也就是「入库」过程。「入库」后的数据才能与前端对接,组成报表展示系统。

一般情况下,原始数据经过数据仓库工具处理后,对应的日志文件还会在服务器上保留一段时间(一般3~7天),以便追溯统计问题,所以,如果发现统计数据有问题问题,一定要及时反馈给负责的程序猿,否则就会「死」无对证咯。

5、展示

当数据「入库」后,报表的展示就水到渠成了。报表系统通过前端页面用户的输入获取查询条件,然后通过后台数据库查询获得结果,在前端展示出来。

这里只是简述了埋点数据上报、统计的大致流程,每个过程中还有很多细节要解决,如后台日志乱码问题、客户端异常导致数据丢失等。一旦数据出现问题,经常需要联系各方人员定位原因。在此呼吁广大的产品大虾一定要关心、爱护为你做统计需求的程序猿,他们上辈子都是偷了蟠桃的孙悟空。

对咯,今天别忘了看报表哦。

本文作者:佚名

来源:51CTO

时间: 2025-01-29 23:46:54

整天看用户埋点数据,知道数据是咋来的吗?的相关文章

谈大数据 大数据的精髓在于“预测用户行为”

谈大数据 大数据的精髓在于"预测用户行为".它能够知道你的喜好,它能够通过你过去留下的行为,看过什么东西,浏览过什么网站,去过什么地方,喜欢什么吃的,就是说你在互联网上都留下了一些足迹,这些信息能够帮助大数据的服务商推进你有兴趣的信息,比如你在玩一个游戏,他会猜你喜欢什么样的游戏,它能推荐你什么样的应用和商品. 企业建立内部的数据平台已是大势所趋,但只有市场出现专业的数据平台实现数据的管理和交易,才能推动大数据快速发展. 未来移动互联网的发展更普及之后,我们可以看到,整个营销会迎来一个

如何做页面自动刷新,又不用让用户按回车键来提交数据!

数据|刷新|页面 如何做页面自动刷新,又不用让用户按回车键来提交数据! (01-3-30 240) [豆豆] 于 2001-3-22 15:49:42 加贴在 Joy ASP ↑: 假设叶面中有如下form:<form name=InputDate>...</form> 如果页面要自动刷新,但该页面有Request.Form,那么通常会出现一个提示框,需要用户确定来提交数据,这就不是自动 刷新了.而对于监控或股票显示来说,不要用户干预又非常重要,下面就可以解决该问题: <Sc

看实例学VFP:删除数据表中的记录

本例对看实例学VFP:对数据表中记录进行修改一文的实例进行了一点改进,增加了"撤消"功能.程序运行时如下图: 在组合框中选择要查找的字段,在文本框中输入查找内容后单击右侧的"查找"按钮后将查找结果显示在上方的表格中,"查找"按钮变成"撤消"按钮,同时激活"删除"按钮及用于显示数据的文本框,并将当前记录(满足查询条件的记录)的值同时显示在文本框中,:单击"删除"按钮后会删除查找出来的记录刷

看实例学VFP:向数据表中添加记录时自动生成编号

本例在"看实例学VFP:向数据表中添加记录并验证输入数据是否合法"的基础上进行了改进,实现了在添加记录时不仅能够完成对输入数据的校验,还具有自动生成编号的功能.自动生成编号的相关代码加在表单的init事件及"添加"按钮的click中,在表单第一次启动或添加完记录后都会调用此段代码,实现自动生成编号的功能.运行界面如下: 本例用到了"数据1"数据库中的"网站信息表",关于该数据库的情况已经在看实例学VFP:示例数据库一文中给出,

日志采集-在应用程序监控系统的设计中,有没有针对应用程序埋点获取目标数据的研究?

问题描述 在应用程序监控系统的设计中,有没有针对应用程序埋点获取目标数据的研究? 怎么埋点的?埋点这个名词在业内好像并没有统一吧?有些监控信息直接从应用程序日志里面获取就行,但是客户端(PC或移动端)是不是通过埋点上传数据给服务器?这里面有没有关于埋点的方法论?或者成体系的文献之类的东西? 解决方案 有的,你可以看看万方上的论文.主要是数据分析这块.

oracle-Oracle:如何监控用户访问视图和抽取数据?

问题描述 Oracle:如何监控用户访问视图和抽取数据? 在数据库中有这样的应用: 在数据库中开放视图供用户查询和抽取数据. 现在有2个问题就是: 1.需要数据库记录哪个用户何时查询过视图.查询了哪些类别的数据,涉及的数据量: 2.记录哪个用户何时抽取了多少数据,抽取了哪些类别的数据,最好能记录抽取数据的内容. 解决方案 记录select语句,建议你这么来用,不要开放数据库级的接口,用webservice来实现接口,这样你就可以记录sql以及结果了 通过select,只能从日志里去找,只有sql

语言-新手求帮忙看下这段代码的数据溢出问题,没有C币理解下(我是在CodeBlock10.05下运行的)

问题描述 新手求帮忙看下这段代码的数据溢出问题,没有C币理解下(我是在CodeBlock10.05下运行的) #include #include #include unsigned int Ex_secret[30]={11,4,120,75,170,204,90,59,78,49,//用0~255的数表示8位2进制,一共240位 148,248,190,137,0,9,17,91,174,105,45,124,177,205,57,97,194,155,120,36}; unsigned in

ios-大神看这里!=。=Java怎么接收数据并保存IOS传过来的图片?

问题描述 大神看这里!=.=Java怎么接收数据并保存IOS传过来的图片? ios吧图片专程nsdate,并把它放到了http头里,我是写java的,不知到该怎么接收.之前没做过,百度了很多,现在好乱啊,哪位好心人指点一下,谢谢! 解决方案 public boolean storeImage(File file){ try{ // 打开文件 FileInputStream fin = new FileInputStream(file); // 建一个缓冲保存数据 ByteBuffer nbf =

Verizon将关闭公有云服务 用户仅有一个月时间迁移数据

几年前立志在公有云大展宏图的Verizon通信,如今却因无法与亚马逊云和微软Azure等业内巨头抗衡而不得不关闭公有云服务. Verizon公司在周四通知了其云客户,将给他们一个月的时间来迁移自己的数据,否则这些数据将永远消失.而在公司网站上已经找不到任何有关公有云计算服务信息. 此举似乎验证了很多业内人士的预测,其实从电信巨头开始放出消息要出售这几年在云服务市场积累的庞大数据中心就可初见端倪.依靠在互联网上租售虚拟计算能力并按小时计费的方式根本不可能与AWS,Azure竞争,更不用说要击败谷歌