浅谈维度建模、数据分析模型,何为数据仓库,与数据库的区别

本文主要是介绍浅谈维度建模、数据分析模型,何为数据仓库,与数据库的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

往期推荐

大数据HBase图文简介-CSDN博客

数仓分层ODS、DWD、DWM、DWS、DIM、DM、ADS-CSDN博客

数仓常见名词解析和名词之间的关系-CSDN博客

数仓架构:离线数仓、实时数仓Lambda和Kappa、湖仓一体数据湖-CSDN博客

0. 前言

  1. 1991年,数据仓库之父 比尔·恩门 著书《Building the DataWarehouse》,要求构建数据仓库时,遵循范式建模,即从关系型数据库中提取的范式数据,仍按范式存储到数据仓库中,这样就导致数仓中有很多小表,查询的时候必然会有很多表的关联,极大地影响查询效率和性能。
  2. 1994年,拉尔夫·金博尔 著书《The DataWarehouse Toolkit》,提出维度建模和数据集市的概念维度建模是反范式建模,自下而上,然而这种方式仍有缺点:那就是每个业务平台的数据有各自的数据集市,集市之间数据隔离,存在数据不一致、重复的情况。
  3. 1998-2001年,比尔·恩门派和金博尔派合并,比尔·恩门提出CIF架构:数仓分层,不同层采用不同的建模方式,同时解决了数据不一致和查询效率低的问题。

基于以上,有了范式建模、维度建模、实体建模三种主要建模方式 

0.1 浅谈维度建模

维度建模主要面向分析场景,分为维度表和事实表,是数据仓库中最常用的数据建模技术之一,建模过程和关系型数据库的建表很像,下图中,商家ID、产品ID、时间ID就是不同的维度列,而订单额就是度量值维度+度量值=事实表每个维度列同时也有自己的维度表

那么基于以上,有如下两种数据分析模型

0.2 数据分析模型

对比

  • 查询效率:雪花模型有很多小表,看起来更为范式化,但这导致查询时需要关联很多表,查询效率比星型模型低
  • 数据冗余:星型模型的表通常是宽表,伪范式,即表有很多字段,这导致星型模型存在较多的数据冗余

1. 数据仓库

1.1 何为数据仓库

  • 数据仓库(Data Warehouse)即是存储历史数据的仓库,简写为DW或DWH
  • 数据仓库的目的是构建面向分析的集成化数据环境(OLAP),为企业提供决策支持
  • 仓库的数据来自各个业务平台,业务平台中的数据形式多种多样,可能是 MySQL等关系数据库里的结构化数据,可能是Word、Excel 文档中的非结构化数据,还可能是 HTML、XML 等自描述的半结构化数据。这些业务数据经过一系列的ETL(抽取、转换、加载),最终以一种统一的格式装载进数据仓库。
  • 数据仓库本身并不“生产”任何数据,也不需要“消费”任何的数据,只是在内部对数据做了一些数据清洗转移操作,好比流水线,数据来源于外部,最终开放给外部应用。

1.2 数据仓库特征

  • 面向主题
    传统数据库中,最大的特点是面向应用进行数据的组织,各个业务系统可能是相互分离的。而数据仓库则是面向主题的。主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象
  • 集成性
    通过对分散、独立、异构的数据库数据进行ETL并汇总得到了数据仓库的数据,这样保证了数据仓库内的数据的一致性。 数据仓库中的综合数据不能从原有的数据库系统直接得到。因此在数据进入数据仓库之前,必然要经过清洗、一致性等操作,这一步是数据仓库建设中最关键、最复杂的一步。
  • 反应历史变化数仓反应的是某段时间内的历史数据,这也是数仓和数据库的区别之一。
  • 不可修改:数据进入数据仓库以后,一般情况下被较长时间保留。数据仓库中一般有大量的查询操作,但修改删除操作很少,只需定时加载更新即可。
  • 时效性:数仓存储的是历史数据,按照时间顺序追加,有时间属性。数仓用户通过分析企业过去一段时间业务的经营状况,挖掘潜在价值。但是分析的结果只能反映过去某段时间的情况,随着业务变化时间改变,数仓中的数据就会失去价值,需要载入新数据。

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

数据库与数据仓库的区别实际讲的是 OLTP 与 OLAP 的区别:

  • 操作型处理,叫联机事务处理 OLTP,也可以称面向交易的处理系统,针对日常事务处理。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理,像MYSQL,Oracle等关系型数据库一般属于OLTP。
  • 分析型处理,叫联机分析处理 OLAP,一般针对某些主题的历史数据进行分析,支持管理决策。

首先要明白,数据仓库的出现,并不是要取代数据库。数据库是面向事务的设计,数据仓库是面向主题设计的。数据库一般存储业务数据,数据仓库存储的一般是历史数据

  • 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、 密码等简单数据即可,符合业务应用,但是不符合分析。
  • 数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。

1.4 为什么不直接用业务平台的数据而要建设数仓? 

实际在数仓出现之前,确实是这么做的,但是有很多数据分析的先驱者当时已经发现,简单的直接访问方式很难良好工作,原因如下:

  • 由于安全或其他因素不能直接访问某些业务数据。
  • 业务平台存储的是当前数据,存在于RDBMS,并且数据版本变更很频繁,而大数据需要的是历史数据,读多改少。

  • 各个平台数据存储是隔离的,且数据格式不统一,难以建立、维护、汇总数据。

  • 业务系统的表结构(OLTP)为事务处理性能而优化,有时并不适合查询与分析(OLAP)

  • 有时用户要看到的某些数据字段在数据库中并不存在,是后期聚合处理生成的。

  • 业务平台是跑业务的,本身就占用了一定数据库读写资源,大数据分析再从每个表中频繁读取数据,影响业务平台的性能,不够专业。

1.5 以银行业务为例 

  • 数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下来,可以简单地理解为用数据库记账。
  • 数据仓库是分析系统的数据平台,它从事务系统获取数据,并做汇总、加工,为决策者提供决策的依据。比如,某银行某分行一个月发生多少交易,该分行当前存款余额是多少。如果存款又多,消费交易又多,那么该地区就有必要设立 ATM了。 显然,银行的交易量是巨大的,通常以百万甚至千万次来计算。
  • 事务系统是实时的,这就要求时效性,客户存一笔钱需要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。 而分析系统是事后的,它要提供关注时间段内所有的有效数据。这些数据是海量的,汇总计算起来也要慢一些,但是,只要能够提供有效的分析数据就达到目的了。
  • 数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”

参考博客:数据仓库系列 1:什么是数据仓库,它与传统数据库有什么不同?-CSDN博客

这篇关于浅谈维度建模、数据分析模型,何为数据仓库,与数据库的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128462

相关文章

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll