作为系列文┞仿的第六篇,本文将重点商量数据处理层中数据仓库的扶植。在第二篇运营数据系同一文,有提到早期的数据办事中存在不少问题,固然在做运营Dashboard体系时,对后台数据办事进行了梳理,构建了数据处理的底层公共库等,然则仍然存在一些问题:
中心数据流掉,计算结不雅没有共享。比如在很多半据申报中都邑对同一个功能进行数据提取、分析,然则都是各自处理一遍,没有对结不雅进行共享。
数据分散在多个数据源,如MySQL、MongoDB、Elasticsearch,很难对多个源的数据进行结合应用、有效组织。
每小我都须要异常清跋扈产品营业逻辑才能精确地提取、处理数据,导致大年夜家都将大年夜量时光消费在基本数据处理中。
于是,我们推敲扶植一个适于分析的数据存储体系,该体系的工作应当包含两部分:第一,根据需求抽象出数据模型;第二,按照数据模型的定义,大年夜各个数据源采取数据,进行清洗、处理后存储下来。固然数据仓库的学术定义有很多版本,并且我们的体系也没有涉及到多部分的数据整合,然则相符上述两个特点的,应当可以归结到数据仓库典范畴了,所以请许可笔者将本订婚名为“数据仓库的扶植”。

存储选型
要不要Hadoop? 生家当务数据库与用户行动数据增长均比较迟缓,估计在接下来的一年迈数据仓库的总存储量不会跨越500GB 。是以现阶段接入Hadoop的意义不大年夜,强行接入反而会降低工作效力。并且团队重要技巧栈是Python,应用Python操作Hadoop本身就话苄机能损耗。
为什么是MySQL? 比拟Oracle,团队对MySQL加倍熟悉,所以笔者更多的┞峰酌是选择MySQL的哪个存储引擎:Infobright vs. myisam vs. innodb。Infobright惹人了列存储筹划,高强度的数据紧缩,优化的统计计算,然则今朝已经没有社区版了,须要收费。抛开底层存储的差别,myisam与innodb在特点上的差别重要表如今三个方面:第一,引用的一致性,innodb有外键,在一对多关系的表之间形成物理束缚,而myisam没有;第二,事务,innodb有事务操作,可以包管一组操作的原子性,而myisam没有;第三,锁级别,innodb支撑行锁,而myisam只支撑表锁。对于外键与事务,并不是数据仓库须要的,并且数据仓库是读多写少的,myisam的萌芽机能优于innodb,是以myisam成为首选。
数据建模
根据数据分析的需求抽象出合适的数据模型,是数据仓库扶植的一个重要环节。所谓数据模型,就是抽象出来的一组实体以及实体之间的关系,而数据建模,就是为了表达实际的营业特点与关系所进行的抽象。数据建模是一个很宽泛的话题,有很多办法论值灯揭捉?究,具体到营业上不合行业又会有不合的建模手段。这里重要结合我们的实践来简单地谈一些熟悉和办法。
今朝业界有很多半据建模的办法,比如范式建模法、维度建模法等等。遵守三范式,我们在做营业数据库设计时经常会用到,这种办法对营业功能进行抽象,便利功能扩大,然则会额外增长分析的复杂度,是以笔者更偏向于维度建模法。维度建模法,是Kimball 最先提出的概念,将数据抽象为事实表与维度表两种,而根据二者之间的关系将整体的模型划分为星型模型与雪花模型两种。这种建模办法的优势在于,根据各个维度对数据进行了预处理,比如按照时光维度进行预先的统计、分类等等,可以进步数据分析应用时的效力,是适于分析的一种办法。具体来看看几个概念:
维度表与事实表。维度表,描述的是事物的属性,反竽暌钩了不雅察事物的角度。事实表,描述的是营业过程的事实数据,是要存眷的具体内容,每行数据对应一个或多个度量事宜。比如,分析“某地区某商品某季度的销量”,就是大年夜地区、商品、时光(季度)三个角度来不雅察商品的销量,维度表有地区表、商品表和时光表,事实表为销量表。在销量表中,经由过程键值接洽关系到三个维度表中,经由过程度量值来表示对应的销量,是以事实表平日有两种字段:键值列、度量值列。

根本的维度建模思路。维度建模的根本思路可以归纳为这么几点:第一,肯定主题,即搞清跋扈要分析的主题是什么,比瘸老述的“某地区某商品某季度的销量”;第二,肯定分析的维度,预备大年夜哪几个角度来分析数据;第三,肯定事实表中每行的数据粒度,比如时光粒度细化到季度就可以了;第四,肯定分析的度量事宜,即数据指标是什么。
举个例子,营业场景是:一款做连锁企颐魅雇用工作的产品,比如为麦当劳的所有连锁门店雇用员工,如今要分析“每家门店的┞沸聘情况若何?”。结合具体营业,我们惹人六个维度:时光维度、地区维度、品牌维度、门店维度、职位维度、申请渠道;数据指标上,重要有申请工作人数、申请工作次数、聘请人数、拒绝人数,每个指标分别有增量值和总量值两种;数据粒度上,时光维度细分到以小时为单位,地区维度细分到市一级。下图所示就是响应的星型模型,有三点值得一提:
将数据落地到哪里是起重要推敲的问题,笔者推敲的身分重要有这么几点:一是数据量大年夜小和增长速度,二是要能实现SQL或者类SQL操作,有多表结合、聚合分析功能,三是团队技巧栈。可选的技巧筹划有MySQL、Oracle和Hive,最终选择了基于MYISAM存储引擎的MySQL,部分原因如下:
可以看到我们只建立了四┞放维度表,地区维度和渠道维度是直接以字符串的情势放到事实表中的。这是维度设计中经常碰到的一个问题:如不雅这个维度只有一个属性,那么是作为零丁的一张表照样作为事实表的一部分?其实并没有完全对与错的谜底,只有是否合适本身的谜底。这里,城市与渠道的信息并不会产生变更,所以放入事实表中可以避免结号绫侨芽。
推荐阅读
作为系列文┞仿的第四篇,本文将重点商量数据采集层中的ELK日记体系。日记,指的是后台办事中产生的log信息,平日会输入到不呵9依υ?件中,比如Django办事下,一般会有nginx日记和uWSGI>>>详细阅读
本文标题:创业公司做数据分析(六)数据仓库的建设
地址:http://www.17bianji.com/lsqh/34625.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示