第一节:数据库与数据仓库
引言
回顾数据管理的发展历程,我们大致走过了三个阶段:从最初的人工管理,到后来的文件系统管理,再到如今的数据库系统管理。数据库的出现,真正实现了数据的永久存储、有序组织和高效共享。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
不过,在数据库系统应用的早期,人们对数据的利用大多还停留在基础的“增删改查”(CRUD)层面。这当然没问题,事务处理是业务的基石。
但故事不会止步于此。当数据积累到一定规模,企业的需求自然会升级——他们不再满足于简单的记录和查询,而是希望从海量数据中进行统计、多维分析,甚至挖掘出更深层的商业价值。这时候,一个尴尬的局面出现了:传统的、为高频事务处理而设计的操作型数据库,在面对这类复杂的分析型任务时,往往力不从心。
正是这个矛盾,催生了数据仓库的诞生。仔细对比你会发现,传统的数据库与数据仓库,在存放的数据特征、性能要求、应用范围乃至面向的使用人员上,都存在着根本性的差异。
两种数据处理模式:操作性数据处理和分析型数据处理
在计算机系统中,数据处理主要遵循两种截然不同的模型:操作性数据处理和分析型数据处理。它们也常被称为联机事务处理(OLTP)和联机分析处理(OLAP)。
操作性数据处理:这指的是对数据库进行的日常联机操作,核心任务是完成数据的收集、整理、存储以及实时的增、删、改、查。这类工作通常由一线业务人员和基层管理人员来完成,追求的是高并发和快速响应。
分析型数据处理:这则是对数据的“再加工”过程。它通常面向海量的历史数据,进行复杂的查询、统计和分析,目的是从中提炼出有价值的信息和洞察,以支持决策。执行这类任务的主力,往往是数据分析师和中高级管理人员。
两类数据:操作型数据和分析型数据
两种处理模式,自然对应着两类特征迥异的数据。
操作型数据的特点是:细节的、当前的、可更新的、由事务驱动。每次操作涉及的数据量小,逻辑相对简单,通常针对的是单一数据单元。
分析型数据则恰恰相反:它是综合的、历史的、不可更新的、由分析驱动。一次分析操作往往需要扫描庞大的数据集合,计算复杂,关注的是数据整体的规律和趋势。
具体来说,操作型数据服务于企业的日常运营。数据库里存放的是最新的、细节的交易记录,任何修改都会实时更新。数据组织方式的核心目标,是优化事务处理的性能。
而分析型数据则支撑企业的管理决策。数据仓库中主要存放历史数据和经过汇总的综合数据。当操作集中在查询与分析时,为了提升效率,数据的组织会以便于快速检索和分析为首要目标,甚至可以容忍一定的数据冗余。
数据的局限性
传统数据库在操作性处理上取得了辉煌的成功,但在应对分析型需求时,却暴露出一系列瓶颈。
第一,数据是分散的。操作性处理通常只涉及单一部门或系统,导致企业数据被割裂在各个独立的操作型数据库中。而分析型操作恰恰需要跨部门、跨系统的全局视野。
第二,数据不一致问题。当试图从各个源头抽取数据时,你会发现“同名异义”、“异名同义”、计量单位不统一、字段长度不一致等问题比比皆是。在分析之前,必须花费大量精力进行数据清洗和预处理。
第三,历史数据缺失。分析决策离不开历史趋势的支撑,但操作型数据库为了保持性能,通常只保留短期的、当前的数据。
第四,数据粒度不匹配。分析关注宏观的综合指标,而操作型数据库存储的是最细颗粒度的交易记录。如果每次分析前都要对海量细节数据进行实时汇总,效率将极其低下。
正是为了克服这些困难,让两种数据处理模式都能高效运转,数据仓库的概念应运而生。
简单总结一下:数据库与数据仓库分工明确。数据库负责存放操作型数据,专注于事务处理,追求极致的处理效率;数据仓库则负责存放分析型数据,专注于决策支持,追求的是强大的分析与查询效率。两者功能不同,用途各异,其底层结构设计自然也大相径庭。
数据仓库的定义
那么,究竟什么是数据仓库?一个经典的定义是:数据仓库是一个面向主题的、集成的、不可更新的、随时间不断变化的数据集合,其根本目的是为了更好地支持企业或组织的决策分析。
这四个特征至关重要:面向主题、集成的、不可更新的、随时间不断变化的。
它的核心用途始终是:面向企业决策分析。
说得更直白些,数据仓库就是一种面向特定决策主题(如客户、产品)、从多个数据源集成数据、同时包含当前数据及不同粒度历史数据、并以查询和分析为主的数据库系统。它的存在,就是为了给企业决策提供一个坚实、统一的数据基石。
数据仓库数据的特征
下面,我们来逐一拆解数据仓库的四个核心特征。
1. 面向主题的
“面向主题”的数据组织方式,是相对于“面向应用”而言的。这可能是理解数据仓库的关键。
什么是面向主题?简单说,就是在更高的抽象层次上,对分析对象(即“主题”)进行完整、一致的数据描述。它能统一地刻画该主题所涉及的所有数据以及数据间的关联。
想象一下典型的企业信息化建设:通常会按采购、销售、库存、人事、财务等业务线来建立子系统,每个子系统背后都是一个独立的操作型数据库。这就是典型的“面向应用”。
如果现在想分析“顾客”这个主题,会发生什么?你需要从销售库、客服库、财务库等多个地方费力地抽取数据,还要面对之前提到的各种不一致问题。这显然无法满足高效、准确的分析需求。
而“面向主题”的思路则不同。它会根据分析的需要,将“顾客”这个分析对象所关联的所有数据,从企业各个角落收集、汇聚、整合起来,形成一个关于“顾客”的完整、一致、统一的数据集合。这里的主题,就是诸如“顾客”、“商品”、“供应商”这样的分析对象。
两者的侧重点截然不同:面向应用关心的是“做什么事”(处理什么业务),而面向主题关心的是“分析谁”(谁是被分析的对象)。面向主题的组织方式,其精髓就在于形成关于某个主题的一致性信息集合。
2. 集成的
既然数据仓库中的数据按主题组织,其来源必然是分散的各个操作性数据库、文件或网络。来源多,就意味着不一致:同名不同义、同义不同名、单位各异、格式不一……
因此,在数据进入仓库之前,必须经过一系列严格的预处理步骤:清洗、转换、去重。同时,数据还需要从“面向应用”的原始形态,转变为“面向主题”的新形态。不仅如此,数据仓库中不仅需要细节数据,更需要大量预先计算好的综合数据(如月度销售额、客户年消费总额),这就涉及对数据的聚合与计算。只有完成了这些步骤,数据才能被加载到数据仓库中。
3. 不可更新的
“不可更新”指的是,数据一旦进入数据仓库,通常就不允许再进行修改,而是会被长期保存。这是因为数据仓库中反映的是一段相当长时期内的历史快照,它记录的是过去某个时间点的状态。数据一般按照固定的周期(如每天、每周)进行刷新和追加加载。
4. 随时间不断变化的
数据仓库并非一成不变,它会随着时间推移不断增长。因为它需要定期从操作型数据库等数据源中,捕获新的数据(包括新的历史数据和新的综合数据),并将其加载进来。
同时,数据仓库中的数据也有生命周期,超过存储期限的旧数据会被移除。另外,仓库中存在大量按时间维度组织的综合数据(如日汇总表、月报表),这也要求系统必须按照固定的时间周期,定期执行数据的加载和汇总任务。
数据仓库的功能
总而言之,数据仓库本质上是一种经过特殊设计和处理的数据存储。它将来自不同源头、结构各异的异构数据进行清洗、转换、加工和集成,然后存储起来,专门服务于企业的分析查询需求,最终为决策制定提供强有力的数据支持。

