什么是数据仓库?
数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。
这个定义的确官方,但是却指出了数据仓库的四个特点。
特点
面向主题:数据仓库都是基于某个明确主题,仅需要与该主题相关的数据,其他的无关细节数据将被排除掉
集成的:从不同的数据源采集数据到同一个数据源,此过程会有一些ETL操作
随时间变化:关键数据隐式或显式的基于时间变化
信息本身相对稳定:数据装入以后一般只进行查询操作,没有传统数据库的增删改操作
个人理解
数据仓库就是整合多个数据源的历史数据进行细粒度的、多维的分析,帮助高层管理者或者业务分析人员做出商业战略决策或商业报表。
数据仓库的用途
- 整合公司所有业务数据,建立统一的数据中心
- 产生业务报表,用于作出决策
- 为网站运营提供运营上的数据支持
- 可以作为各个业务的数据源,形成业务数据互相反馈的良性循环
- 分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果
- 开发数据产品,直接或间接地为公司盈利
数据库和数据仓库的区别
差异项 | 数据库 | 数据仓库 |
---|---|---|
特征 | 操作处理 | 信息处理 |
面向 | 事务 | 分析 |
用户 | DBA、开发 | 经理、主管、分析人员 |
功能 | 日常操作 | 长期信息需求、决策支持 |
DB设计 | 基于ER模型,面向应用 | 星形/雪花模型,面向主题 |
数据 | 当前的、最新的 | 历史的、跨时间维护 |
汇总 | 原始的、高度详细 | 汇总的、统一的 |
视图 | 详细、一般关系 | 汇总的、多维的 |
工作单元 | 短的、简单事务 | 复杂查询 |
访问 | 读/写 | 大多为读 |
关注 | 数据进入 | 信息输出 |
操作 | 主键索引操作 | 大量的磁盘扫描 |
用户数 | 数百到数亿 | 数百 |
DB规模 | GB到TB | >= TB |
优先 | 高性能、高可用性 | 高灵活性 |
度量 | 事务吞吐量 | 查询吞吐量、响应时间 |
数据仓库的理想架构
数据采集
数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些ETL操作。
数据源种类可以有多种:
- 日志:所占份额最大,存储在备份服务器上
- 业务数据库:如Mysql、Oracle
- 来自HTTP/FTP的数据:合作伙伴提供的接口
- 其他数据源:如Excel等需要手工录入的数据
数据存储与分析
HDFS是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。
离线数据分析与计算,也就是对实时性要求不高的部分,Hive是不错的选择。
使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很乐意开发Java,或者对SQL不熟,那么也可以使用MapReduce来做分析与计算。
Spark性能比MapReduce好很多,同时使用SparkSQL操作Hive。
数据共享
前面使用Hive、MR、Spark、SparkSQL分析和计算的结果,还是在HDFS上,但大多业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便的获取数据。
这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库。
数据应用
报表:报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层。
接口:接口的数据都是直接查询数据共享层即可得到。
即席查询:即席查询通常是现有的报表和数据共享层的数据并不能满足需求,需要从数据存储层直接查询。一般都是通过直接操作SQL得到。
数据采集:采用Flume收集日志,采用Sqoop将RDBMS以及NoSQL中的数据同步到HDFS上
消息系统:可以加入Kafka防止数据丢失
实时计算:实时计算使用Spark Streaming消费Kafka中收集的日志数据,实时计算结果大多保存在Redis中
机器学习:使用了Spark MLlib提供的机器学习算法
多维分析OLAP:使用Kylin作为OLAP引擎
数据可视化:提供可视化前端页面,方便运营等非开发人员直接查询
数据仓库设计步骤
1、确定主题
主题与业务密切相关,所以设计数仓之前应当充分了解业务有哪些方面的需求,据此确定主题
2、确定量度
在确定了主题以后,我们将考虑要分析的技术指标,诸如年销售额之类。量度是要统计的指标,必须事先选
择恰当,基于不同的量度将直接产生不同的决策结果。
3、确定数据粒度
考虑到量度的聚合程度不同,我们将采用“最小粒度原则”,即将量度的粒度设置到最小。例如如果知道某些数据细分到天就好了,那么设置其粒度到天;但是如果不确定的话,就将粒度设置为最小,即毫秒级别的。
4、确定维度
设计各个维度的主键、层次、层级,尽量减少冗余。
5、创建事实表
事实表中将存在维度代理键和各量度,而不应该存在描述性信息,即符合“瘦高原则”,即要求事实表数据条数尽量多(粒度最小),而描述性信息尽量少。