零基础也能看懂!数据仓库与数据库的这几个问题,你能回答出来吗

1. 数据库和数据仓库有什么区别?
2. 某大公司Hadoop Hive里的关系表不完全满足完整/参照性约束 , 也不完全满足范式要求 , 甚至第一范式都不满足 , 这种情况正常吗?
3.Oracle会在三年之内被代替吗?为什么?
如果您不能五秒内给出答案 , 那么本文应该是对您有帮助的 。

零基础也能看懂!数据仓库与数据库的这几个问题,你能回答出来吗

文章插图
 
 
数据库的"分家"随着关系数据库理论的提出 , 诞生了一系列经典的RDBMS , 如Oracle , MySQL , SQL Server等 。这些RDBMS被成功推向市场 , 并为社会信息化的发展做出的重大贡献 。然而随着数据库使用范围的不断扩大 , 它被逐步划分为两大基本类型:
1. 操作型数据库
主要用于业务支撑 。一个公司往往会使用并维护若干个数据库 , 这些数据库保存着公司的日常操作数据 , 比如商品购买、酒店预订、学生成绩录入等;
2. 分析型数据库
主要用于历史数据分析 。这类数据库作为公司的单独数据存储 , 负责利用历史数据对公司各主题域进行统计分析;
那么为什么要"分家"?在一起不合适吗?能不能构建一个同样适用于操作和分析的统一数据库?
答案是NO 。一个显然的原因是它们会"打架"......如果操作型任务和分析型任务抢资源怎么办呢?再者 , 它们有太多不同 , 以致于早已"貌合神离" 。接下来看看它们到底有哪些不同吧 。
操作型数据库 VS 分析型数据库
零基础也能看懂!数据仓库与数据库的这几个问题,你能回答出来吗

文章插图
 
因为主导功能的不同(面向操作/面向分析) , 两类数据库就产生了很多细节上的差异 。这就好像同样是人 , 但一个和尚和一个穆斯林肯定有很多行为/观念上的不同 。
接下来本文将详细分析两类数据库的不同点:
1. 数据组成差别 - 数据时间范围差别
一般来讲 , 操作型数据库只会存放90天以内的数据 , 而分析型数据库存放的则是数年内的数据 。这点也是将操作型数据和分析型数据进行物理分离的主要原因 。
2. 数据组成差别 - 数据细节层次差别
操作型数据库存放的主要是细节数据 , 而分析型数据库中虽然既有细节数据 , 又有汇总数据 , 但对于用户来说 , 重点关注的是汇总数据部分 。
操作型数据库中自然也有汇总需求 , 但汇总数据本身不存储而只存储其生成公式 。这是因为操作型数据是动态变化的 , 因此汇总数据会在每次查询时动态生成 。
而对于分析型数据库来说 , 因为汇总数据比较稳定不会发生改变 , 而且其计算量也比较大(因为时间跨度大) , 因此它的汇总数据可考虑事先计算好 , 以避免重复计算 。
3. 数据组成差别 - 数据时间表示差别
操作型数据通常反映的是现实世界的当前状态;而分析型数据库既有当前状态 , 还有过去各时刻的快照 , 分析型数据库的使用者可以综合所有快照对各个历史阶段进行统计分析 。
4. 技术差别 - 查询数据总量和查询频度差别
操作型查询的数据量少而频率多 , 分析型查询则反过来 , 数据量大而频率少 。要想同时实现这两种情况的配置优化是不可能的 , 这也是将两类数据库物理分隔的原因之一 。
5. 技术差别 - 数据更新差别
操作型数据库允许用户进行增 , 删 , 改 , 查;分析型数据库用户则只能进行查询 。
6. 技术差别 - 数据冗余差别
数据的意义是什么?就是减少数据冗余 , 避免更新异常 。而如5所述 , 分析型数据库中没有更新操作 。因此 , 减少数据冗余也就没那么重要了 。
现在回到开篇是提到的第二个问题"某大公司Hadoop Hive里的关系表不完全满足完整/参照性约束 , 也不完全满足范式要求 , 甚至第一范式都不满足 。这种情况正常吗?" , 答曰是正常的 。
因为Hive是一种数据仓库 , 而数据仓库和分析型数据库的关系非常紧密(后文会讲到) 。它只提供查询接口 , 不提供更新接口 , 这就使得消除冗余的诸多措施不需要被特别严格地执行了 。


推荐阅读