Hive-day01 数据库和数据仓库
一、数据库、数据仓库概述
如今,随着诸如互联网以及物联网等技术的不断发展,越来越多的数据被生产出来-据统计,每天大约有超过2.5亿亿字节的各种各样数据产生。这些数据需要被存储起来并且能够被方便的分析和利用。
随着大数据技术的不断更新和迭代,数据管理工具得到了飞速的发展,相关概念如雨后春笋一般应运而生,如从最初决策支持系统(DSS)到商业智能(BI)、数据仓库、数据湖、数据中台等,这些概念特别容易混淆,本文对这些名词术语及内涵进行系统的解析,便于读者对数据平台相关的概念有全面的认识。
1.1 数据库
关系数据库本质上是一个二元关系,说的简单一些,就是一个二维表格,对普通人来说,最简单的理解就是一个Excel表格。这种数据库类型,具有结构化程度高,独立性强,冗余度低等等优点,一下子就促进了计算机的发展。
1.2 操作型数据库和分析型数据库
随着关系数据库理论的提出,诞生了一系列经典的RDBMS,如Oracle,MySQL,SQL Server等。这些RDBMS被成功推向市场,并为社会信息化的发展做出的重大贡献。然而随着数据库使用范围的不断扩大,它被逐步划分为两大基本类型:
操作型数据库
主要用于业务支撑。一个公司往往会使用并维护若干个操作型数据库,这些数据库保存着公司的日常操作数据,比如商品购买、酒店预订、学生成绩录入等;
分析型数据库
主要用于历史数据分析。这类数据库作为公司的单独数据存储,负责利用历史数据对公司各主题域进行统计分析;
那么为什么要"分家"?在一起不合适吗?能不能构建一个同样适用于操作和分析的统一数据库?答案是NO。一个显然的原因是它们会"打架"…如果操作型任务和分析型任务抢资源怎么办呢?再者,它们有太多不同,以致于早已"貌合神离"。
1.3 操作型数据库 VS 分析型数据库
因为主导功能的不同(面向操作/面向分析),两类数据库就产生了很多细节上的差异。这就好像同样是人,但一个和尚和一个穆斯林肯定有很多行为/观念上的不同。
接下来本文将详细分析两类数据库的不同点:
数据组成差别 - 数据时间范围差别
一般来讲,操作型数据库只会存放90天以内的数据,而分析型数据库存放的则是数年内的数据。这点也是将操作型数据和分析型数据进行物理分离的主要原因。
数据组成差别 - 数据细节层次差别
操作型数据库存放的主要是细节数据,而分析型数据库中虽然既有细节数据,又有汇总数据,但对于用户来说,重点关注的是汇总数据部分。
操作型数据库中自然也有汇总需求,但汇总数据本身不存储而只存储其生成公式。这是因为操作型数据是动态变化的,因此汇总数据会在每次查询时动态生成。
而对于分析型数据库来说,因为汇总数据比较稳定不会发生改变,而且其计算量也比较大(因为时间跨度大),因此它的汇总数据可考虑事先计算好,以避免重复计算。
数据组成差别 - 数据时间表示差别
操作型数据通常反映的是现实世界的当前状态;而分析型数据库既有当前状态,还有过去各时刻的快照,分析型数据库的使用者可以综合所有快照对各个历史阶段进行统计分析。
技术差别 - 查询数据总量和查询频度差别
操作型查询的数据量少而频率多,分析型查询则反过来,数据量大而频率少。要想同时实现这两种情况的配置优化是不可能的,这也是将两类数据库物理分隔的原因之一。
技术差别 - 数据更新差别
操作型数据库允许用户进行增,删,改,查;分析型数据库用户则只能进行查询。
技术差别 - 数据冗余差别
数据的意义是什么?就是减少数据冗余,避免更新异常。而如5所述,分析型数据库中没有更新操作。因此,减少数据冗余也就没那么重要了。
现在回到开篇是提到的第二个问题"某大公司Hadoop Hive里的关系表不完全满足完整/参照性约束,也不完全满足范式要求,甚至第一范式都不满足。这种情况正常吗?",答曰是正常的。因为Hive是一种数据仓库,而数据仓库和分析型数据库的关系非常紧密(后文会讲到)。它只提供查询接口,不提供更新接口,这就使得消除冗余的诸多措施不需要被特别严格地执行了。
功能差别 - 数据读者差别
操作型数据库的使用者是业务环境内的各个角色,如用户,商家,进货商等;分析型数据库则只被少量用户用来做综合性决策。
功能差别 - 数据定位差别
这里说的定位,主要是指以何种目的组织起来。操作型数据库是为了支撑具体业务的,因此也被称为"面向应用型数据库";分析型数据库则是针对各特定业务主题域的分析任务创建的,因此也被称为"面向主题型数据库"。
2.1 数据仓库概述
数据仓库之父比尔·恩门,1991年提出
数据仓库就是为了解决数据库不能解决的问题而提出的。那么数据库无法解决什么样的问题呢?这个我们得先说说什么是OLAP和OLTP。(重点)
2.2 OLTP和OLAP(重点)
2.2.1 OLTP
OLTP(OnLine Transaction Processing 联机事务处理) 。简单一些,就是数据库的增删查改。举个例子,你到银行,去取一笔钱出来,或者转账,或者只是想查一下你还有多少存款,这些都是面向“事务”类型的操作。这样的操作有几个显著的特点:
首先要求速度很快, 基本上都是高可靠的在线操作(比如银行), 还有这些操作涉及的数据内容不会特别大(否则速度也就相应的降低), 最后,“事务”型的操作往往都要求是精准操作,比如你去银行取款,必须要求一个具体的数字,你是不可能对着柜台员工说我大概想取400到500快之间吧,那样人家会一脸懵逼。
2.2.2 OLAP
这个东西又是上面发明关系型数据库的科德发明的。OLAP略有复杂,但这里我举一个简单的例子,大家就很容易理解了。
比如说,沃尔玛超市的数据库里有很多张表格,记录着各个商品的交易记录。超市里销售一种运动饮料,我们不妨称之为红牛。数据库中有一张表A,记录了红牛在一年的各个月份的销售额;还有一张表B,记录了红牛每个月在美国各个州的销售额:;甚至还有一张表C,记录了这家饮料公司在每个州对红牛饮料的宣传资金投入;甚至后来沃尔玛又从国家气象局拿到了美国各个州的一年365天每天的天气表D。好,最后问题来了,请根据以上数据分析红牛在宣传资金不超过三百万的情况下,什么季节,什么天气,美国哪个州最好卖?凭借我们的经验,可能会得出,夏季的晴天,在美国的佛罗里达,最好卖,而且宣传资金投入越高销售额应该也会高。可能这样的结论是正确的,但决策者想要看到的是确凿的数据结论,而不是“可能”这样的字眼。
科学是不相信直觉的,如果我们人工进行手动分析,会发现这个要考虑的维度实在太多了,根本无法下手,何况这才四五个维度,要是更多了怎么办?OLAP就是为了解决这样的问题诞生的,但糟糕的是,传统数据库是无法满足OLAP所需要的数据信息的。
2.3 数据仓库概念
2.3.1 概述
数据库的大规模应用,使得信息行业的数据爆炸式的增长,为了研究数据之间的关系,挖掘数据隐藏的价值,人们越来越多的需要使用OLAP来为决策者进行分析,探究一些深层次的关系和信息。但很显然,不同的数据库之间根本做不到数据共享,就算同一家数据库公司,数据库之间的集成也存在非常大的挑战(最主要的问题是庞大的数据如何有效合并、存储)。
1988年,为解决企业的数据集成问题,IBM的两位研究员(Barry Devlin和Paul Murphy)创造性地提出了一个新的术语:数据仓库(Data Warehouse)。看到这里读者朋友们可能要问了,然后呢?然后…然后就没然后了。就在这个创世纪的术语诞生了之后,IBM就哑火了,只是将这个名词作为市场宣传的花哨概念,并没有在技术领域有什么实质性的研究和突破。
然而,尽管IBM不为所动,其他企业却在加紧对数据仓库的研究和开发,大家都想在这个领域寻找到第一桶金。终于,到了1992年,后来被誉为“数据仓库之父”的比尔 恩门(Bill Inmon)给出了数据仓库的定义,二十多年后的今天他的定义依然没有被时代淘汰。我们来看看他是怎么定义的:数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理中的决策制定。
对于数据仓库的概念我们可以从两个层次予以理解:
首先,数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库; 其次,数据仓库是对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。
我们可以不用管这个定义,简单的理解,其实就是我们为了进行OLAP,把分布在各个散落独立的数据库孤岛整合在了一个数据结构里面,称之为数据仓库。
这个数据仓库在技术上是怎么建立的读者朋友们并不需要关心,但是我们要知道,原来各个数据孤岛中的数据,可能会在物理位置(比如沃尔玛在各个州可能都有自己的数据中心)、存储格式(比如月份是数值类型,但但天气可能是字符类型)、商业平台(不同数据库可能用的是Oracle数据库,有的是微软SQL Server数据库)、编写的语言(Java或者Scale等)等等各个方面完全不同,数据仓库要做的工作就是将他们按照所需要的格式提取出来,再进行必要的转换(统一数据格式)、清洗(去掉无效或者不需要的数据)等,最后装载进数据仓库(我们所说的ETL工具就是用来干这个的)。这样,拿我们上面红牛的例子来说,所有的信息就统一放在了数据仓库中了。
自从数据仓库出现之后,信息产业就开始从以关系型数据库为基础的运营式系统慢慢向决策支持系统发展。这个决策支持系统,其实就是我们现在说的商务智能(Business Intelligence)即BI。
可以这么说,数据仓库为OLAP解决了数据来源问题,数据仓库和OLAP互相促进发展,进一步驱动了商务智能的成熟,但真正将商务智能赋予“智能”的,正是我们现在热谈的下一代技术:数据挖掘。
2.3.2 数据仓库特点(重点)
面向主题
面向主题特性是数据仓库和操作型数据库的根本区别。
操作型数据库是为了支撑各种业务而建立。
而分析型数据库则是为了对从各种繁杂业务中抽象出来的分析主题(如用户、成本、商品等)进行分析而建立;所谓主题:是指用户使用数据仓库进行决策时所关心的重点方面,如:收入、客户、销售渠道等;所谓面向主题,是指数据仓库内的信息是按主题进行组织的,而不是像业务支撑系统那样是按照业务功能进行组织的。
集成性
集成性是指数据仓库会将不同源数据库中的数据汇总到一起;
具体来说,是指数据仓库中的信息不是从各个业务系统中简单抽取出来的,而是经过一系列加工、整理和汇总的过程,因此数据仓库中的信息是关于整个企业的一致的全局信息。
企业范围
数据仓库内的数据是面向公司全局的。比如某个主题域为成本,则全公司和成本有关的信息都会被汇集进来;
历史性
较之操作型数据库,数据仓库的时间跨度通常比较长。前者通常保存几个月,后者可能几年甚至几十年;
时变性
时变性是指数据仓库包含来自其时间范围不同时间段的数据快照。有了这些数据快照以后,用户便可将其汇总,生成各历史阶段的数据分析报告;
数据仓库内的信息并不只是反映企业当前的状态,而是记录了从过去某一时点到当前各个阶段的信息。通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
2.4 数据仓库的趋势
- 实时数据仓库以满足实时化&自动化决策需求;
- 大数据&数据湖以支持大量&复杂数据类型(文本、图像、视频、音频);
2.5 数据仓库的发展
数据仓库有两个环节:数据仓库的构建与数据仓库的应用。
早期数据仓库构建主要指的是把企业的业务数据库如ERP、CRM、SCM等数据按照决策分析的要求建模并汇总到数据仓库引擎中,其应用以报表为主,目的是支持管理层和业务人员决策(中长期策略型决策)。
随着业务和环境的发展,这两方面都在发生着剧烈变化。
- 随着IT技术走向互联网、移动化,数据源变得越来越丰富,在原来业务数据库的基础上出现了非结构化数据,比如网站log,IoT设备数据,APP埋点数据等,这些数据量比以往结构化的数据大了几个量级,对ETL过程、存储都提出了更高的要求;
- 互联网的在线特性也将业务需求推向了实时化,随时根据当前客户行为而调整策略变得越来越常见,比如大促过程中库存管理,运营管理等(即既有中远期策略型,也有短期操作型);同时公司业务互联网化之后导致同时服务的客户剧增,有些情况人工难以完全处理,这就需要机器自动决策。比如欺诈检测和用户审核。
总结来看,对数据仓库的需求可以抽象成两方面:实时产生结果、处理和保存大量异构数据。
2.6 数据仓库建设方法论
1)面向主题
从公司业务出发,是分析的宏观领域,比如供应商主题、商品主题、客户主题和仓库主题
2)为多维数据分析服务
数据报表;数据立方体,上卷、下钻、切片、旋转等分析功能。
3)反范式数据模型
以事实表和维度表组成的星型数据模型
数据仓库层的划分:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!