数据堆栈系列 1:什么是数据堆栈,它与传统数据库有什么差异?

[复制链接]
发表于 2026-1-31 13:17:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
想象一下,你正站在一座巨大的堆栈前。这座堆栈不是用来存放平凡商品的,而是存储着海量的数据 - 这就是数据堆栈。在大数据期间,数据堆栈已经成为企业数据管理的焦点。但它毕竟是什么?又为什么云云紧张?让我们一起揭开数据堆栈的机密面纱,探索它与我们熟知的传统数据库有何差异。


  
什么是数据堆栈?

数据堆栈(Data Warehouse)是一个面向主题的、集成的、相对稳固的、反映汗青厘革的数据聚集,用于支持管理决定。这个界说来自被誉为"数据堆栈之父"的Bill Inmon。但这个界说大概对初学者来说有点抽象,让我们通过一个类比来更好地明白它:

想象你是一家大型超市的司理。天天,你的超市都会产生大量的买卖业务数据:贩卖记录、库存厘革、客户信息等。这些数据分散在差异的体系中:收银体系、库存管理体系、会员管理体系等。假如你想分析已往一年的贩卖趋势,大概猜测未来的库存需求,你须要从这些分散的体系中提取数据,然后举行整合和分析。这个过程大概既耗时又轻易堕落。

这时,数据堆栈就像是一个巨大的"数据超市",它将全部这些分散的、原始的数据网络起来,颠末洗濯、转换和整合,形成一个同一的、易于分析的数据聚集。在这个"数据超市"中,数据被构造成便于分析的情势,你可以轻松地举行各种复杂的查询和分析,而不会影响一样寻常业务体系的运行。
数据堆栈vs传统数据库:关键区别

固然数据堆栈和传统的关系型数据库(如MySQL、Oracle)都用于存储数据,但它们在计划目标、数据构造方式和使用场景上有着本质的区别。让我们通过一个表格来直观地比力它们的差异:
     特性    传统数据库    数据堆栈              紧张目标    支持一样寻常事故处理惩罚    支持决定分析          数据更新    频仍的及时更新    定期批量更新          数据模子    高度规范化    部分反规范化          查询范例    简朴、标准化的查询    复杂的分析性查询          数据范围    当前业务数据    汗青数据(通常凌驾多年)          数据粒度    细粒度(单条买卖业务)    多粒度(汇总和细节)          数据冗余    最小化    有筹划的冗余          优化重点    事故处理惩罚速率    查询性能         
                  让我们通过一个详细的例子来分析这些区别:            假设你正在管理一个在线书店。在传统的关系型数据库中,你大概有如许的表布局:
  1. -- 用户表
  2. CREATE TABLE users (
  3.     user_id INT PRIMARY KEY,
  4.     username VARCHAR(50),
  5.     email VARCHAR(100),
  6.     registration_date DATE
  7. );
  8. -- 书籍表
  9. CREATE TABLE books (
  10.     book_id INT PRIMARY KEY,
  11.     title VARCHAR(200),
  12.     author VARCHAR(100),
  13.     price DECIMAL(10, 2),
  14.     stock INT
  15. );
  16. -- 订单表
  17. CREATE TABLE orders (
  18.     order_id INT PRIMARY KEY,
  19.     user_id INT,
  20.     order_date DATE,
  21.     total_amount DECIMAL(10, 2),
  22.     FOREIGN KEY (user_id) REFERENCES users(user_id)
  23. );
  24. -- 订单详情表
  25. CREATE TABLE order_details (
  26.     order_id INT,
  27.     book_id INT,
  28.     quantity INT,
  29.     price DECIMAL(10, 2),
  30.     PRIMARY KEY (order_id, book_id),
  31.     FOREIGN KEY (order_id) REFERENCES orders(order_id),
  32.     FOREIGN KEY (book_id) REFERENCES books(book_id)
  33. );
复制代码
这种布局非常恰当处理惩罚一样寻常的买卖业务,如创建新订单、更新库存等。但是,假如你想分析已往一年的贩卖趋势,大概找出最受接待的作者,你大概须要编写复杂的SQL查询,而且大概会影响体系的性能。
相比之下,在数据堆栈中,数据大概会被构造成如许的情势:
  1. -- 销售事实表
  2. CREATE TABLE sales_fact (
  3.     date_key INT,
  4.     book_key INT,
  5.     customer_key INT,
  6.     store_key INT,
  7.     quantity_sold INT,
  8.     sales_amount DECIMAL(10, 2)
  9. );
  10. -- 时间维度表
  11. CREATE TABLE date_dim (
  12.     date_key INT PRIMARY KEY,
  13.     date DATE,
  14.     day_of_week VARCHAR(10),
  15.     month VARCHAR(10),
  16.     quarter INT,
  17.     year INT
  18. );
  19. -- 书籍维度表
  20. CREATE TABLE book_dim (
  21.     book_key INT PRIMARY KEY,
  22.     book_id INT,
  23.     title VARCHAR(200),
  24.     author VARCHAR(100),
  25.     genre VARCHAR(50),
  26.     publisher VARCHAR(100)
  27. );
  28. -- 客户维度表
  29. CREATE TABLE customer_dim (
  30.     customer_key INT PRIMARY KEY,
  31.     customer_id INT,
  32.     name VARCHAR(100),
  33.     email VARCHAR(100),
  34.     city VARCHAR(50),
  35.     state VARCHAR(50),
  36.     country VARCHAR(50)
  37. );
