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

数仓建模(二) 从关系型数据库到数据仓库的演变

        从传统数据库出发,帮助读者更好理解数仓的核心价值和基本结构

目录

先问

1. 什么是关系型数据库?

2. 为什么需要数据仓库?

第一部分:关系型数据库的核心特点与局限性

1.1 什么是关系型数据库?

1.1.1 关系型数据库的常见类型

1.2 关系型数据库的核心特点

1.2.1 数据结构化

1.2.2 强事务支持

1.2.3 高并发性

1.2.4 实时性

1.3 关系型数据库的局限性

1.3.1 查询性能瓶颈

1.3.2 存储和扩展能力有限

1.3.3 历史数据存储不足

1.3.4 多数据源整合困难

1.4 关系型数据库的应用场景

第二部分:数据仓库的定义与核心特性

2.1 什么是数据仓库?

2.2 数据仓库的四大核心特性

2.2.1 面向主题(Subject-Oriented)

2.2.2 集成性(Integrated)

2.2.3 非易失性(Non-Volatile)

2.2.4 时变性(Time-Variant)

2.3 数据仓库与关系型数据库的本质区别

2.4 数据仓库的核心作用

2.4.1 支持复杂分析

2.4.2 整合多源数据

2.4.3 存储历史数据

2.4.4 降低生产系统负载

2.5 数据仓库的基本架构

第三部分:关系型数据库与数据仓库的对比

3.1 设计目标的区别

3.2 数据结构的区别

3.3 数据操作类型的区别

3.4 查询性能的区别

3.5 数据量与存储能力的区别

3.6 数据分析场景的区别

总结

第四部分:数据仓库的核心价值

4.1 集成多源数据

4.2 支持大规模数据分析

4.3 提供历史数据支持

4.4 减轻生产系统负载

4.5 数据驱动决策支持

总结

第五部分:从关系型数据库到数据仓库的演变过程

5.1 初始阶段:依赖关系型数据库

5.2 过渡阶段:引入OLAP工具

5.3 成熟阶段:构建独立数据仓库

5.4 数据仓库的演变案例


先问

1. 什么是关系型数据库?

关系型数据库(Relational Database, RDB)是通过关系模型来组织和存储数据的数据库系统。它以表的形式呈现数据,广泛应用于事务处理(OLTP)场景中。

  • 关系型数据库使用SQL(结构化查询语言)作为主要交互工具。
  • 每个表都有唯一的主键,列表示字段,行表示记录。

示例:订单表

order_idcustomer_idproduct_idorder_dateamount
11015012023-01-01100
21025022023-01-02200

2. 为什么需要数据仓库?

随着企业数字化转型,数据量和复杂性逐年增加,传统关系型数据库逐渐暴露出以下不足:

  1. 难以支持复杂分析需求
    如多表关联、聚合查询、时间序列分析。
  2. 数据来源多样化
    数据分散在不同系统中(CRM、ERP、API等),难以统一管理。
  3. 历史数据存储受限
    传统数据库更多关注实时事务,缺乏对历史数据的支持。

因此,数据仓库应运而生,为企业提供一站式数据管理和分析平台。

第一部分:关系型数据库的核心特点与局限性


1.1 什么是关系型数据库?

关系型数据库(Relational Database, RDB)是一种使用二维表(表格)存储数据的数据库系统。每张表格由行(记录)和列(字段)组成,数据通过主键和外键进行关联,遵循严格的关系模型。关系型数据库最早由IBM的E.F. Codd于1970年代提出,并迅速成为现代数据存储的标准。

1.1.1 关系型数据库的常见类型
  • 单机数据库:适合小型系统或轻量级应用。
    • 示例:SQLite、Access。
  • 企业级数据库:支持高并发、海量数据存储和复杂查询。
    • 示例:MySQL、PostgreSQL、Oracle、SQL Server。
  • 分布式数据库:为解决大规模数据存储和查询而设计,能支持横向扩展。
    • 示例:TiDB、CockroachDB。

1.2 关系型数据库的核心特点
1.2.1 数据结构化

关系型数据库以结构化的方式存储数据,表的每列都有明确的数据类型(如整数、字符串、日期等),数据格式一致,便于查询和分析。

示例:订单表结构

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    product_id INT,
    order_date DATE,
    amount DECIMAL(10, 2)
);
1.2.2 强事务支持

关系型数据库通过ACID(原子性、一致性、隔离性、持久性)特性保障数据可靠性:

  • 原子性:事务中的所有操作要么全部执行,要么全部回滚。
  • 一致性:事务结束后,数据库始终处于合法状态。
  • 隔离性:事务之间的操作相互隔离,防止数据污染。
  • 持久性:事务提交后,数据永久保存。

事务操作示例

BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
1.2.3 高并发性

关系型数据库可以同时处理大量用户请求,适合高频率的事务操作(如银行转账、订单提交等)。

1.2.4 实时性

关系型数据库设计用于快速处理单一事务查询,通常响应时间在毫秒级。

1.3 关系型数据库的局限性
1.3.1 查询性能瓶颈
  • 复杂查询:高度规范化的表结构需要频繁的多表关联(JOIN),在海量数据中执行复杂查询性能较差。
  • 聚合计算:统计分析(如SUMAVGCOUNT)效率低,尤其是数据量较大时。
1.3.2 存储和扩展能力有限
  • 单机数据库受硬件限制,难以应对大规模数据存储需求。
  • 横向扩展(增加节点)能力不足,性能提升受限。
1.3.3 历史数据存储不足

关系型数据库通常仅存储当前状态,不适合追踪历史变化或支持时间序列分析。例如:

  • CRM系统可能只存储客户当前地址,无法查看客户地址的历史变化。
1.3.4 多数据源整合困难

企业数据分布在多个独立系统中(如ERP、CRM、日志系统),关系型数据库缺乏高效整合和管理多数据源的能力。


1.4 关系型数据库的应用场景

尽管存在局限性,关系型数据库仍是现代信息系统的基础,广泛应用于以下场景:

  1. 事务处理系统:如电商平台、银行系统。
  2. 轻量级分析:如简单的销售报表。
  3. 核心业务系统:如库存管理、订单管理。

第二部分:数据仓库的定义与核心特性


2.1 什么是数据仓库?

数据仓库(Data Warehouse, DW)是一种专门用于支持数据分析和商业决策的存储系统,与关系型数据库不同,它更注重历史数据的整合与分析优化。

数据仓库的目标

  1. 整合数据:从多个来源提取数据,形成统一视图。
  2. 存储历史数据:记录多年的数据快照,支持时间序列分析。
  3. 提升查询效率:通过优化的存储结构和查询引擎,快速响应复杂分析需求。

示例
一家零售企业的关系型数据库可能存储每日的订单数据,而数据仓库则会整合这些数据,与客户、产品等信息关联,分析全年的销售趋势。


2.2 数据仓库的四大核心特性
2.2.1 面向主题(Subject-Oriented)
  • 数据仓库围绕业务主题组织数据,例如“销售”、“客户”、“库存”等。
  • 示例:分析“某产品在过去一年中的销售趋势”,是典型的主题分析。
2.2.2 集成性(Integrated)
  • 数据仓库整合来自不同来源的数据(如ERP、CRM、第三方API),消除数据冗余,统一格式。
  • 示例:将不同系统中关于“客户”的数据整合为一个统一视图,消除重复记录。
2.2.3 非易失性(Non-Volatile)
  • 数据仓库中的数据通常为只读,历史数据不会被修改或删除。
  • 示例:销售数据一旦存储到仓库中,不会因为订单状态改变而被修改。
2.2.4 时变性(Time-Variant)
  • 数据仓库存储不同时间点的快照数据,支持时间序列分析。
  • 示例:分析“某客户在过去五年中的购买行为变化”。

2.3 数据仓库与关系型数据库的本质区别
特性关系型数据库(OLTP)数据仓库(OLAP)
目标支持高并发事务处理支持复杂查询与报表分析
数据结构高度规范化去规范化,优化查询性能
更新频率高频插入、更新数据定期加载后不易修改
数据量较小,通常为GB级别较大,可达TB或PB级别
查询复杂度简单查询为主多表关联、聚合分析居多

2.4 数据仓库的核心作用
2.4.1 支持复杂分析

数据仓库通过优化的存储结构和查询性能,为复杂分析提供支持。例如:

  • 销售额同比增长分析。
  • 客户行为预测。
2.4.2 整合多源数据

数据仓库能够整合来自ERP、CRM、日志系统的数据,形成全局视图。例如:

  • 合并客户基础信息(CRM)与购买行为(ERP)。
2.4.3 存储历史数据

通过保存多年的历史记录,支持业务趋势分析和长期决策。例如:

  • 分析过去五年的销售额变化,预测未来需求。
2.4.4 降低生产系统负载

通过将分析型查询从事务型数据库中分离出来,数据仓库减轻了生产系统的压力,同时提升查询效率。


2.5 数据仓库的基本架构
  1. 数据源层
    包括ERP、CRM、第三方API、日志文件等。
  2. ETL层
    • 提取(Extract):从数据源中提取原始数据。
    • 转换(Transform):清洗、标准化、格式化数据。
    • 加载(Load):将清洗后的数据加载到仓库。
  3. 数据存储层
    • 包括ODS(操作数据存储)、DWD(明细数据层)、DWS(汇总数据层)、ADS(应用数据层)。
  4. 展示层
    • 使用BI工具(如Tableau、Power BI)进行数据可视化。

