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 ;