数据仓库的架构与设计(代码片段)

谦如尘埃风过隙 谦如尘埃风过隙     2022-11-02     398

关键词:

公司之前的数据都是直接传到Hdfs上进行操作,没有一个数据仓库,趁着最近空出几台服务器,搭了个简陋的数据仓库,这里记录一下数据仓库的一些知识。涉及的主要内容有:

  1. 什么是数据仓库?
  2. 数据仓库的架构
  3. 数据仓库多维数据模型的设计
 

1. 什么是数据仓库

1.1 数据仓库的概念

官方定义

数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。

这个定义的确官方,但是却指出了数据仓库的四个特点。

特点

面向主题:数据仓库都是基于某个明确主题,仅需要与该主题相关的数据,其他的无关细节数据将被排除掉 
集成的:从不同的数据源采集数据到同一个数据源,此过程会有一些ETL操作 
随时间变化:关键数据隐式或显式的基于时间变化 
信息本身相对稳定:数据装入以后一般只进行查询操作,没有传统数据库的增删改操作

个人理解

数据仓库就是整合多个数据源的历史数据进行细粒度的、多维的分析,帮助高层管理者或者业务分析人员做出商业战略决策或商业报表。

1.2 数据仓库的用途

  • 整合公司所有业务数据,建立统一的数据中心
  • 产生业务报表,用于作出决策
  • 为网站运营提供运营上的数据支持
  • 可以作为各个业务的数据源,形成业务数据互相反馈的良性循环
  • 分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果
  • 开发数据产品,直接或间接地为公司盈利

1.3 数据库和数据仓库的区别

差异项数据库数据仓库
特征 操作处理 信息处理
面向 事务 分析
用户 DBA、开发 经理、主管、分析人员
功能 日常操作 长期信息需求、决策支持
DB设计 基于ER模型,面向应用 星形/雪花模型,面向主题
数据 当前的、最新的 历史的、跨时间维护
汇总 原始的、高度详细 汇总的、统一的
视图 详细、一般关系 汇总的、多维的
工作单元 短的、简单事务 复杂查询
访问 读/写 大多为读
关注 数据进入 信息输出
操作 主键索引操作 大量的磁盘扫描
用户数 数百到数亿 数百
DB规模 GB到TB >=TB
优先 高性能、高可用性 高灵活性
度量 事务吞吐量 查询吞吐量、响应时间
 

2. 数据仓库的架构

2.1 当前架构

当前我们的数据仓库架构很low,但是能实现基本功能,如下: 
技术分享图片

数据采集

数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些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得到。

2.2 理想架构

自己的架构这么低级不能误导了读者,所以给出主流公司会用到的一个架构图: 
技术分享图片

增加了以下内容:

数据采集:采用Flume收集日志,采用Sqoop将RDBMS以及NoSQL中的数据同步到HDFS上

消息系统:可以加入Kafka防止数据丢失

实时计算:实时计算使用Spark Streaming消费Kafka中收集的日志数据,实时计算结果大多保存在Redis中

机器学习:使用了Spark MLlib提供的机器学习算法

多维分析OLAP:使用Kylin作为OLAP引擎

数据可视化:提供可视化前端页面,方便运营等非开发人员直接查询

 

3. 数据仓库多维数据模型的设计

3.1 基本概念

主题(Subject)

主题就是指我们所要分析的具体方面。例如:某年某月某地区某机型某款App的安装情况。主题有两个元素:一是各个分析角度(维度),如时间位置;二是要分析的具体量度,该量度一般通过数值体现,如App安装量。

维(Dimension)

维是用于从不同角度描述事物特征的,一般维都会有多层(Level:级别),每个Level都会包含一些共有的或特有的属性(Attribute),可以用下图来展示下维的结构和组成:

技术分享图片

以时间维为例,时间维一般会包含年、季、月、日这几个Level,每个Level一般都会有ID、NAME、DESCRIPTION这几个公共属性,这几个公共属性不仅适用于时间维,也同样表现在其它各种不同类型的维。

分层(Hierarchy)

OLAP需要基于有层级的自上而下的钻取,或者自下而上地聚合。所以我们一般会在维的基础上再次进行分层,维、分层、层级的关系如下图:

