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

【数据仓库设计基础(四)】数据仓库实施步骤

文章目录

  • 1.定义范围
  • 2.确定需求
  • 3.逻辑设计
    • 1)建立需要的数据列表
    • 2)识别数据源
    • 3)制作实体关系图
  • 4.物理设计
    • 1)性能优化
    • 2)数仓的拓展性
  • 5.装载数据
  • 6.访问数据
  • 7.管理维护

实施一个数据仓库项目的主要步骤是:

  • 定义项目范围
  • 收集并确认业务需求和技术需求
  • 逻辑设计
  • 物理设计
  • 从源系统向数据仓库装载数据
  • 使数据可以被访问以辅助决策
  • 管理和维护数据仓库

1.定义范围

项目范围定义了一个数据仓库项目的边界。典型的范围定义是组织、地区、应用、业务功能的联合表示。

定义范围时通常需要权衡考虑资源(人员、系统、预算等)、进度(项目的时间和里程碑要求)、功能(数据仓库承诺达到的能力)三方面的因素。

项目范围是设定正确的期望值、评估成本、估计风险、制定开发优先级的依据。

 

2.确定需求

数据仓库项目的需求可以分为业务需求和技术需求。

1)定义业务需求

  • 建立数据仓库的主要目的是为组织赋予从全局访问数据的能力。数据的粒度必须能够满足用户执行分析的需求,并且数据应该被表示为用户能够理解的业务术语。
  • 对数据仓库中数据的分析将辅助业务决策:数据仓库的设计者应该清楚业务用户是如何做决策的,在决策过程中提出了哪些问题,以及哪些数据是回答这些问题所需要的。
  • 在为数据仓库收集需求的过程中,还要考虑设计要能适应需求的变化。

2)定义技术需求

  • 数据来源
    数据仓库的数据来源是操作型系统,这些系统日复一日地处理着各种事务活动。操作型系统大都是联机事务处理系统。数据仓库会从多个操作型源系统抽取数据。
  • ETL
    操作型系统里的数据需要一个中间处理过程,这就是所谓的ETL过程。需要知道如何清理操作型数据,如何移除垃圾数据,如何将来自多个源系统的相同数据整合在一起。
  • 数据的更新频率
    例如,如果需要进行长期的或大范围的数据分析,可能就不需要每天装载数据,而是每周或每月装载一次。注意,更新频率并不决定数据的细节程度,每周汇总的数据有可能每月装载。

 

3.逻辑设计

接着进行逻辑设计:需要定义特定数据的具体内容,数据之间的关系,支持数据仓库的系统环境等,本质是发现逻辑对象之间的关系。

1)建立需要的数据列表

很多情况下,为了得到所需的全部数据,需要适当扩展用户需求或者预测未来的需要,一般从主题域涉及的业务因素入手。

例如,销售主题域的业务因素可能是客户、地区、产品、促销等。然后建立每个业务因素的元素列表,依据也是用户提出的需求。最后通过元素列表,标识出业务因素之间的联系。

这些工作完成后,应该已经获得了如下的信息:

  • 原始的或计算后的数据元素列表
  • 数据的类型
  • 合理的数据分组,比如国家、省市、区县等分成一组,因为它们都是地区元素;
  • 数据之间的关系,比如国家、省市、区县的包含关系等。

 

2)识别数据源

现在已经有了需要的数据列表,现在考虑:从哪里可以得到这些数据,以及要得到这些数据需要多大的成本。需要把上一步建立的数据列表映射到操作型系统上

从哪里获取:

应该从最大最复杂的源系统开始,在必要时再查找其他源系统。数据的映射关系可能是直接的或间接的,比如销售源系统中,商品的单价和折扣价可以直接获得,而折扣百分比就需要计算得到。

通常维度模型中的维度表可以直接映射到操作型源系统,而事实表的度量则映射到源数据在特定粒度级别上聚合计算后的结果。

成本:

某些数据的获得需要较高的成本,例如,用户想要得到促销相关的销售数据就不那么容易,因为促销期的定义从时间角度看是不连续的。

 

3)制作实体关系图

逻辑设计的交付物是实体关系图(entity-relationship diagram,简称ERD)和对它的说明文档(数据字典)。实体对应关系数据库中的表,属性对应关系数据库中的列。

在维度模型的ERD中,实体由事实表和维度表组成,关系体现为在事实表中引用维度表的主键。因此先要确认哪些信息属于中心事实表,哪些信息属于相关的维度表。维度模型中表的规范化级别通常低于关系模型中的表。

 
 

4.物理设计

物理设计指的是将逻辑设计的对象集合,转化为一个物理数据库,包括所有的表、索引、约束、视图等。

1)性能优化

比较通用的数据仓库优化方法有位图索引和表分区。