转载于:https://www.cnblogs.com/zja001/p/10282276.html
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
SQL查询中如何计算某列的平均值_利用AVG聚合函数处理
SQL查询中如何计算某列的平均值:利用A VG聚合函数处理 说到计算平均值,A VG()函数通常是第一个跳入脑海的工具。但你真的了解它的全部脾性吗?它远不止是简单的“总和除以个数”。一个核心要点是:A VG()函数计算非NULL值的算术平均值,自动跳过NULL记录;整列全NULL时返回NULL,不可
mysql8.0索引跳跃扫描如何使用_优化联合索引非首列查询
MySQL 8 0 索引跳跃扫描:一个被误解的“优化捷径” 提到MySQL 8 0的索引跳跃扫描(Index Skip Scan),很多人的第一反应是:“终于可以不用管联合索引最左前缀原则了!” 但事实果真如此吗?先泼一盆冷水:它并非一个可以随意开关的“万能钥匙”,而是优化器在特定场景下才会动用的“
怎样在SQL查询中同时展示明细与合计行_使用UNION ALL连接聚合结果
怎样在SQL查询中同时展示明细与合计行?使用UNION ALL连接聚合结果 先说一个核心判断:直接用GROUP BY是无法同时显示明细和合计的,因为它会折叠原始行、丢失明细。必须用UNION ALL将明细查询与单行聚合查询拼接,并且要求字段数、类型、顺序严格一致,最后通过ORDER BY或辅助排序字
PHP 8环境下怎么处理SQL注入_使用原生预处理配合强类型声明
PHP 8 防 SQL 注入:strict_types=1 + 真实预处理 + 类型校验 在PHP 8环境下防范SQL注入,如果还停留在“用了PDO::prepare就万事大吉”的认知,那风险可就大了。真实情况是,必须将强类型声明、严格绑定逻辑与预处理语句三者结合,形成一个完整的防御链条。否则,数字
SQL中如何实现按比例抽样数据 ROW_NUMBER与百分比筛选
SQL中如何实现按比例抽样数据:ROW_NUMBER与百分比筛选 用 ROW_NUMBER() 做比例抽样为什么容易出错 很多朋友一上来就想用 ROW_NUMBER() OVER (ORDER BY NEWID()) 给全表编号,然后取前百分之几。这个思路听起来挺顺,但实际一跑就发现不对劲。问题出在
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

