基于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的第二种数据仓库模型思路。

时间: 2024-09-20 14:35:47

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

haha-关于点击流 基于用户兴趣度模型

问题描述 关于点击流 基于用户兴趣度模型 当用户浏览网页时的一些操作,比如 (1)页面标记行为:增加书签.删除书签.保存页面.打印页面. (2)页面操作行为:复制.粘贴.剪切.拉动滚动条.点击链接.移动鼠标. (3)重复行为:重复访问同一页面. 怎样通过程序获取到这些信息,或者是有什么API接口函数可以用

网站数据分析:SkyGlue—用GA标记用户生成点击流

中介交易 SEO诊断 淘宝客 云主机 技术大厅 最早看到SkyGlue这个工具是在Cloga博客的文章,后来经过jasseyyang的推荐,向SkyGlue的cindy申请开通了博客GA账号的试用.经过一段时间的使用,现在来简单介绍一下SkyGlue这个工具. SkyGlue是Google Analytics的一个扩展工具,基于对网站中唯一访客的识别和标记,自动追踪网站的事件监控,记录用户操作的点击流数据.SkyGlue同样是通过JS页面标记进行安装部署,不过前提是你已经部署了GA的代码,因为S

网站点击流数据分析项目----之现学现卖

1:网站点击流数据分析项目推荐书籍: 可以看看百度如何实现这个功能的:https://tongji.baidu.com/web/welcome/login 1 网站点击流数据分析,业务知识,推荐书籍: 2 <网站分析实战--如何以数据驱动决策,提升网站价值>王彦平,吴盛锋编著 http://download.csdn.net/download/biexiansheng/10160197 2:整体技术流程及架构: 2.1 数据处理流程    该项目是一个纯粹的数据分析项目,其整体流程基本上就是依

基于C语言的设计流优化语音识别芯片结构设计

据预测,市场对语音控制应用设备的需求将急剧增长,其推动力来自电话机市场.电话机将更多地采用语音命令进行控制.其他应用领域包括玩具和手持设备如计算器.语音控制的安全系统.家用电器及车载设备(立体声.视窗.环境控制.车灯和导航控制).本文从可复用和优化芯片空间的角度出发介绍语音识别芯片结构设计的种种考虑,其思路有利于开发一系列其它语音识别芯片. 新加坡Columns公司在便携式语音控制产品应用中起步较早,其中一个产品是执行欧元与其他欧洲货币之间进行兑换的"语音控制欧洲货币兑换器".欧元兑换

PHP基于cookie与session统计网站访问量并输出显示的方法_php技巧

本文实例讲述了PHP基于cookie与session统计网站访问量并输出显示的方法.分享给大家供大家参考,具体如下: <?php $f_open = fopen("count.txt","r+"); //打开指定的文件 $count = fgets($f_open); //读取文件中的数据 if(empty($_COOKIE['cookie_name'])){ //判断COOKIE的是否存在 setcookie("cookie_name",

基于ajax实现点击加载更多无刷新载入到本页_AJAX相关

先给大家展示效果图: 效果演示 本例是分页的另外一种显示方式,并不是隐藏未显示的内容 数据库结构与<ajax 翻页>是一样的 JavaScript 代码 <script type="text/javascript"> $(document).ready(function() { var track_click = ; //track user click on "load more" button, righ now it is click

js基于cookie方式记住返回页面用法示例_javascript技巧

本文实例讲述了js基于cookie方式记住返回页面的用法.分享给大家供大家参考,具体如下: 首先明确以下概念 ①. 同名的 cookie,不同的 domain 或不同的 path,属不同的 cookie: 同名的 cookie,相同的 domain 且相同的 path,不同的 expires,属同一个 cookie. ②. 不加过期时间的cookie在浏览器关闭后失效 ③ 二级域名cookie可以生效,通过指定domain 于是在js端 document.cookie="back_url=&qu

基于Android实现点击某个按钮让菜单选项从按钮周围指定位置弹出_Android

Android Material Design:PopupMenu Android Material Design 引入的PopupMenu类似过去的上下文菜单,但是更灵活. 如图所示: 现在给出实现上图PopupMenu的代码. 本例是一个普通的Button触发弹出PopupMenu. 测试的MainActivity.java : package zhangphil.materialdesign; import android.app.Activity; import android.os.B

JavaScript实现基于Cookie的存储类实例_javascript技巧

本文实例讲述了JavaScript实现基于Cookie的存储类.分享给大家供大家参考.具体分析如下: 通过这个JS类,你可以象使用session一样使用cookie,非常简单了! /* * CookieStorage.js * 本类实现像localStorage和sessionStorage一样的存储API * 不同的是,它是基于HTTP Cookies实现的. */ function CookieStorage(maxage, path) { // 两个参数分别代表储存有效期和作用域 // 获