数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。
早期系统采用关系型数据库来存放管理数据,但是随着大数据技术的兴起,人们对于多方面数据进行分析的需求愈加强烈,这就要求建立一个能够面向分析、集成保存大量历史数据的新型管理机制,这一机制就是数据仓库。
数据仓库通常存储来自不同源的数据,集成源数据以提供统一的视图。这些资源可以包括事务系统、应用程序日志文件、关系数据库等等。
数据仓库之父Bill Inmon在1991年出版的Building the Data Warehouse 一书中首次提出了被广为认可的数据仓库定义。Inmon将数据仓库描述为一个面向主题的、集成的、随时间变化的、非易失的数据集合,用于支持管理者的决策过程。这个定义有些复杂并且难以理解,针对定义中的关键词,我们分别来看看数据仓库所具备的特点。
随着当前大量信息化发展和电子设备产品普及,产生大量的照片、视频、文档等非结构化数据,人们也想通过大数据技术找到这些数据的关系。随之而来的数据湖就产生了。
数据湖的概念首次于2010年被James Dixon在其博客帖子(Pentaho, Hadoop, and Data Lakes | James Dixon’s Blog)中提及 :
如果将数据集市视为瓶装水的商店——经过清洁、包装和结构化以便于饮用——那么数据湖就是处于更自然状态的一大片水体。数据湖的内容从源头流入,填满湖,湖的各种用户可以来检查、潜入或取样。
维基百科对数据湖的定义是:数据湖(Data Lake)是一个以原始格式存储数据的存储库或系统,它按原样存储数据,而无需事先对数据进行结构化处理。一个数据湖可以存储结构化数据(如关系型数据库中的表),半结构化数据(如CSV、日志、XML、JSON),非结构化数据(如电子邮件、文档、PDF)和二进制数据(如图形、音频、视频)。
也就是说,数据湖中的数据在从源获取时不受数据结构的约束,在需要时应用“读取”模式来促进数据分析。数据湖的本质,是由“数据存储架构+数据处理工具”组成的解决方案,而不是某个单一独立产品。
数据湖具有以下特点:
数据仓库 | 数据湖 | |
---|---|---|
数据 | 来自事务系统、运营数据库和业务线应用程序的关系数据 | 来自 IoT设备、网站、移动应用程序、社交媒体和企业应用程序的非关系和关系数据 |
模式 | 写时模式,数据写入前已经定义好schema,更改schema成本较高 | 读时模式,数据在利用的时候再定义schema,灵活方便 |
使用思维 | 先有报表需求,根据报表确定数仓shcema,然后通过ETL过程将数据导入 | 并不需要根据需求来开发数据业务,数据集中存储,需要的时候再利用。保留了数据的完整性 |
存储容量 | 数据仓库对存储的数据更有选择性,一般比数据湖要小,但与传统数据库相比仍然很大 | 由于包含所有数据,通常是PB级别的 |
性价比 | 起步成本高,使用本地存储以获得最快查询结果 | 起步成本低,计算存储分离 |
产品形态 | 数据仓库可以是独立的标准化产品 | 数据湖则是一种架构,通常是围绕对象存储为“湖底座”的大数据管理方案组合 |
用户 | 结构化数据,使用非常方便,主要的使用对象是数据分析师、数据工程师、运营人员等等。 | 作为原始数据,非结构化数据的数据库,数据湖的主要使用对象是数据科学家。 |
从数据含金量来比,数据仓库里的数据价值密度更高一些,数据的抽取和Schema的设计,都有非常强的针对性,便于业务分析师迅速获取洞察结果,用与决策支持。
而数据湖更有一种“兜底”的感觉,甭管当下有用没有/或者暂时没想好怎么用,先保存着、沉淀着,将来想用的时候,尽管翻牌子就是了,反正都原汁原味的留存了下来。
数据湖虽然适合数据的存储,但又缺少一些关键功能,比如不支持事务、缺乏一致性/隔离性、不保证执行数据质量等,这样的短板决定了,让数据湖来承载读写访问、批处理、流作业是不现实的。而且,数据湖缺乏结构性,一旦没有被治理好,就会变成数据沼泽。
既然都是拿数据为业务服务,数据湖和数仓作为两大“数据集散地”,能不能彼此整合一下,让数据流动起来,少点重复建设呢?,于是,Databricks率先提出了湖仓一体(Data Lakehouse)的概念。
湖仓一体是一种结合了数据湖灵活性和数据仓库规范性优势的新范式,在基于数据湖的低成本存储上,实现与数据仓库中类似的数据结构和数据管理功能。
Data Lakehouse的概念是由Databricks提出的,其联合创始人兼首席执行官 Ali Ghodsi 说:“从长远来看,所有数据仓库都将被纳入数据湖仓,这不会在一夜之间发生——这些东西会共存一段时间——但这个官方的世界纪录清楚地证明,在价格和性能上,数据湖仓完胜数据仓库。”
现在大多数企业都还没有用到湖仓一体的新架构,他们要么选择了数据湖方案,要么选择了数仓方案。但大方向之下,特别是随着 AI 的兴起,完全纯数仓的二维关系表已经无法承接半 / 非结构化数据的处理,AI 引擎不可能只跑在纯数仓模型上。所以湖仓一体一定是未来的发展趋势。
Data Lakehouse的出现试图去融合数仓和数据湖这两者之间的差异,通过将数仓构建在数据湖上,使得存储变得更为廉价和弹性,同时lakehouse能够有效地提升数据质量,减小数据冗余。
在lakehouse的构建中,ETL起了非常重要的作用,它能够将未经规整的数据湖层数据转换成数仓层结构化的数据。
把数据湖和数据仓库集成起来只是第一步,还要把湖、仓以及所有其他数据处理服务组成统一且连续的整体,这就是Amazon Web Services提出的“智能湖仓”。
智能湖仓并非单一产品,它描述的是一种架构。
这套架构,以数据湖为中心,把数据湖作为中央存储库,再围绕数据湖建立专用“数据服务环”,环上的服务包括了数仓、机器学习、大数据处理、日志分析,甚至RDS和NOSQL服务等等。
大家“环湖而饲”,既可以直接操纵湖内数据,也可以从湖中摄取数据,还可以向湖中回注数据,同时环湖的服务彼此之间也可以轻松交换数据。
Amazon Web Services官方给出了智能湖仓的参考架构
最后引用《DataFunCon 2021》大会上的一张图片总结数仓、数据湖和湖仓一体之间区别。