一、从定义来看
-
数据库,用来存储结构化的数据,数据库由多张表组成,每张表都有行列,是二维的。数据都是一行一行的插入到表中。
-
数据仓库,其实也是存储数据的,相对于数据库来说存储的数据量要更庞大。而且数据仓库多是用于决策分析的。
举个例子:
当我们注册一个账号的时候,后台数据库肯定有一张用户表,这张表假设有一个用户名字段和密码字段。当我们注册的时候,就会把信息一行一行的插入到表中。而当我们在前端登录的时候,就需要填写账号密码,这些数据就返回后台跟用户表进行比对,如果没错,就能登录,这就是数据库。数据库都是跟业务挂钩的,不同的业务会有不同的数据库。
由于数据库是跟业务挂钩的,那么每个业务功能就会对应有一个数据库表,比如登录功能就会对应有一个用户表。
但是当我们想统计用户登录数量最多在哪个时间段?单单一个用户表就无法得出结果。所以就需要重新设计数据库的表结构,增加不同的指标进行分析,这就需要使用数据仓库。数据仓库的表是依照业务需求进行设计的。
- 从导入数据的操作来看
1) 数据库:一定会对要插入的数据进行严格的检查,不满足要求不能插入。
2) 数据仓库:对插入的数据不会检查。Hive数据仓库会存储非常大量的数据,一次导入可能就是几百G,几十T,hive不检查是不想让导入的数据效率过于低下。
二、从整个流程架构来看
借用一张图来看看:
数据仓库是面向主题的,什么是主题?对应上面这张图就是分析OLAP阶段。其实就是为人做决策分析的。
数据仓库一般只做查询,不做修改。数据仓库的数据是由数据库中的数据抽取出来的。
因为数据仓库的每一个主题,不一定都只对应一个数据库,每个主题所需要的源数据可能分布在不同的数据库中,因此需要对数据库进行提取转换再存入到数据仓库。
对应上图来说:
源数据OLTP(数据库)收集存储各种数据,是底层的原始数据,通过ETL对数据进行抽取、转换、装载,放入到ODS层。
ODS层的功能:清洗垃圾数据,更改不能入库的格式为数仓支持的格式或优化后的格式。
通过sql、python等手段将数据进行整合、重定义,剔除数据冗余等,存放到EDW层。
根据业务需求,构建所需的指标,组建分析主题,存放到DM层。
构建面向一个一个不同主题进行分析OLAP,最后进行可视化。
三、实际就是OLTP和OLAP的区别
1、 OLTP(On-Line Transaction Processing),联机事务处理。针对具体业务在数据库联机的日常操作。
2、 OLAP(On-Line Analytical Processing),联机分析处理。针对主题历史数据进行决策分析。
数据库OLTP | 数据仓库OLAP |
---|---|
操作型 | 分析型 |
实体-关系(E-R)模型 | 星型模型或雪花模型 |
不停存储新数据 | 存储历史数据,不包含最近的数据 |
可更新数据 | 只读,只追加数据 |
面向事务 | 面向分析 |
数据量相对较小 | 数据量相对较大 |
举例:用户登录验证 | 举例:用户登录时间分析 |
.