第三部分:关系型数据库与数据仓库的对比

在信息系统中,关系型数据库和数据仓库是两种重要的数据存储工具,但它们的设计目标和应用场景截然不同。通过对比,我们可以更清楚地理解数据仓库的独特价值。


3.1 设计目标的区别
  1. 关系型数据库(OLTP)

    • 主要用于事务型处理,支持高并发的数据插入、更新和删除操作。
    • 设计的重点在于实时性和高效的事务操作,例如订单系统或银行转账系统。
  2. 数据仓库(OLAP)

    • 专为支持分析型查询和报表设计,优化复杂查询的性能。
    • 侧重于整合历史数据,支持趋势分析、预测模型等决策支持任务。

3.2 数据结构的区别
  1. 关系型数据库

    • 数据高度规范化,减少数据冗余。
    • 数据以多表的形式存储,通过外键实现关联。

    示例:订单系统的关系型数据库结构

    • 表1:orders(订单信息)
    • 表2:customers(客户信息)
    • 表3:products(产品信息)

    查询客户某段时间内的订单需要JOIN操作:

SELECT o.order_id, c.customer_name, p.product_name
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
JOIN products p ON o.product_id = p.product_id
WHERE o.order_date BETWEEN '2023-01-01' AND '2023-12-31';

数据仓库

  • 数据去规范化,优化查询性能。
  • 通常以星型模型或雪花模型的形式存储。

示例:数据仓库中的订单事实表

SELECT customer_name, product_name, SUM(order_amount) AS total_amount
FROM fact_orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY customer_name, product_name;
3.3 数据操作类型的区别
操作类型关系型数据库(OLTP)数据仓库(OLAP)
插入、更新、删除高频操作,事务实时处理很少修改,数据定期加载后只读
查询简单查询,多为单表操作复杂查询,多表关联和聚合分析为主

3.4 查询性能的区别
  1. 关系型数据库

    • 为事务型操作(INSERTUPDATE)优化,查询性能通常受限。
    • 复杂查询(如GROUP BYORDER BY)会导致性能瓶颈。
  2. 数据仓库

    • 为分析型查询设计,支持大规模数据处理。
    • 借助分区、索引、列式存储等技术,显著提升查询效率。

3.5 数据量与存储能力的区别
  1. 关系型数据库

    • 适合小规模数据存储(通常为GB级别)。
    • 数据量增长后,单机性能迅速下降。
  2. 数据仓库

    • 设计用于大规模数据存储(TB至PB级别)。
    • 支持分布式存储和并行计算,扩展性强。

3.6 数据分析场景的区别
场景关系型数据库(OLTP)数据仓库(OLAP)
查询客户订单查询当前订单状态分析客户年度消费趋势
销售数据获取单日销售数据分析月度销售额及同比增长
库存管理更新库存状态分析库存周转率

总结

关系型数据库和数据仓库在功能上各有侧重:

  • 关系型数据库专注于实时事务处理(OLTP),适合操作型任务。
  • 数据仓库面向历史数据分析(OLAP),为企业提供决策支持。

第四部分:数据仓库的核心价值

数据仓库不仅仅是一个存储工具,它在数据整合、性能优化和决策支持方面具有独特的价值。以下是数据仓库的核心价值与其在实际场景中的体现。


4.1 集成多源数据

现代企业的数据来源复杂,包括:

  • 内部系统(ERP、CRM、财务系统)。
  • 外部来源(第三方API、社会经济数据等)。
  • 半结构化或非结构化数据(日志文件、JSON数据等)。

数据仓库的作用

  • 将来自不同来源的数据清洗、格式化后存储在统一平台中,形成全局视图。
  • 示例:合并客户信息(CRM系统)与订单数据(ERP系统),分析客户生命周期价值(Customer Lifetime Value, CLV)。

4.2 支持大规模数据分析

数据仓库通过以下技术提升数据分析能力:

  1. 列式存储:按列存储数据,适合聚合查询和分析场景。
  2. 分区与索引:加速大规模数据查询,减少扫描行数。
  3. 并行计算:借助分布式架构,同时处理多个查询任务。
4.3 提供历史数据支持

数据仓库存储不同时间点的数据快照,支持时间序列分析。

  • 示例:分析某客户在过去五年的购买行为变化。
  • 实际场景:对比不同年份的销售额变化,评估市场趋势。
4.4 减轻生产系统负载

