# 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 ;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容