维度建模已死?

2022-04-14 09:07:21 浏览数 (1)

编译自:https://blog.devgenius.io/learn-from-googles-data-engineers-dimensional-data-modeling-is-dead-68f6c2cb3fb0

这篇文章的观点可谓惊人:维度数据建模已死!(Dimensional Data Modeling is Dead)。

维度模型是数据仓库领域大师Ralph Kimball 所倡导,以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。详细内容可参考维基百科:https://en.wikipedia.org/wiki/Dimensional_modeling

只要是做数据仓库的同学都或多或少了解和实践过维度数据建模,在大银行、运营商等传统领域,维度数据建模更是其数据分析和建模的核心理念。感兴趣的同学可以读下《数据仓库工具箱:维度建模权威指南》和阿里巴巴的《大数据之路》,从这两本书可以了解到维度数据建模的理论和工程实践。

但是在 Learn from Silicon Valley’s Data Engineers: Dimensional Data Modeling is Dead文章中,作者却认为维度数据建模已经死亡,不再具备实践价值。

维度数据建模起源于数据仓库权威专家 Ralph Kimball,虽然很多人说维度数据建模有很多种优点,但是作者认为其核心的优点有三个:优化计算、按主题组织数据和优化存储。这些优点在历史上推动了维度数据建模在数据仓库领域的发展,吸引了很多人,但是站在此时此刻(2022年),我们需要重新审视为什么维度数据建模会存在和它是如何从根本上满足我们的需求的。

在很早的时候,存储成本是很高的。

1960 年代,磁带平均容量仅为 2.3MB,而每 GB 价格却高达 1791英镑,1970 年代流行的软盘价格更是高达 2-3 万英镑/GB。伴随着硬盘技术的发展及普及,存储价格迅速下降,1990 年代,单位 GB 存储价格跌至 100 英镑以下,CD-ROM 价格仅为 6.03 英镑/GB。21 世纪开始,DRAM、闪存进入人们视野,成为主流存储方式,存储价格进一步下降,单位 GB 存储价格平均为0.5-0.8 英镑。

在这种情况下,数据仓库组织数据的方式必须尽可能节约存储成本,所以同样的数据尽可能只存储一次。这也就有了数据库规范化”(Database normalization),使用类似指针的方式,同一个标识符指向不同的表里的相同的值,通过这种方式完成重复数据的删除和存储优化。这样就可以实现只存储一次字段值的描述,并将其连接到要描述的表中,而不是每次在表中存在一个维度时都存储一个字段值的描述。

同样的,那个时代计算成本也很高。

1985 年最快的计算机以高达 3200 万美元的价格输出了 1.9 gigaflops 的计算能力。作为参考,当今一些最快的计算机输出了超过 400 petaflops 的计算能力,即 20,000 倍以上的计算能力。

在这个背景下,减少操作数量和每个操作的平均复杂性可以节约大量的成本。例如,可以不需要分析长而复杂的字符串值来关联记录,而是可以将一个整数分配给唯一的实例,并关联这些整数而不是字符串。

为了完成这些优化,数据被组织成面向主题的数据模型。一种常见的面向主题的模型是星型模式。

这个模型带来的好处就是:事实表包含物理索引且易于检索的值。检索成本更高的值存储在维度表中,可以有选择地检索,从而节省处理成本。

那么为什么维度数据建模会消失呢?
  1. 存储几乎是免费的(Storage has become almost free):每月 1GB 的 AWS 云存储成本仅为 2 美分。将宽表分解为星形或雪花模式的回报很差。虽然存储可能会减少存储表所需的总空间的 95%,但如果以每年几美分的价格计算,这个成本并不是一个考虑因素。
  2. 计算成本低(Compute is inexpensive):随着云架构的出现,计算很容易扩展,并且请求额外的资源来应用到长时间运行的查询变得很容易。
  3. 大多数用户难以理解维度模型(Dimensional models are difficult for average users to understand):作为数据工程师,我们可能会查看数据模型并直观地理解它们,但最终受益于我们维护的数据系统的用户几乎普遍更喜欢以他们熟悉的格式查看数据;Excel之类的表格。教授简单的“SELECT”、“FROM”、“WHERE”比描述维度模型、它们存在的原因以及如何连接表以检索值要容易得多。
  4. 模型维护成本高(Dimensional models are costly to maintain):添加到源系统的新列不消耗任何集成资源来维护,而将新列或源系统集成到数据模型中相对耗时。虽然近年来新的数据建模工具使集成变得更容易,但如果每次将新列添加到源表时都没有调整数据模型,最终用户通常无法使用新列。
那么数据建模的未来是什么呢?

作者给出的答案是data lakes and data lakehouses

数据湖(data lakes)提供更好的最终用户体验,维护成本低,并且不需要额外的工程资源来构建。数据湖最近的成功表明,计算和存储资源不再因略微减少而受益,但可用性的提高已被重新发现为数据生态系统的重大整体提升。相反,与维度模型相关的维护成本可以专门用于为业务创造快速价值。

The recent success of data lakes show that compute and storage resources that no longer benefit from being marginally reduced, and increased usability has been re-discovered as a major overall uplift to the data ecosystem.

我的观点

与作者不同,我认为不应该单纯的从存储和计算成本去看待维度数据建模,维度数据建模给公司最大的好处是数据规范化。执行数据规范化,虽然公司付出了不少的维护成本,但是让数据“井井有条”起来了。数据湖虽然方便,但是因为没有规范,很容易变成“数据沼泽”。从这一点来看,维度数据建模不会像作者宣称的那样“已死”,而是会继续存留在传统领域。

正如文章里所言,数据湖因其易用性,也依然会受到很多工程师和业务人员的青睐。在业务规模不大,或者不严谨的情况下,数据湖远远胜于维度数据建模。

0 人点赞