位图索引对索引列的每个不同值建立一个位图。

  • 和普通的B树索引相比,位图索引占用的空间小,创建速度快。
    但由于并发的DML操作会锁定整个位图段的大量数据行,所以位图索引不适用于频繁更新的事务处理系统而数据仓库对最终用户来说是一个只读系统,其中某些维度的值基数很小,这样的场景非常适合利用位图索引优化查询。
  • 遗憾的是有些数据库管理系统如MySQL,还没有位图索引功能。

大部分数据库系统都可以对表进行分区。

  • 表分区是将一个大表按照一定的规则分解成多个分区,每个表分区可以定义独立的物理存储参数。将不同分区存储到不同的磁盘上,查询表中数据时可以有效分布I/O操作,缓解系统压力。
  • 分区消除:分区还有一个很有用的特性,叫做分区消除。查询数据的时候,数据库系统的优化器可以通过适当的查询条件过滤掉一些分区,从而避免扫描所有数据,提高查询效率。

 

2)数仓的拓展性

从技术上讲,可扩展性是一种通过增加资源,使服务能力得到线性扩展的能力。

  • 比方说,一台服务器在满负荷时可以为一万个用户同时提供服务,当用户数增加到两万时,只需要再增加一台服务器,就能提供相同性能的服务。
  • 随着时间的推移,数据量会越来越大,因此在做数据仓库物理设计时,出于可扩展性的考虑,应该把对硬件、软件、网络带宽的依赖降到最低。?

 

5.装载数据

这个步骤实际上涉及整个ETL过程。

需要执行的任务包括:

  • 源和目标结构之间建立映射关系;
  • 从源系统抽取数据;
  • 对数据进行清洗和转换;
  • 将数据装载进数据仓库;
  • 创建并存储元数据。

 

6.访问数据

访问步骤是要使数据仓库的数据可以被使用,使用的方式包括:数据查询、数据分析、建立报表图表、数据发布等。根据采用的数据仓库架构,可能会引入数据集市的创建。

访问步骤需要执行以下任务:

  • 为前端工具建立一个中间层。在这个中间层里,把数据库结构和对象名转化成业务术语,这样最终用户就可以使用与特定功能相关的业务语言同数据仓库交互。
  • 建立和管理数据仓库里的中间表和汇总表。建立这些表完全是出于性能原因。
    中间表一般是在原始表上添加过滤条件获得的数据集合,汇总表则是对原始表进行聚合操作后的数据集合。这些表中的记录数会远远小于原始表,因此前端工具在这些表上的查询会执行得更快。

 

7.管理维护

这个步骤涵盖在数据仓库整个生命周期里的管理和维护工作。
这步需要执行的任务包括:

  • 确保对数据的安全访问
  • 管理数据增长
  • 优化系统以获得更好的性能
  • 保证系统的可用性和可恢复性等

 
 
参考:《Hadoop构建数据仓库实战》

相关文章:

【数据仓库设计基础(四)】数据仓库实施步骤

文章目录 1.定义范围2.确定需求3.逻辑设计1)建立需要的数据列表2)识别数据源3)制作实体关系图 4.物理设计1)性能优化2)数仓的拓展性 5.装载数据6.…...

GridSearchCV 工具介绍

目录 1、定义 2、工作流程 3、示例代码 4、总结 1、定义 GridSearchCV 是一个用于超参数调优的工具,它在给定的参数网格中执行交叉验证,以确定最佳的参数组合。通过穷举搜索(exhaustive search)来寻找最佳参数,即…...

基于 SSM 框架的旅游文化管理平台

本系统采用基于JAVA语言实现、架构模式选择B/S架构,Tomcat7.0及以上作为运行服务器支持,基于JAVA等主要技术和框架设计,idea作为开发环境,数据库采用MYSQL5.7以上。 开发环境: JDK版本:JDK1.8 服务器&…...

chatgpt技术总结(包括transformer,注意力机制,迁移学习,Ray,TensorFlow,Pytorch)

最近研读了一些技术大咖对chatgpt的技术研讨,结合自己的一些浅见,进行些许探讨。 我们惊讶的发现,chatgpt所使用的技术并没有惊天地泣鬼神的创新,它只是将过去的技术潜能结合现在的硬件最大化的发挥出来,也正因如此&am…...

vertx的学习总结4

一、异步数据和事件流 1.为什么流是事件之上的一个有用的抽象? 2.什么是背压,为什么它是异步生产者和消费者的基础? 3.如何从流解析协议数据? 1. 答:因为它能够将连续的事件序列化并按照顺序进行处理。通过将事件…...

SpringBoot心旅售票管理系统

本心旅售票管理系统采用基于JAVA语言实现、架构模式选择B/S架构,Tomcat7.0及以上作为运行服务器支持,基于JAVA、springboot、vue等主要技术和框架设计,idea作为开发环境,数据库采用MYSQL5.7以上。 采用技术: SpringBootVueMySQL...

