# Hadoop离线数据分析平台实战——230项目数据存储结构设计Hadoop离线数据分析平台实战——230项目数据存储结构设计

Hadoop离线数据分析平台实战——230项目数据存储结构设计

数据存储设计

在本次项目中设计到数据存储的有三个地方: 第一个就是将原始的日志数据按天保存到hdfs文件系统中; 第二个就是将etl解析后的数据保存到hbase中; 第三个就是将分析结果保存到mysql数据库中。 其中存储到hbase和mysql的这两个过程需要设计具体的存储结构。

HBase表结构设计

由于我们需要按天进行数据分析, 所以我们的hbase的rowkey中必须包含时间戳或者我们一天的数据就建立一个表。 这里我们采用在rowkey中包含时间戳的方式来进行讲解; 另外hbase要求列簇一般尽量的少而且短,我们这里采用log来标示列簇。 所以最终我们创建一个单列簇的rowkey包含时间戳的eventlog表。 命令如下: create 'eventlog', 'log'。rowkey设计规则为:timestamp+uuid.hashcode+random(4)

MySQL表结构设计

在mysql中我们采用维度信息表+统计分析结果表+分析辅助表三类表组成。 其中维度信息表用于存储维度相关信息,名称格式为:dimension_*; 统计分析结果表用户存储最终的统计分析结果,以dimension维度id做主健,名称格式为:stats_*; 分析辅助表主要用户在分析过程中使用到的其他辅助类型表。

MySql维度信息表设计

根据我们最终统计的维度信息来看,我们分别需要创建以下八个维度表: 平台维度(platform),时间维度(date),浏览器维度(browser),地域维度(location),支付方式维度(payment),货币类型维度(currency_type),event维度(event),外链维度(inbound)。 另外还分别需要一个kpi维度和一个操作系统维度(os)表。 注意os表在本次项目中不会用到。

最终统计分析模块和维度表关系

分析模块

相关维度表

用户基本信息分析

platform、date

浏览器信息分析

platform、date、browser

地域信息分析

platform、date、location

用户浏览深度分析

platform、date、kpi

外链信息分析

platform、date、inbound

订单信息分析

platform、date、currency_type、payment

事件分析

platform、date、event

MySql统计分析结果表设计

我们最终需要进行七个模块的数据分析, 这七个模块的展示数据最终是从我们的mysql数据库中获取的, 那么接下来就分别从这七个模块来分析对应的mysql表结构设计。

用户基本信息分析模块表结构设计

用户基本信息分析模块中要求数据库对应表有以下几个维度的数据: 新增用户数、活跃用户数、总用户数、新增会员数、活跃会员数、总会员数、会话个数、会话长度这八个统计指标, 除此之外还需要platform和date这两个维度信息id以及created字段来标示修改时间。 其中通过platform和date这两个字段信息来唯一确定表数据, 设计表名为: stats_user。 除了这个表以外,由于我们还需要统计分时段的数据信息,故还要求有一个分时存储统计数据的表,设计表名为:stats_hourly。

stats_user表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

active_users

int(11)

空。0

活跃用户数

new_install_users

int(11)

空。0

新增用户数

total_intall_users

int(11)

空。0

总用户数

sessions

int(11)

空。0

会话个数

sessions_length

int(11)

空。0

会话长度

total_members

int(11)

空。0

总会员数

active_members

int(11)

空。0

活跃会员数

new_members

int(11)

空。0

新增会员数

created

date

空。null

记录日期

浏览器信息分析模块表结构设计

浏览器信息分析和用户基本信息分析基本类型, 也包含以下几个维度的数据: 新增用户数、活跃用户数、总用户数、新增会员数、活跃会员数、总会员数、会话个数、会话长度这八个统计指标, 除此之外还需要一个pv计数的统计指标以及platform、date、browser这三个维度信息字段和create标示修改日期的字段。 其中通过platform、date和browser这三个字段信息来唯一确定表数据。 设计表名为: stats_device_browser

stats_device_browser表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

browser_dimension_id

int(11)

非空,0

浏览器id,pkey

active_user

int(11)

空,0

活跃用户数

new_install_users

int(11)

空,0

新增用户数

total_intall_users

int(11)

空,0

总用户数

sessions

int(11)

空,0

会话个数

sessions_length

int(11)

空,0

会话长度

total_members

int(11)

空,0

总会员数

active_members

int(11)

空,0

活跃会员数

new_members

int(11)

空,0

新增会员数

pv

int(11)

空,0

pv数

created

date

空,null

最后修改日期

地域信息分析模块表结构设计

地域信息分析模块只分析活跃用户的地域分布情况以及跳出率相关分析, 故需要以下几个统计指标: 活跃用户数、会话个数、跳出会话个数。 除此之外需要platform、date、location这三个维度信息字段和create标示修改日期的字段。 其中通过platform、date和location这三个字段信息来唯一确定表数据。 设计表名为: stats_device_location

stats_device_location表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

location_dimension_id

int(11)

非空,0

地域id,pkey

active_user

int(11)

空,0

活跃用户数

sessions

int(11)

空,0

会话个数

bounce_sessions

int(11)

空,0

跳出会话个数

created

date

空,null

最后修改日期

用户浏览深度分析模块表结构设计

用户浏览深度我们通过计算访问不同数量页面的用户数/会话数来表示, 在本次项目中我们分为8个不同数量级的指标, 分别为:访问1个pv、访问2个pv、访问3个pv、访问4个pv,访问5-10个pv(包含5但不包含10),访问10-30个pv,访问30-60个pv,访问60+pv。 除此之外需要platform、date、kpi这三个维度信息字段和create标示修改日期的字段。 其中通过platform、date和kpi这三个字段信息来唯一确定表数据。 设计表名为: stats_view_depth

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