在没有数据仓库的情况下,分析型查询会直接作用于事务型数据库(OLTP),导致系统性能下降。数据仓库通过分担复杂查询任务,确保生产系统专注于核心事务操作。

4.5 数据驱动决策支持

数据仓库为企业提供了一个统一的分析平台:

  • 快速生成报表:例如年度财务报表。
  • 数据可视化:通过BI工具(如Power BI、Tableau)展现复杂数据。

总结

数据仓库的核心价值体现在以下几个方面:

  1. 统一整合多源数据:打破数据孤岛,形成全局视图。
  2. 优化查询性能:支持大规模数据分析与聚合计算。
  3. 支持历史分析:存储时间序列数据,揭示趋势和模式。
  4. 减轻生产系统压力:分担复杂查询任务,提高系统稳定性。

第五部分:从关系型数据库到数据仓库的演变过程

        数据仓库的基本架构由数据源、ETL流程、存储层和展示层组成,各层次相辅相成,支持数据的整合、存储和分析。从关系型数据库到数据仓库的演变经历了从简单事务处理到复杂分析支持的转变,为现代企业提供了强大的数据分析能力和决策支持基础。


5.1 初始阶段:依赖关系型数据库

在企业数字化初期,关系型数据库被广泛应用于数据存储和处理。然而,随着数据量的增长和分析需求的复杂化,关系型数据库逐渐暴露出以下问题:

  1. 性能瓶颈:复杂查询和多表关联导致查询速度变慢。
  2. 数据孤岛:不同系统的数据难以整合。
  3. 历史数据管理不足:难以存储和分析长期历史数据。

5.2 过渡阶段:引入OLAP工具

为弥补关系型数据库的不足,企业逐步引入OLAP工具(如ROLAP、MOLAP),提升分析能力。

  1. ROLAP(Relational OLAP)

    • 基于关系型数据库实现多维分析。
    • 优点:兼容关系型数据库。
    • 缺点:查询性能受限。
  2. MOLAP(Multidimensional OLAP)

    • 基于多维数据集实现分析。
    • 优点:查询速度快,适合固定报表需求。
    • 缺点:数据量大时存储效率低。

5.3 成熟阶段:构建独立数据仓库

随着数据分析需求的增加,企业逐渐构建独立的数据仓库:

  1. 采用去规范化模型,提升查询性能。
  2. 支持大规模数据分析,如时间序列、聚合分析。
  3. 整合多数据源,形成全局视图。

5.4 数据仓库的演变案例

案例:零售企业的数据仓库演变

  1. 初期使用关系型数据库存储订单数据,但分析速度慢,报表生成时间长。
  2. 引入OLAP工具,实现简单的销售分析,但无法整合其他来源数据(如网站点击数据)。
  3. 构建独立数据仓库,整合ERP、CRM、网站日志等多来源数据,支持多维度的销售趋势分析和客户行为预测。

下节预告:数仓建模三步走:需求分析、模型设计与数据加载


http://www.kler.cn/a/466783.html

相关文章:

  • [python3]Excel解析库-XlsxWriter
  • 图像超分辨新SOTA!南洋理工提出InvSR,利用大型预训练扩散模型图像先验来提高 SR 性能, 登上Huggingface热门项目。
  • python多张图片生成/合成gif
  • 微信开发工具git提交到码云
  • leetcode 面试经典 150 题:轮转数组
  • 读“2024 A16Z AI 应用精选清单”有感——2025AI执行力之年
  • 淘宝商品详情API返回值说明:Python爬虫代码示例
  • perf:对hutool的BeanUtil工具类做补充
  • 【51单片机零基础-chapter3:按键:独立按键|||附带常见C语句.逻辑运算符】
  • 中国科技产业化促进会深入深圳企业调研
  • gesp(C++一级)(17)洛谷:B4062:[GESP202412 一级] 温度转换
  • 在Linux系统中使用字符图案和VNC运行Qt Widgets程序
  • IDEA Plugins中搜索不到插件解决办法
  • 自动化测试常考的面试题+答案汇总(持续更新)
  • React 网络请求优化
  • CVSS漏洞评分系统曝出严重缺陷
  • 【源码+文档+调试讲解】“健康早知道”微信小程序
  • 生成对抗网络 (Generative Adversarial Network, GAN) 算法MNIST图像生成任务及CelebA图像超分辨率任务
  • 深入理解 Android 中的 ComponentInfo
  • Hive集群安装部署
  • Markdown中流程图的用法
  • 解决 HTML 表单输入框与按钮对齐问题
  • LeetCode 力扣 热题 100道(二十三)找到字符串中所有字母异位词(C++)
  • issue问题全解
  • 从摩托罗拉手机打印短信的简单方法
  • 深入 Redis:高级特性与最佳实践