技术分享图片

每一级之间可能是附属关系(如市属于省、省属于国家),也可能是顺序关系(如天周年),如下图所示:

技术分享图片

技术分享图片

量度

量度就是我们要分析的具体的技术指标,诸如年销售额之类。它们一般为数值型数据。我们或者将该数据汇总,或者将该数据取次数、独立次数或取最大最小值等,这样的数据称为量度。

粒度 
数据的细分层度,例如按天分按小时分。

事实表和维表

事实表是用来记录分析的内容的全量信息的,包含了每个事件的具体要素,以及具体发生的事情。事实表中存储数字型ID以及度量信息。

维表则是对事实表中事件的要素的描述信息,就是你观察该事务的角度,是从哪个角度去观察这个内容的。

事实表和维表通过ID相关联,如图所示:

技术分享图片

星形/雪花形/事实星座

这三者就是数据仓库多维数据模型建模的模式

上图所示就是一个标准的星形模型。

雪花形就是在维度下面又细分出维度,这样切分是为了使表结构更加规范化。雪花模式可以减少冗余,但是减少的那点空间和事实表的容量相比实在是微不足道,而且多个表联结操作会降低性能,所以一般不用雪花模式设计数据仓库。

事实星座模式就是星形模式的集合,包含星形模式,也就包含多个事实表。

企业级数据仓库/数据集市

企业级数据仓库:突出大而全,不论是细致数据和聚合数据它全都有,设计时使用事实星座模式

数据集市:可以看做是企业级数据仓库的一个子集,它是针对某一方面的数据设计的数据仓库,例如为公司的支付业务设计一个单独的数据集市。由于数据集市没有进行企业级的设计和规划,所以长期来看,它本身的集成将会极其复杂。其数据来源有两种,一种是直接从原生数据源得到,另一种是从企业数据仓库得到。设计时使用星形模型

3.2 数据仓库设计步骤

1、确定主题

主题与业务密切相关,所以设计数仓之前应当充分了解业务有哪些方面的需求,据此确定主题

2、确定量度

在确定了主题以后,我们将考虑要分析的技术指标,诸如年销售额之类。量度是要统计的指标,必须事先选 
择恰当,基于不同的量度将直接产生不同的决策结果。

3、确定数据粒度

考虑到量度的聚合程度不同,我们将采用“最小粒度原则”,即将量度的粒度设置到最小。例如如果知道某些数据细分到天就好了,那么设置其粒度到天;但是如果不确定的话,就将粒度设置为最小,即毫秒级别的。

4、确定维度

设计各个维度的主键、层次、层级,尽量减少冗余。

5、创建事实表

事实表中将存在维度代理键和各量度,而不应该存在描述性信息,即符合“瘦高原则”,即要求事实表数据条数尽量多(粒度最小),而描述性信息尽量少。









电商数仓笔记1(数据仓库概念,项目需求及架构设计,数据生成模块)(代码片段)

电商数仓一、数据仓库概念二、项目需求及架构设计1、项目需求分析2、项目框架(1)技术选型(2)系统数据流程设计(3)框架版本选型(4)服务器选型(5)集群规模(6)集群资... 查看详情

大数据项目之电商数仓数据仓库概念项目需求及架构设计(代码片段)

文章目录1.数据仓库概念2.项目需求及架构设计2.1项目需求分析2.1.1采集平台2.1.2离线需求2.1.3实时需求2.1.4思考题2.2项目框架2.2.1技术选型2.2.2系统数据流程设计2.2.3框架版本选型2.2.3.1Apache框架版本2.2.4服务器选型2.2.4.1物理机:... 查看详情

浅谈数据仓库架构设计

1.数据中台与DW/BI/DSS个人认为数据中台本质上是一种新的适配大数据技术发展的新的“数据仓库-决策支持(商业智能)”架构。这个架构是构建在传统的架构基础之上,对传统架构的一种新的发展。数据中台从企业的... 查看详情

项目实战仓库信息管理系统(layui+ssm+springboot)(代码片段)