CUDA C编程权威指南:1-基于CUDA的异构并行计算

什么是CUDA?CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA(英伟达)提出的并行计算架构,结合了CPU和GPU的优点,主要用来处理密集型及并行计算。什么是异构计算&#xff1…...

R语言易错点(持续更新中~~)

1.R向量元素的索引(下标)是从1开始的&#xff0c;而非0 >x [1] 1 2 4>x[3] [1] 4 2.[]和[ [ ] ] mylist<-list(stud.id1234,stud.name"Tom",stud.marksc(10,3,14,25,19)) > mylist $stud.id [1] 1234$stud.name [1] "Tom"$stud.marks [1] 10…...

Multisim14.0仿真(二十七)基于UC3842的反激式开关电源的设计及仿真

一、UC3842简介&#xff1a; UC3842为固定频率电流模式PWM控制器。它们是专门为OFF−线和直流到直流转换器应用与最小的外部组件。内部实现的电路包括用于精确占空比控制的修剪振荡器、温度补偿参考、高增益误差放大器、电流传感比较器和理想适合于驱动功率MOSFET的高电流温度极…...

SpringMVC(二)@RequestMapping注解

我们先新建一个Module。 我们的依赖如下所示&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaL…...

NXP公司K60N512+PWM控制BLDC电机

本篇文章介绍了使用NXP公司提供的塔式快速原型系统来驱动控制带霍尔传感器的无刷直流电机。文章涉及的塔式快速原型系统主要包括以下四个独立板卡&#xff1a;1.塔式系统支撑模块&#xff08;TWR-Elevator&#xff09;&#xff0c;用以连接微控制器以及周边模块&#xff1b;2.低…...

CAA的VS Studio安装

文章目录 一、官网下载VS Studio二、勾选如下安装信息三、更改软件安装位置四、17专业版密钥 一、官网下载VS Studio 官网下载地址&#xff1a; https://visualstudio.microsoft.com/zh-hans/downloads/ 下载对应版本后&#xff0c;以VS Studio2017为例&#xff1a; 二、勾…...

条件查询和数据查询

一、后端 1.controller层 package com.like.controller;import com.like.common.CommonDto; import com.like.entity.User; import com.like.service.UserService; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.GetMapping; import …...

JSP旅游平台管理

本系统采用基于JAVA语言实现、架构模式选择B/S架构&#xff0c;Tomcat7.0及以上作为运行服务器支持&#xff0c;基于JAVA、JSP等主要技术和框架设计&#xff0c;idea作为开发环境&#xff0c;数据库采用MYSQL5.7以上。 开发环境&#xff1a; JDK版本&#xff1a;JDK1.8 服务器&…...

简单走近ChatGPT

目录 一、ChatGPT整体背景认知 &#xff08;一&#xff09;ChatGPT引起关注的原因 &#xff08;二&#xff09;与其他公司的竞争情况 二、NLP学习范式的发展 &#xff08;一&#xff09;规则和机器学习时期 &#xff08;二&#xff09;基于神经网络的监督学习时期 &…...

10.3作业

#include <myhead.h> int main(int argc, const char *argv[]) { mkfifo(“./f1”,0777); mkfifo(“./f2”,0777); pid_t cpid fork(); if(0 < cpid) { int fdw open(“./f1”,O_WRONLY); int fdr open(“./f2”,O_RDONLY); char buf[128] “”; while(1) { bzero…...

Springboot中的@Import注解~

Import注解是Spring框架中的注解之一&#xff0c;用于导入其他配置类或者组件 Import注解的作用有以下几点&#xff1a; 导入其他配置类&#xff1a;可以使用Import注解导入其他的配置类&#xff0c;将其加入到当前配置类中&#xff0c;从而可以共享配置信息 导入其他组件&am…...

Linux 安全 - SUID机制

文章目录 一、文件权限位二、SUID简介 一、文件权限位 &#xff08;1&#xff09; $ ls -l text.txt -rw-rw-r-- 1 yl yl 0 Sep 28 16:25 text.txt其中第一个字段-rw-rw-r–&#xff0c;我们可以把它分为四部分看&#xff1a; -rw-rw-r--&#xff08;1&#xff09;- &a…...

Nginx与Spring Boot的错误模拟实践:探索502和504错误的原因

文章目录 前言502和504区别---都是Nginx返回的access.log和error.log介绍SpringBoot结合Nginx实战502 and 504准备工作Nginx配置host配置SpringBoot 502模拟access.logerror.log 504模拟access.logerror.log 500模拟access.logerror.log 总结 前言 刚工作那会&#xff0c;最常…...

全志ARM926 Melis2.0系统的开发指引①

