浅谈数据埋点可行性方案 [ 新年快乐,心想事成]

简介: 埋点服务的数据库的数据量,根据APP的用户量成指数级别成正比。如果需要的话,可以采用分库分表。

用最朴素的语言,描述最复杂的方案!!


有没有遇到这样的一个用户场景,哪天在淘宝APP搜索了:50度飞天茅台,然后第二天在头条APP看新闻时,就时不时出现茅台。这就是今天需要讲解的这个场景。


可以说每款APP,或者每个 TO C 系统都存在或少或多的收集数据用户信息和用户行为的操作。收集用户信息和用户用为的操作,一般需要使用到埋点服务。而这个埋点服务,很多第三方服务商都提供了相应的服务,只要根据对应的步骤接口,就可以收集相应的数据。比如,友盟的埋点服务:


https://www.umeng.com/page/z/maidian


第三方的埋点服务,有的是免费的,有的是收费的。如果使用免费的服务呢,万一服务出现问题,可能得不到服务商的及时响应;如果使用收费的服务呢,如果控制不好,又怕把自己这边的大量用户数据提供了给第三方平台,万一第三方搞你的数据,或者不小心泄漏了,找谁说都用。基于以上两种情况考虑,自己搭建一个埋点服务。


0x01:数据库设计


埋点服务的数据库的数据量,根据APP的用户量成指数级别成正比。如果需要的话,可以采用分库分表。详细的表结构设计大致如下:


  • id:主键id


  • platform:平台,枚举类型:iOS苹果,Android安卓,html5,miniapp小程序等


  • user_id:操作用户,登录时为登录用户的id;未登录为NULL


  • user_name:用户姓名


  • sex:用户性别


  • page:操作的界面,枚举类型,需要根据所属模块定义。例如:进入支付界面定义为payment_page_view;最好定义一个规则,例如:模块名 + page + 动作


  • action:操作,insert增加,update更新,delete删除,query查询


  • action_time:操作时间


  • module:所属模块


  • create_date:创建时间


这里只定义了一些通用的字段,其他字段可以根据不同项目,不同的业务场景;自行增加,满足自己的业务需要即可。定义这个表的目标就是可以根据这些收集的数据分析用户的行为习惯;抑或可以根据统计出系统的运营数据,比如用户的活跃量,活跃度等。


0x02:接口设计


埋点数据具有通用性,一般只需一个接口即可。接口一定需要设计为 POST 请求,因为搜集数据,最好设计为批量上送。如果收集一条数据,就请求一次接口,对服务端非常不友好,造成服务器压力。接口的请求参数的DTO ( TrackListDto )大致可以设计为:


  • platform:平台,枚举类型:iOS苹果,Android安卓,html5,miniapp小程序等


  • user_id:操作用户,登录时为登录用户的id;未登录为NULL


  • user_name:用户姓名


  • sex:用户性别


  • sign:签名,验签使用。防止埋点服务被黑客攻击


List:埋点数据列表


import java.util.List;
public class TrackListDto {
private String platform;
private String user_id;
private String user_name;
private String sex;
private String sign;
private String ts;
private List<TrackInfoDto> list;
//省略 getter setter
}


TrackListDto 还可以定义一些其他的通用属性,需要根据具体业务场景需要定义。


TrackInfoDto定义大致如下:


  • page:操作的界面,枚举类型,需要根据所属模块定义。例如:进入支付界面定义为payment_page_view;最好定义一个规则,例如:模块名 + page + 动作


  • action:操作,insert增加,update更新,delete删除,query查询


  • action_time:操作时间


  • module:所属模块


import java.util.Date;
public class TrackInfoDto {
private String page;
private String action;
private Date action_time;
private String module;
// 省略 getter setter
}


TrackInfoDto还可以定义肯定与用户行为的属性,这里的数据跟数据库一一对应即可,也需要根据具体业务场景需要定义。


0x03:主要实现逻辑


  • 客户端


客户端层面,需要根据用户的操作,收集数据整理成 TrackListDto 对象,而该对象的 TrackInfoDto数组,最好到达一定数量,比如10条,20条,在调用一次埋点服务的接口。还有一个关键步骤就是前端与后端要约定一个签名生成的算法,以便生成签名和进行签名验证。


  • 服务端


服务端就一个接口,就是接受客户端收集的数据,然后入库。但是要考虑两个问题,第一个就是验证问题,防止客户攻击;第二个就是用户量的并发请求可能造成数据库瓶颈问题。如果用户量大,实时入库,肯定给数据库造成非常大的压力。


验证问题:客户端与服务端约定验签算法即可,算法前后端验签算法要一致。如果需要更安全点的话,就是需要埋点服务进行监控。


用户量的并发请求可能造成数据库瓶颈问题:这个需要引入消息队列 MQ,把先把数据存放到MQ,然后异步入库即可。


虽然设计简单,却是支撑百万级别项目的方案。无论你的方案多牛逼,不能变现的方案都是烂方案!!!

相关文章
|
2月前
|
数据采集 数据可视化 前端开发
深入了解埋点分析:Clklog助你优化用户体验
所谓埋点,就是通过在应用程序或网站中插入代码,针对用户行为或事件进行捕获,以收集用户的各种行为数据,比如用户点击了某个按钮、页面访问时间、功能使用频率等。 通过分析这些数据,数据产品经理或数据分析师能够深入理解用户行为,优化用户体验,并根据埋点数据改进产品功能。
深入了解埋点分析:Clklog助你优化用户体验
|
2月前
|
存储 数据采集 前端开发
ClkLog 实践中的挑战:如何设计和实施有效的埋点指标
前端数据埋点要怎么做才能获取到有用的数据并对运营产生积极的作用,对于首次实施埋点及数据分析的工程师来说确实是个难点。网上很多文章讲的都是方法论和理论知识,真正实践的内容比较少,我们从一个案例来描述一下埋点要如何做。
ClkLog 实践中的挑战:如何设计和实施有效的埋点指标
|
3月前
|
开发框架 缓存 监控
美丽天天秒丨链动2+1模式系统开发规则流程/功能设计/需求方案/成熟案例/源码指南
开发美丽天天秒丨链动2+1系统的流程可以按照以下步骤进行:
|
5月前
|
缓存 C语言 C++
【项目日记(九)】项目整体测试,优化以及缺陷分析
【项目日记(九)】项目整体测试,优化以及缺陷分析
|
存储 安全
DAPP/3M互助拆分公排双轨系统开发详细逻辑/案例分析/方案项目/技术分析/源码平台
 DApp是指基于区块练技术的去中心化应用程序,它的特点是去中心化、透明、安全、不可篡改等特点。
|
测试技术
闲鱼技术2022年度白皮书-技术质量主题-关于闲鱼测试数据构造,我有几条心得(下)
闲鱼技术2022年度白皮书-技术质量主题-关于闲鱼测试数据构造,我有几条心得
195 0
|
机器学习/深度学习 存储 人工智能
ChatGPT的各项超能力从哪儿来?万字拆解追溯技术路线图来了!(1)
ChatGPT的各项超能力从哪儿来?万字拆解追溯技术路线图来了!
174 0
|
机器学习/深度学习 存储 自然语言处理
ChatGPT的各项超能力从哪儿来?万字拆解追溯技术路线图来了!(2)
ChatGPT的各项超能力从哪儿来?万字拆解追溯技术路线图来了!
169 0
|
机器学习/深度学习 存储 自然语言处理
万字拆解!追溯ChatGPT各项能力的起源 2
万字拆解!追溯ChatGPT各项能力的起源2