昨天结束的一场面试,面试官问了下我对数据仓库和数据湖的理解,根据之前的理解我说了下数据湖是数据仓库某些时候的缓存,然后面试官反问说我确定这个用词对吗?没理解到位,所以去了解之后再整体输出下我自己的理解。
先说下上面的答案,数据仓库和数据湖可以是互相独立存在的,不存在谁是谁的缓存一说,但是如果涉及到湖仓一体的时候,数仓是结构化的数据访问入口,而底层的数据湖是可以作为数仓的底层的存储支持。
要了解各个概念,我们从对应的背景出发,然后我们自己再给出比较严谨的定义。
数据库顾名思义就是我们存储结构化数据的存储系统,面向事务分析的存储系统,我们常见的库存,金钱的存储都是用数据库来实现的,少了一笔钱,多了10件库存啥的;但是,如果你要让数据库去分析为什么最近一个月的库存少了,订单数少了,那他就显得无能为力了。这个时候就需要我们的数据仓库出手了。
数据仓库是面向分析的存储结构化数据的一个存储系统,本质上还是为分析服务的,把客户对应的日志数据和业务数据先存储起来,然后经过各种加工到ads层,供最终的决策分析使用,支持复杂的大规模的数据分析。
那么数据湖又是什么呢?刚刚我们说到的数仓只能存储大量的结构化数据,但是企业发展的时间越来越长,数据量越来越多的情况下,不只是有结构化的数据,对于半结构化和非结构化的数据又该如何存储呢?这个时候就该我们的数据湖隆重登场了,他就是为存储历史的所有结构化,半结构化以及非结构化数据,历史所有的离线的,实时的,外部的,内部的数据而生的,而且是以成本比较低的对象存储为底座去进行数据存储的,支持近乎无限的扩展;
所以从上述两个概念来说,数据湖存储的数据量级和种类比数据仓库更广泛和多样,这样来说,是不是在企业里面我们可以就是用数据湖,不需要数据仓库都可以了;这个是不太行的,因为数据湖存储的是企业的数据的原始形态,不支持即席的数据查询,如果要查询某些指标数据,必须依赖于数据仓库提供的已经计算好的结构化的数据
但是兄弟们可能又会说了,这个是不是数据仓库的最底层可以依赖于数据湖的存储,数据仓库和数据湖用统一的存储底座,让数据仓库专注于处理批数据,而数据湖更多地处理事实的数据,而且数据仓库和数据湖之间的数据可以来回流动,如下所示:
这个就是最简单的湖仓一体的模型,其实湖仓一体说白了就是一种新型的数据架构,它结合了数据湖(Data Lake)和数据仓库(Data Warehouse)的优势。传统上,数据湖和数据仓库是分离的系统,数据湖用于存储结构化、半结构化和非结构化数据以及一些实时的数据,数据仓库主要用于存储和分析高度结构化的数据