用户访问session分析的基础数据结构及大数据的基本架构

用户访问session分析模块

用户访问session介绍:

  1. 用户在电商网站上,通常会有很多的点击行为:
    • 首先通常都是进入首页
    • 然后可能点击首页上的一些商品
    • 点击首页上的一些品类
    • 随时在搜索框里面搜索关键词
    • 将一些商品加入购物车
    • 对购物车中的多个商品下订单
    • 最后对订单中的多个商品进行支付
  2. 用户的每一次操作,其实可以理解为一个action,比如点击、搜索、下单、支付
  3. 用户session,指的就是,从用户第一次进入首页,session就开始了。然后在一定时间范围内,直到最后操作完(可能做了几十次、甚至上百次操作)。离开网站,关闭浏览器,或者长时间没有做操作;那么session就结束了。
  4. 以上用户在网站内的访问过程,就称之为一次session。简单理解,session就是某一天某一个时间段内,某个用户对网站从打开/进入,到做了大量操作,到最后关闭浏览器。的过程。就叫做session。
  5. session实际上就是一个电商网站中最基本的数据和大数据。那么大数据,面向customer端,消费者,用户端的分析。

模块的目标:对用户访问session进行分析

  1. 可以根据使用者指定的某些条件,筛选出指定的一些用户(有特定年龄、职业、城市);
  2. 对这些用户在指定日期范围内发起的session,进行聚合统计,比如,统计出访问时长在0~3s的session占总session数量的比例;
  3. 按时间比例,比如一天有24个小时,其中12:00~13:00的session数量占当天总session数量的50%,当天总session数量是10000个,那么当天总共要抽取1000个session,ok,12:00~13:00的用户,就得抽取1000*50%=500。而且这500个需要随机抽取。
  4. 获取点击量、下单量和支付量都排名10的商品种类
  5. 获取top10的商品种类的点击数量排名前10的session
  6. 开发完毕了以上功能之后,需要进行大量、复杂、高端、全套的性能调优
  7. 十亿级数据量的troubleshooting(故障解决)的经验总结
  8. 数据倾斜的完美解决方案
  9. 使用mock(模拟)的数据,对模块进行调试、运行和演示效果

将session做成表,表的数据结构介绍

表名:user_visit_action(Hive表)

date日期,代表这个用户点击行为是在哪一天发生的

user_id:代表这个点击行为是哪一个用户执行的

session_id :唯一标识了某个用户的一个访问session

page_id 点击了某些商品/品类,也可能是搜索了某个关键词,然后进入了某个页面,页面的id

action_time 这个点击行为发生的时间点

search_keyword 如果用户执行的是一个搜索行为,比如说在网站/app中,搜索了某个关键词,然后会跳转到商品列表页面;搜索的关键词

click_category_id :可能是在网站首页,点击了某个品类(美食、电子设备、电脑)

click_product_id 可能是在网站首页,或者是在商品列表页,点击了某个商品(比如呷哺呷哺火锅XX路店3人套餐、iphone 6s)

order_category_ids 代表了可能将某些商品加入了购物车,然后一次性对购物车中的商品下了一个订单,这就代表了某次下单的行为中,有哪些

商品品类,可能有6个商品,但是就对应了2个品类,比如有3根火腿肠(食品品类),3个电池(日用品品类)

order_product_ids 某次下单,具体对哪些商品下的订单

pay_category_ids 代表的是,对某个订单,或者某几个订单,进行了一次支付的行为,对应了哪些品类

pay_product_ids代表的,支付行为下,对应的哪些具体的商品

user_visit_action表,其实就是比如说网站,或者是app,每天的点击流的数据。可以理解为,用户对网站/app每点击一下,就会代表在这个表里面的一条数据。

这个表,其实进行了某些改造和简化,真实的电商企业中,使用的基础数据表的结构,绝对是至少是这个表的10倍复杂度以上。

表名:user_info(Hive表)

user_id其实就是每一个用户的唯一标识,通常是自增长的Long类型,BigInt类型

username是每个用户的登录名

name每个用户自己的昵称、或者是真实姓名

age用户的年龄

professional用户的职业

city用户所在的城市

user_info表,实际上,就是一张最普通的用户基础信息表;这张表里面,其实就是放置了网站/app所有的注册用户的信息。那么我们这里也是对用户信息表,进行了一定程度的简化。比如略去了手机号等这种数据。因为我们这个项目里不需要使用到某些数据。那么我们就保留一些最重要的数据,即可。

表名:task(MySQL表)

task_id表的主键

task_name任务名称

create_time创建时间

start_time开始运行的时间

finish_time结束运行的时间

task_type任务类型,就是说,在一套大数据平台中,肯定会有各种不同类型的统计分析任务,比如说用户访问session分析任务,页面单跳转化率统计任务;所以这个字段就标识了每个任务的类型

task_status任务状态,任务对应的就是一次Spark作业的运行,这里就标识了,Spark作业是新建,还没运行,还是正在运行,还是已经运行完毕

task_param最最重要,用来使用JSON的格式,来封装用户提交的任务对应的特殊的筛选参数

task表,其实是用来保存平台的使用者,通过J2EE系统,提交的基于特定筛选参数的分析任务的信息,就会通过J2EE系统保存到task表中来。之所以使用MySQL表,是因为J2EE系统是要实现快速的实时插入和查询的。

 

大数据平台架构

  1. 终端用户/平台的使用者可以通过J2EE平台,提交一个创建任务的请求,进入任务创建页面,填写任务参数,提交各种不同类型的统计分析任务;然后可以查询自己提交的任务列表, 任务运行结束后,点击对应的链接,查看结果数据的展示图表和报表。
  2. J2EE平台会将用户提交的任务信息插入到MySQL中的task表中去。MySQL数据库里包含了各种业务需要使用的表
  3. J2EE平台在将任务信息保存到MySQL表中后,就会用Runtime、Process等API去执行一个封装了spark-submit命令的linux shell脚本。(提交之后就会设置task的开始时间,如果监控到spark作业结束,那么就会设置task的结束时间,同时会维护任务状态)
  4. 封装了spark-submit命令的shell将执行Spark作业的jar包提交到Spark Standalone集群上去运行;YARN集群上去运行(Spark作业)
  5. Spark作业在运行时的第一件事情,就是从MySQL的task表中,读取本任务需要使用的一些筛选参数,比如年龄范围。。。
  6. 在spark作业运行过程中,或者运行完之后,会将统计分析的结果数据,插入到MySQL中,对应的表里面去。以供J2EE平台在后面展示这些数据。
  7. J2EE平台从MySQL业务表中读取结果数据,封装为对应的JSON数据格式,并返回前端页面,展示(一种是表格;另外一张是图表,比如说柱状图、饼状图、折线图等。。。)

 

 

猜你喜欢

转载自blog.csdn.net/Heitao5200/article/details/81150200