随着 SnowFlake 技术和商业上的成功,数据分析行业越来越受重视,该领域的数据仓库和数据湖解决方案、产品、技术也成为业界讨论的热点。本文将通过分析数据仓库和数据湖,探讨底层的数据存储技术演进逻辑。


一、谈谈数据仓库(数仓)技术发展史

1.1 数仓定义

​数据仓库维基百科​​定义如下:

In computing, a data warehouse (DW or DWH), also known as an enterprise data warehouse (EDW), is a system used for reporting and data analysis and is considered a core component of business intelligence. DWs are central repositories of integrated data from one or more disparate sources. They store current and historical data in one single place that are used for creating analytical reports for workers throughout the enterprise

数仓是一种面向商务智能 (BI) 活动(尤其是分析)的数据管理系统,它仅适用于查询和分析,通常涉及大量的历史数据。在实际应用中,数仓中的数据一般来自应用日志文件和事务应用等广泛来源。


简单来说,企业几乎都需要数仓来分析数据、提高运行效率,市场空间巨大,Teradata、Oracle、Microsoft、AWS 等公司都在该领域赚得盆满钵满。


1.2 数仓发展史

  • 1960 年代,大学就启动研究项目研发“dimensions and facts”。
  • 1970 年代,Bill Inmon 定义术语 Data Warehouse。
  • 1983,Teradata 公司发明 DBC/1012 database computer 用于决策支持。
  • 1984~,大量数仓公司的企业软件、以及开源软件大行其道,被业界广泛认可。


二、聊聊数据湖技术发展史

2.1 数据湖定义

​数据湖维基百科​​​​定义如下:

A data lake is a system or repository of data stored in its natural/raw format, usually object blobs or files. A data lake is usually a single store of data including raw copies of source system data, sensor data, social data etc., and transformed data used for tasks such as reporting, visualization, advanced analytics and machine learning. A data lake can include structured data from relational databases (rows and columns), semi-structured data (CSV, logs, XML, JSON), unstructured data (emails, documents, PDFs) and binary data (images, audio, video).[3] A data lake can be established "on premises" (within an organization's data centers) or "in the cloud" (using cloud services from vendors such as Amazon, Microsoft, or Google).

数据湖就是原始的数据存储系统,可以是对象或者文件。它允许以任意存储规模,存放所有结构化、半结构化、非结构化数据。企业可以在自己的数据中心构建数据湖,也可以在云上构建数据湖。

简单来说,数据湖更多的强调数据的存储,强调的是扩展性、灵活生,而在云上还具有弹性和成本的优势。数仓和数据湖并非绝对的替换关系,某种情况下数仓可以使用数据湖的存储来存放数据


2.2 数据湖发展史

  • 2011 年,​​Pentaho​​ 公司 CTO James Dixon 发明“数据湖”属于,用于和data mart 进行对比。
  • 2016 年,​​Hortonworks​​​, Google, Oracle, Microsoft, ​​Zaloni​​​, Teradata, Impetus,​​Cloudera​​, MongoDB, 和 AWS 开始广泛使用数据湖概念进行宣传。​

从技术发展历史看,数仓像是产品的发展史,而数据湖则更像是解决方案、设计理念的发展史


三、数据仓库和数据湖的存储技术演进

3.1 数仓架构(TeraData 和 GreenPlum)

【数据湖专题1】漫聊从数据仓库到数据湖的存储技术演进_数据湖

数仓产品垂直优化特征明显,TeraData 就是软硬件一起售卖。如上图(A)​​TeraData 架构​​所示,每个 AMP(Access Module Processor) 节点管理本地盘,没有统一的数据存储池层,通过分布式调度技术对外提供数仓的分析服务。

Greenplum 也是分析引擎和存储整合优化,如上图(B)​​Greenplum 架构​​所示,每个 SegmentHost 管理本地盘,也没有统一的数据存储池层,通过 Master Host 实现并行调度对外提供数仓的分析服务。


3.2 数据湖架构(对象存储为底座)

【数据湖专题1】漫聊从数据仓库到数据湖的存储技术演进_对象存储_02

由于数仓领域通常会选择垂直优化设计方法,所以不同厂家的数仓很难互通,毕竟互通需要共同设计分层,并定义接口,需要架构解藕。因此,数仓很容易形成数据孤岛(Siloed Data)的问题,曾经遇到过某银行客户有 10+ 套数仓产品,来自不同商业厂家、开源软件服务商,相互之间数据无法打通,不能形成資源池,从而形成資源浪费,并且数仓间数据拉通分析效率极其低下。

开源系统 Hadoop 看到数仓没有資源池的问题,参考谷歌 GFS 设计 HDFS 資源池,并支撑 MapReduce、Hive、Spark 等计算引擎,一定程度上实现資源池的数据共享。但是,由于 HDFS 架构设计导致集群规模有限制,基于硬件机型、软件版本、运维能力,典型为 100PB,此时形成该容量下的数据孤岛,如图(C)的数仓和 Hadoop 的数据孤岛。

对象存储作为公共云久经考验的存储資源池,具有弹性、安全、无空间限制的显著特点。因此,对象存储非常适合作为数据湖的统一存储池,也就是数据湖的存储底座,而且不像 HDFS 采用类似文件系统方式挂载(mount),对象存储采用基于 RESTful API 提供服务,支持海量的客户端访问,从而各种计算引擎可以并发接入数据湖,包括数仓的软件(RedShift)也能接入,如图(D)的数据湖统一存储池。


四、数据分析的存储技术需求

随着数据的迅速增长,数据分析的需求也越来约迫切,对存储技术也有更多的需求。对象存储作为数据湖的统一資源池,如下的技术点满足数据分析需求,特别是公共云场景。


4.1 弹性扩展的資源池

  • 弹性的核心亮点,就是按需使用、按量付费,能够根据数据分析的业务需求快速写入数据,无需数据时也可以立即释放。如果采用自建 HDFS,还需要管理存储水位,运维集群,无法做到按需的弹性。
  • 扩展的核心亮点,则是无需考虑容量限制,可以任意写入。


4.2 多租户的安全防护体系

  • 完善的权限管理。ACL、RAM Policy、Bucket Policy 等特性,提供了丰富的权限控制,相较于 Hadoop 单一的 ACL 能力,可以实现 IP 访问源控制、标签过滤等数据分析应用急需的特性。
  • 灵活的 Access Point 功能。可以为每个数据分析应用分配访问域名,并绑定访问权限,让不同的应用访问不同的数据,实现细粒度隔离。


4.3 丰富的成本优化技术

  • 通过生命周期管理特性,根据数据访问热度自动分级存储到标准、低频、归档、深度归档等存储类型。相较于数仓的存储、HDFS 提供单一的存储类型,对象存储在成本优化上有更多的手段。
  • 数仓和数据湖存储价格分析。​​AWS Redshift 的存储价格​​​为 每 GB 0.024 USD,而 ​​AWS S3 的存储价格​​最高为 每 GB 0.023 USD(标准类型)、最低为 每 GB 0.00099 USD(深度归档),可见数据湖存储有领先的成本优化技术。


五、趋势和挑战

SnowFlake 作为数据分析领域的领头羊,基于云上的对象存储和虚拟机构建了技术底座,如下图(E)所示。

【数据湖专题1】漫聊从数据仓库到数据湖的存储技术演进_数据分析_03

底层的 Data Storage 基于对象存储构建,采用 VM(Virtual Machine) 构建 Cache 层保存热点数据,大量的数据分析公司都在采用该架构。但是随着数据互访的需求和容器化的发展,也带来如下的趋势和挑战。

  • 湖仓一体,存储資源池融合,数据互访。数仓和数据湖的一体化,关键是数据存储层共用,而且要满足不同计算应用的接口需求和性能需求,典型为既要支持 Object 接口、还有 HDFS 接口、甚至 POSIX 接口等。
  • 容器化推进 Cahce 服务化。基于 VM 的本地存储,很容易构建 Cache,但是容器化后再配置本地存储就丧失了容器的极致弹性能力,并且采用容器存储构建 Cache 带来更多的系统开销。因此,独立的 Cache 服务或者热点数据服务层,成为新趋势。


六、总结和思考

  • 数仓和数据湖并非技术替代,更像是从产品扩展到解决方案。一直以来数仓多为独立产品,而数据湖更多的是解决方案,特点是围绕对象存储作为数据湖存储底座,支撑丰富的数据分析引擎,包括数仓类引擎。
  • 数仓和数据湖一体化,本质是存储資源池融合、多接口访问能力。为了支持历史积累的分析引擎和未来的分析引擎,数据湖存储底座需要既支持 Object 接口、还支持 HDFS 接口、又要支持 POSIX 接口等。
  • 云原生推进高性能的热数据层服务化构建。云原生容器化,让原有在 VM 内构建 Cache 的架构迎来新挑战,通过构建服务化的高性能热数据层,让容器实现无状态的计算架构,真正享受快速灵活的极致弹性扩展。