kpi_dimension_id

int(11)

非空,0

kpiid,pkey

pv1

int(11)

非空,0

访问1个页面

pv2

int(11)

非空,0

访问2个页面

pv3

int(11)

非空,0

访问3个页面

pv4

int(11)

非空,0

访问4个页面

pv5_10

int(11)

非空,0

访问5-10个页面

pv11_30

int(11)

非空,0

访问11-29个页面

pv30_60

int(11)

非空,0

访问30-59个页面

pv60plus

int(11)

非空,0

访问60+个页面

created

date

空,null

最后修改日期

外链信息分析模块表结构设计

外链信息分析主要包括外链构成(偏好)分析和跳出率分析。 其中外链构成(偏好)我们通过活跃用户数来标示, 需要我们需要几下几个统计指标: 活跃用户数、会话个数、跳出会话个数。 除此之外需要platform、date、inbound这三个维度信息字段和create标示修改日期的字段。 其中通过platform、date和inbound这三个字段信息来唯一确定表数据。 设计表名为: stats_inbound

stats_inbound表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

inbound_dimension_id

int(11)

非空,0

外链id,pkey

active_user

int(11)

空,0

活跃用户数

sessions

int(11)

空,0

会话个数

bounce_sessions

int(11)

空,0

跳出会话个数

created

date

空,null

最后修改日期

订单信息分析模块表结构设计

订单信息分析需要分析订单数量和订单金额相关统计信息, 故需要以下几个指标的数据分析: 订单数量、成功支付的订单数量、退款订单数量、订单金额、成功支付金额、退款金额、总成功支付金额、总退款金额。 除此之外,我们还需要使用platform、date、currency_type和payment四个维度字段类表示确认唯一记录。 另外需要添加一个created字段来表示数据日期。 表名设计为:stats_order

stats_order表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

currency_type_dimension_id

int(11)

非空,0

货币类型id,pkey

payment_type_dimension_id

int(11)

非空,0

支付类型id,pkey

orders

int(11)

空,0

订单数量

success_orders

int(11)

空,0

成功支付的订单数量

refund_orders

int(11)

空,0

退款的订单数量

order_amount

int(11)

空,0

订单金额

revenue_amount

int(11)

空,0

支付金额

refund_amount

int(11)

空,0

退款金额

total_revenue_amount

int(11)

空,0

总的支付金额

total_refund_amount

int(11)

空,0

总的退款金额

created

date

空,null

最后修改日期

事件分析模块表结构设计

在本次项目中,事件分析主要就是分析事件的触发次数, 故对于的数据存储结构为:times(触发次数)以及platform、date、event三个维度字段和created字段, 表名设计为:stats_event

stats_event表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

event_dimension_id

int(11)

非空,0

event维度id,pkey

times

int(11)

空,0

触发次数

created

date

空,null

最后修改日期

MySql表结构设计总述

我们通过维度信息表和统计分析结果表的整合来保证我们数据展示的正常性,具体创建表结果的文件参考: ..\文档\report.sql ; 其中我们创建数据库的命令为:CREATE DATABASE report DEFAULT CHARACTER SET utf8 ;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web前端教室

第七节,生成商品类型、广告条--《vue+vant+node+mongoDB+koa2》电商项目实战连载

视频有些模糊,这个目前我也没有办法,因为我没有微信公众号的视频的高级权限,所以这里只能是先搞成这样。清晰视频的获取办法,在文章结尾有写到,同学们可以自行获取。

21030
来自专栏Android机动车

Google 最新模拟器重磅来袭!秒开并还原到之前工作状态!

12月18日,Google 官方Quick Boot博客的发布,给我们带来了最新的Android模拟器,其中最突出的特点技术 快速启动。声称可以在 6 秒之内便...

41420
来自专栏恰童鞋骚年

谈谈对于企业级系统架构的理解

在我们刚开始学习架构的时候,首先会想到分层的概念,分层架构比较经典的是三层架构,那么,什么是三层架构呢?它包括表现层,业务层,数据访问层;而对于一个新手来说,从...

14520
来自专栏YouTube

YouTube视频下载的常用5种方法

YouTube是个优秀的视频网站,在这里你可以与朋友、家人或者全世界分享自己的经验或创意。YouTube和国内的B站差不多,广告少,资源良心,不像有些网站,动不...

32.3K140
来自专栏逍遥剑客的游戏开发

GameEntity&Component

14320
来自专栏IT技术精选文摘

当代码变更遇上精准测试的总结

敏捷模式下迭代频繁,回归测试时总是不知道变动的范围。Devlop 有的时候也不知道他改了哪些东西,影响到哪些节点,或者是很多人改的,彼此不知道。遇到有代码洁癖的...

17650
来自专栏ImportSource

NoSQL Peer-to-Peer Replication 对等复制

翻译内容: NoSQL Distilled 第四章 Distribution Models 作者简介: ? 本节摘要: 今天我们主要讨论有关...

41460
来自专栏新版本

日志易2.0版本重磅发布! Docker日志接入、ML操作界面等你体验

关注公众号:日志易,回复 ‘我要看案例’ ,案例即可快速阅览。

41950
来自专栏数据和云

创新,才能不被淘汰-机器学习时代,运维将何去何从?

我们曾经分享过一篇文章,云时代的DBA,何去何从?,在文中我们讨论了Oracle最近几年重点转而向云的变革,它全力以赴在做的一件事情就是把所有的产品和服务转移到...

28960
来自专栏前端知识分享

第143天:渐进增强和优雅降级之间的不同

第一个例子的写法叫做渐进增强(progressive enhancement),第二个例子的写法叫做优雅降级(graceful degradation)。(关于...

11420

扫码关注云+社区

领取腾讯云代金券