复制代码
这种布局被称为"星型模式"或"雪花模式",它是数据堆栈中常用的数据模子。在这种布局中:
      
  • 中心的"究竟表"(sales_fact)包罗了业务过程的度量值(如贩卖数目、贩卖金额)。  
  • 四周的"维度表"(date_dim, book_dim, customer_dim)包罗了形貌业务实体的属性。
这种布局使得复杂的分析查询变得简朴和高效。比方,要找出2023年每个月最脱销的前10本书,你可以如许查询:
  1. SELECT
  2.     d.month,
  3.     b.title,
  4.     b.author,
  5.     SUM(s.quantity_sold) as total_sold
  6. FROM
  7.     sales_fact s
  8.     JOIN date_dim d ON s.date_key = d.date_key
  9.     JOIN book_dim b ON s.book_key = b.book_key
  10. WHERE
  11.     d.year = 2023
  12. GROUP BY
  13.     d.month, b.title, b.author
  14. ORDER BY
  15.     d.month, total_sold DESC
  16. LIMIT
  17.     10
复制代码
这个查询在数据堆栈中可以快速实验,纵然是在包罗数百万或数十亿条记录的大型数据集上。而在传统的关系型数据库中,同样的分析大概须要复杂的多表毗连和子查询,实验起来大概须要很长时间。
数据堆栈的焦点特性


明白了数据堆栈与传统数据库的区别后,让我们深入探究数据堆栈的焦点特性。Bill Inmon在他的界说中提到了四个关键特性:面向主题的、集成的、相对稳固的、反映汗青厘革的。这些特性是什么意思呢?
      
  • 面向主题的(Subject-Oriented)
数据堆栈的数据是围绕企业的紧张主题(如客户、产物、贩卖)构造的,而不是围绕详细的应用步伐。这使得分析职员可以从多个角度来分析业务。
比方,在我们的在线书店案例中,我们大概有以下主题:

      
  • 客户分析  
  • 产物(册本)分析  
  • 贩卖分析  
  • 库存分析
每个主题都会包罗干系的全部数据,无论这些数据最初来自哪个体系。
      
  • 集成的(Integrated)
数据堆栈整合了来自多个源体系的数据,办理了数据不同等性的标题。这包罗定名约定的同一、度量单位的同一、编码布局的同一等。
比方,在差异的源体系中,性别大概被编码为:

      
  • 体系A: ‘M’/‘F’  
  • 体系B: ‘1’/‘0’  
  • 体系C: ‘Male’/‘Female’
在数据堆栈中,这些会被同一为一种表现方式,好比 ‘M’/‘F’。
      
  • 相对稳固的(Nonvolatile)
一旦数据被加载到数据堆栈中,就不会频仍更改。数据堆栈通常接纳批量更新的方式,而不是及时更新。这包管了数据的同等性,使得复杂的分析查询可以在一个稳固的数据集上实验。
      
  • 反映汗青厘革的(Time-Variant)
数据堆栈生存汗青数据,答应举行趋势分析和时间比力。每条数据通常都带偶尔间戳,使得我们可以看到数据随时间的厘革。
比方,在我们的书店数据堆栈中,我们大概会生存每本书天天的贩卖数据,如许我们就可以分析:

      
  • 某本书在差异时期的贩卖趋势  
  • 差异年份的脱销书对比  
  • 季候性贩卖模式等
这些焦点特性使得数据堆栈成为支持决定的抱负工具。让我们通过一个简朴的SQL示例来分析这些特性:
  1. -- 创建一个销售事实表,体现了面向主题、集成和时间变化的特征
  2. CREATE TABLE sales_fact (
  3.     date_key INT,
  4.     product_key INT,
  5.     customer_key INT,
  6.     store_key INT,
  7.     sales_amount DECIMAL(10, 2),
  8.     quantity INT,
  9.     cost_amount DECIMAL(10
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表