...6.日志记录机制7.鉴权服务设计与实现8.业务功能简述三、数据库设计1.数据库模型设计概览2.数据库表设计①depository②仓库调度记录(deposito 查看详情

实时数仓之kappa架构与lambda架构(建议收藏!)(代码片段)

数据仓库是一个面向主题的(SubjectOriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(TimeVariant)的数据集合,用于支持管理决策。数据仓库概念是Inmon于1990年提出并给出了完整的建设方法。随着互联网时... 查看详情

hive的设计与架构(代码片段)

...计与架构的详细信息,具体内容如下:Hive架构Hive数据模型元存储Motivation元数据对象Hive架构图中展示了Hive的主要组成部分,以及与Hadoop的交互,如图所述,Hive的主要组件有:UI–提供给用户的接口,... 查看详情

hive的设计与架构(代码片段)

...计与架构的详细信息,具体内容如下:Hive架构Hive数据模型元存储Motivation元数据对象Hive架构图中展示了Hive的主要组成部分,以及与Hadoop的交互,如图所述,Hive的主要组件有:UI–提供给用户的接口,... 查看详情

面向对象设计与构造课程总结作业(代码片段)

...象方法理解的演进在面向对象课之前上学期写某物实验的数据处理程序和某组实验的数据生成程序的时候,比较频繁的使用结构体套函 查看详情

数仓建设保姆级教程,离线和实时理论+实战)(代码片段)

文档大纲:一、数仓基本概念1.数据仓库架构我们在谈数仓之前,为了让大家有直观的认识,先来谈数仓架构,“架构”是什么?这个问题从来就没有一个准确的答案。这里我们引用一段话:在软件行业... 查看详情

hive的功能和架构(代码片段)

...educe相比优势在哪里(相对于开发)为什么说Hive是Hadoop的数据仓库,从【数据存储和分析】方面理解Hive架构,分为三个部门来理解,画图理解1.Hive能做什么,与mapreduce相比优势在哪里(相对于开发)1.1.hive是基于Hadoop的一个数据... 查看详情

物联网云的存储与应用架构——architectingiotcloud(代码片段)

物联网云的存储与应用架构存储框架数据类型数据的存储系统-数据库SQL-传统的关系型数据库NoSQL-新型数据库MongoDBCassandraRedisinfluxDBElasticsearchCAP理论数据仓库DataWarehouse数据湖DataLakeETL/ELT数据湖面临的挑战数据湖的文件系统数据湖... 查看详情

c语言课程设计(代码片段)

...本游戏注重"视觉展现效果和更快速的动画"、注重数据储存,是一种对于算法和UI设计有一定要求的应用设计。本小组秉承课程所学与外部优秀知识技术相结合的观念,多人合 查看详情

springcloudalibaba实战(3:存储设计与基础架构设计)(代码片段)

...程的梳理和服务模块的划分,接下来,开始设计数据存储。虽然在微服务的理论中,没有对数据库定强制性的规范,但一般,服务拆分之后,数据库也会对应的拆分。这种结合业务来进行拆分的方式是数据... 查看详情

我在阿里做了5年数据架构师,想告诉你这些数据仓库的方法论(代码片段)

文章目录一、大数据体系整体架构1.1、来源系统1.2、原始数据层1)将数据仓库与业务系统分隔开2)分担业务系统的报表任务1.3、数据仓库1.3.1、基础数据层1.3.2、主题层1.3.3、模型层1.4、数据应用层1.4.1、数据反哺1.4.2、... 查看详情

大数据框架原理简介(代码片段)

针对上篇文章遗留问题联邦学习之一几亿级别的数据量架构如何设计且如何实现要解决这个问题那么咱首先要会大数据处理框架的相关内容这篇文章咱们走进大数据处理的世界首先咱们要理解大数据相关的概念和原理才能很好的... 查看详情

数据仓库hive从入门到小牛(代码片段)

目录一、数据仓库的介绍1.1数据仓库的基本概念1.2数据仓库的主要特征1.3数据仓库与数据库区别1.4数据仓库分层架构1.5数据仓库之ETL二、Hive简介2.1什么是Hive?2.2为什么使用Hive?2.3Hive的体系结构2.4Hive与关系型数据库区别三、Hive的... 查看详情

mybatis架构与原理(代码片段)

...外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。(2)数据处理层 查看详情

mybatis架构与原理(代码片段)

...外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。(2)数据处理层 查看详情