当前位置: 首页 > news >正文

基于COOKIE的点击流数据仓库构建思路(一)

网站数据是企业数据的重要组成部分,在大型企业中,数据通常以关系型数据仓库进行存储。当然,部分企业也在向基于Hadoop等开源框架的分布式非关系型数据仓库结构转变,但这仍只是少数。大部分公司仍然是关系型数据仓库(RDB)居于主流。接下来的三篇文章会介绍三种基于Cookie的点击流数据仓库构建思路。本篇是第一篇,基于Adobe Sitecatalyst底层数据的数据仓库作为原型。

在用该工具的人都知道,在Marketing Cloud中有个DataWarehouse的工具,该工具的作用类似于Excel中的数据透视表,可以选择任意的纬度、量度,配合数据粒度、区段等进行数据输出。但实际上,这个工具还只是表层,底层有一套完整的数据仓库系统支持。

在介绍底层系统之前,我先假设这套工具的数据仓库就是DataFeed中的数据结构。(实际上我问过Adobe的研发和服务商,他们并不清楚Omniture上层的数据仓库结构,或许没有,不过这并不妨碍我们对本文的理解)

我们先看下DataFeed数据结构,由三部分组成:

·        
格式化后的原始数据。数据是在日志基础上,经过Omniture元数据和清洗规则的控制后生成的数据,里面包括一张(或几张)压缩后BigTable。这些BigTable是数据仓库底层的事实表,里面包含了Adobe Sitecatalyst所有指标,共476个纬度和量度。

如下是其中的一条记录:

1.     zh-cn 0 0 0 0 0 0 JAVA-1.2-AN 0 2 U 0 CNY 2 0.000000000000 0 460028469559100 1 2013-08-13 00:00:37 125.58.234.85 0 4.1.1 中国移动 2.2.7 860308028886394 WIFI 0bc916b5-382c-46cd-866a-64e2ee0ee8af A512 ac:f7:f3:44:9d:6e Android 206,208,120,121,122,123,124,125,127,128,135 0 1376323237 daqing chn 0 21 110142 2955631645905715200 5530175458409740267 1 1376323237 U 1 125.58.234.85 U 0 27 0 0 0 4035331 1 1 0 0 0 Y 0 0 U CNY 1376323237 460028469559100 4.1.1 中国移动 2.2.7 860308028886394 WIFI 0bc916b5-382c-46cd-866a-64e2ee0ee8af A512 ac:f7:f3:44:9d:6e Android 206,208,120,121,122,123,124,125,127,128,135 U 0 Y ;;;;;103=::hash::0|104=::hash::0 0 13/7/2013 0:0:36 2 -480 161611420 1889629931 0 ::hash::0 0 1 6 0 Y 0 0 0 ss 0 720×1280 www460.da2.omniture.com N 13/7/2013 0:0:36 2 -480 Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; MI 2 Build/JRO03L) ????/2.2.7 2859193726 202091 gome-app 0 0 0 0 0 0 N 0 0 1 1 0 1376323237 1 1  

上面的记录中,数据粒度是每条ServerCall,可以理解为每一次触发的原始记录,因此是最细的原始数据(当然里面的没一段代码都有特定的含义,在此不做解释,大家需要理解的是,所有数据都在这一张表中)。

·        
LookupTable。查找表将每次的固定参数值以数值型的类型对应出实际值,里面是数据仓库中的纬度表,包括浏览器、颜色、JAVA类型、搜索类型等共13个文件,另外有个时间纬度表需要单独下载。

比如下面是一个名为Connection_Type查找表的数据:

Connection_Type

Name

0

Not Specified

1

Modem

2

LAN/Wifi

3

Unknown

4

Mobile Carrier

·        
信息汇总文件。txt格式,里面包括当天日志的所有文件名、记录数、MD5等信息。

通过上面的基本分析,我们可以发现,Adobe的数据仓库模型属于典型的数据仓库结构——围绕一个事实表,延伸到不同纬度表的星型模型。

为什么他是星型结构而不是雪花型或其他?我猜测有以下几种原因:

·        
该数据仓库是服务于Sitecatalyst报表系统和前台的DataWarehouse系统,由于这两个系统中,很多报表中的纬度、量度都可以让用户自定义,因此需要有一个底层的BigTable来满足用户任意“拖拽”和自定义的需求。

·        
Adobe Sitecatalyst中超过200个字段是自定义参数,具体定义需要客户根据丰富的场景自定义,在这些eVar、Event和Prop被用户自定义前,Adobe也不清楚用户会如何使用这些变量,因此也无法根据纬度和量度设计数据仓库模型结构。

·        
由于流量数据的特殊性,同一个cookieid在不同访问时间下,其属性特征很可能会发生改变,而纬度表的意义在于其固定对应关系,流量数据关系不像是交易数据或会员数据中具有非常稳定的对应特征,因此在流量数据中无法使用,也就没必要做过多的拆分。比如同一个cookieid上次访问的IP可能是北京,下次再回来可能变成广州;用户分辨率上次是1024*768,下次来可能是1280*800,所有的纬度属性都是可变的,更不用说事实属性。

·        
用DataFeed做数据仓库的公司,可能都有自己的灵活需求,让用户自己根据底层大表数据来做数据仓库模型,以及后期的ETL可能会更适合。

经过以上分析,我们可以得出这样一种数据仓库模型。结构如下:

 

这种数据仓库结构的好处在于底层数据表结构一致,且字段完整,在做上层ETL时方便程序设计,并且业务在做海量数据抽取时减少SQL复杂程度和出错几率,便于业务数据抽取操作。当然,坏处在于该表如果数据量过大,会导致每次更新数据库压力大,数据响应及时性变差;并且由于数据冗余过多,储存效率低。

实际上,我们并不需要过于担心这种数据仓库模型的好坏,关键在于适合企业上层的数据集市、数据挖掘、EDW的整合、报表的构建就好。没有一种数据仓库模型是100%适合任何场合的,适合公司实际情况的就是最好的。

下一篇会介绍基于开源网站分析工具piwik的第二种数据仓库模型思路。

相关文章:

  • Tomcat热部署和虚拟目录配置
  • 被遗忘的Logrotate
  • 压合细节
  • windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
  • IC卡的传输协议(2)-块传输协议T=1续【转】
  • Elasticsearch 2.3.0 老版本升级指南
  • java web
  • Office online server 部署
  • JRE与JDK简介
  • ConcurrentHashMap
  • Oracle语句异常
  • jmeter 302请求测试
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • Scrum4.0
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • ES6--对象的扩展
  • ES6核心特性
  • JavaScript DOM 10 - 滚动
  • Lucene解析 - 基本概念
  • Python 反序列化安全问题(二)
  • redis学习笔记(三):列表、集合、有序集合
  • Spring声明式事务管理之一:五大属性分析
  • Twitter赢在开放,三年创造奇迹
  • 服务器之间,相同帐号,实现免密钥登录
  • 关于extract.autodesk.io的一些说明
  • 如何解决微信端直接跳WAP端
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 自制字幕遮挡器
  • 进程与线程(三)——进程/线程间通信
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (6)设计一个TimeMap
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十五)使用Nexus创建Maven私服
  • (四)linux文件内容查看
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET 常见的偏门问题
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 简单实现MD5
  • .NET 设计一套高性能的弱事件机制
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net连接oracle数据库
  • /var/spool/postfix/maildrop 下有大量文件
  • @ConfigurationProperties注解对数据的自动封装
  • @hook扩展分析
  • @拔赤:Web前端开发十日谈
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ linux ] linux 命令英文全称及解释