全志ARM926 Melis2.0系统的开发指引① 1. 编写目的2. Melis2.0 系统概述3. Melis2.0 快速开发3.1. Melis2.0 SDK 目录结构3.2. Melis2.0 编译环境3.3. Melis2.0 固件打包3.4. Melis2.0 固件烧录3.5.串口打印信息3.6. Melis2.0 添加和调用一个模块3.6.1. 为什么划分模块&#xf…...

AI系统-7Pytorch数字识别实战及算子介绍

之前铺垫了神经网络的基础知识&#xff0c;这里使用编程工具Pytorch进行一个实战讲解。首先变成一个看得见、摸得着的程序和代码&#xff0c;然后再说后续怎么使用GPU/NPU硬件去优化。 本文主要参考ZOMI酱《AI系统》&#xff1a;https://chenzomi12.github.io/01Introduction/0…...

用 OpenAI Codex 打造你的 AI 结对编程助手

用 OpenAI Codex 打造你的 AI 结对编程助手 告别重复劳动&#xff0c;让 AI 直接帮你写代码、修 Bug、跑测试 在 AI 编程工具层出不穷的今天&#xff0c;OpenAI Codex 依然是许多开发者心目中的“神器”。与普通的代码补全工具不同&#xff0c;Codex 是一款终端原生的 AI 编程助…...

Web AR技术深度探秘:7个创新案例重构浏览器增强现实体验

Web AR技术深度探秘&#xff1a;7个创新案例重构浏览器增强现实体验 【免费下载链接】AR.js Image tracking, Location Based AR, Marker tracking. All on the Web. 项目地址: https://gitcode.com/gh_mirrors/arj/AR.js 你是一个文章写手&#xff0c;你负责为开源项目…...

OpenClaw+GLM-4.7-Flash:个人网络安全监控助手

OpenClawGLM-4.7-Flash&#xff1a;个人网络安全监控助手 1. 为什么需要个人网络安全监控 去年我的开发机遭遇了一次恶意脚本攻击&#xff0c;导致本地Git仓库被篡改。事后排查发现&#xff0c;攻击者通过一个陈旧的SSH密钥漏洞入侵&#xff0c;而系统日志里其实早有异常登录…...

从YOLOv5到YOLOv8:停车位检测模型演进与实战性能对比

1. YOLO系列模型的技术演进路径 YOLO&#xff08;You Only Look Once&#xff09;系列模型作为目标检测领域的标杆算法&#xff0c;从2015年诞生至今已经经历了多次重大迭代。每次版本更新都带来了显著的性能提升和架构创新&#xff0c;这使得YOLO系列在实时目标检测任务中始终…...

从AHB到AXI:手把手带你用Verilog仿真看Outstanding如何提升SoC数据吞吐

从AHB到AXI&#xff1a;深入解析Outstanding机制如何优化SoC数据吞吐效率 在复杂的SoC设计中&#xff0c;总线架构的选择直接影响系统性能。传统AHB总线虽然结构简单&#xff0c;但在高并发场景下容易成为瓶颈。AXI协议通过引入Outstanding、Out-of-order等机制&#xff0c;显著…...

如何为Obsidian插件添加多语言支持:终极国际化指南

如何为Obsidian插件添加多语言支持&#xff1a;终极国际化指南 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 如果你正在寻找一款能够帮助你的Obsidian插件突破语言限制的工具&#xff0c;那么Obsidian-i18n正是你需要的…...

OpenClaw语音交互:nanobot对接Whisper实现声控任务触发

OpenClaw语音交互&#xff1a;nanobot对接Whisper实现声控任务触发 1. 为什么需要语音交互能力 作为一个长期使用OpenClaw进行个人工作流自动化的用户&#xff0c;我一直在思考如何让这个工具更加"无感"地融入日常。键盘输入固然高效&#xff0c;但在某些场景下——…...

Nginx反向代理实战:不改代码轻松解决前后端跨域问题(附完整配置模板)

Nginx反向代理实战&#xff1a;不改代码轻松解决前后端跨域问题&#xff08;附完整配置模板&#xff09; 前后端分离架构已成为现代Web开发的主流模式&#xff0c;但随之而来的跨域问题却让不少开发者头疼。想象一下这样的场景&#xff1a;你的前端运行在https://frontend.com&…...

告别设备标识混乱!用uniappx插件Ba-IdCode-U一站式获取OAID/AndroidID/IMEI(附隐私合规指南)

跨平台开发者的设备标识管理实战&#xff1a;从混乱到合规的完整解决方案 每次启动新项目时&#xff0c;开发者们是否总在纠结该用哪种设备标识&#xff1f;OAID、AndroidID还是IMEI&#xff1f;国内厂商的兼容性问题怎么解决&#xff1f;隐私合规的红线又在哪里&#xff1f;本…...