老姜: 首先,需要对数据仓库的基础知识做一个简单介绍,帮助你扫清基础知识的盲区。
小白: 好的。
数据仓库(Data Warehouse,DW或DWH)是企业存储数据的集成中心,其目的是构建面向下游分析决策的集成化数据环境,通过系统化的方式,对数据的质量、成本、效率进行有效的管控,为企业分析决策提供有力支持。
数据仓库对于企业的价值主要体现在以下几个方面。
其一,完成数据集成。 企业采集的数据源往往是多渠道、多类型的,数据仓库不生产数据,而是实现各方数据的统一汇总,为下游分析决策打下重要基础。
其二,把控数据质量。 数据仓库可以有效避免同一数据多方采集所造成的数据差异及错误,通过统一的数据口径,有效地把控数据质量。
其三,提升数据效率。 数据仓库可以满足开发的快捷统一、问题的高效排查,减少沟通成本,提升数据生成效率。
数据仓库,根据其自身属性,主要表现为以下几个特点,如图3-1所示。
图3-1 数据仓库的特点
数据仓库中的数据,是按照一定的主题逻辑组织而成,这里的主题并非一成不变,而是随着业务的变化而变化,如用户、活跃、消费、订单等。这点与传统的数据库有很大的差别,传统数据库的思想是面向应用层,各个业务是相互独立的;而数据仓库是从烦琐的业务中,站在更高的角度,设定主题模块,通过主键进行关联。
数据仓库中的数据来源往往是多种多样的,通过将各种分散、独立的数据源进行抽取、转化、加载,保障数据仓库内数据的一致性。在数据进入仓库前,需要经过内容整合,将原始数据中的字段命名、单位、格式等进行统一。
数据进入仓库后,底层数据的存储周期一般都很长,并且很少会更新,整体数据内容相对稳定。在日常的数据应用过程中,也仅对数据进行查询,而非增加、删除、修改。
数据仓库涵盖了业务历史数据,可以反映过往的经营状况,并且随着业务的迭代,仓库的数据也会随时更新,满足业务长期分析需要。其历史变化性主要体现在以下三个方面。
其一,数据存储周期较长。
其二,数据不但可以映射当前的业务情况,同样可以反映历史情况。
其三,数据随时间而增加,携带时间属性。
数据仓库的属性及特点并非一成不变,而是随着数据仓库的发展而不断优化,下面,我们来看看数据仓库的演化之路。
数据仓库的发展,根据其技术架构可以划分为四个阶段,分别为传统数据仓库架构→Lambda数据仓库架构→Kappa数据仓库架构→混合数据仓库架构,如图3-2所示。
图3-2 数据仓库的发展
数据仓库概念形成初期,主要是为了支持下游的报表及多维分析,并在架构上与OLTP业务系统解耦,减少相互之间的影响。在架构上,根据数据的处理流程,可划分为多个层次,对数据进行不同层次的加工处理,如图3-3所示。
图3-3 数据处理流程层次
· 数据采集层: 通过前端、后端、第三方采集等方式,获取与业务相关的底层数据。
· 数据仓库层: 数据仓库的核心环节,通过多个层次的处理加工,实现数据的可用性,其中主要涵盖四个阶段,分别为ODS层、DWD层、DWS层、ADS层,会在下面的章节中进行详细介绍。
· ETL层: 通过抽取、转化、加载流程,将采集到的各方零散、分散的数据整合到一起,存入数据仓库中。
· 数据应用层: 数据仓库的输出应用层,将加工好的数据,用于下游的数据查询、输出分析、数据可视化等场景,为产品输出有价值的业务结论。
传统数据仓库架构可以满足大多数离线数据的建模与分析,但是在业务分析场景中,很多时候,除了天级输出的离线数据外,还需要秒级输出的实时数据,用于满足即时分析或实时策略调整,如推荐策略、大促分析等。因此,需要一套能够同时支持离线和实时的数据仓库架构,在这样的背景下,Lambda数据仓库架构应运而生。
Lambda数据仓库架构是由Storm的作者Nathan Marz提出的一种在处理大规模数据量时,同时解决流处理和批处理的数据架构,丰富下游的应用场景。通过批处理部分,解决数据的全面性、准确性;通过流处理部分,解决数据的低延迟、高吞吐。Lambda数据仓库架构如图3-4所示。
图3-4 Lambda数据仓库架构
Lambda架构的核心处理主要涵盖离线数据处理(批处理)、实时数据处理(流处理)以及数据融合。
· 离线数据处理(批处理): 通过对历史数据的处理,一般为天级响应,将数据加工成可用于下游分析的样式。由于是基于过往一段时间的数据处理,因此数据的完整性、准确性均有所保障。离线处理一般采用Hadoop等框架进行计算。
· 实时数据处理(流处理): 通过对即时增量数据的处理,一般为秒级响应,能够保障数据的实时性,但由于数据并非全量,因为完整性和准确性,会有所降低。实时处理一般采用Spark、Flink等框架进行计算。
· 数据融合: 将处理完的离线数据及实时数据进行融合,输出到指定位置进行存储,供下游分析应用。
Lambda架构的优势和劣势主要体现在以下几个方面。
【优势】
· 架构清晰: 批处理的对象是离线全量数据,数据不易变更且稳定性强,架构相对简洁;流处理的对象是实时数据,因为是增量数据处理,流程相对复杂。通过此种方式,将两种处理流程分开,一方面分清架构职责;另一方面解耦数据,当遇到问题时,减少问题穿插,提高排查效率。
· 容错率高: 实时流数据会定期写入批处理层,批处理会定期将涵盖最新实时流的数据重新全面计算,即便流处理过程中存在一些问题,也可以通过批处理重新计算而得以修正。
【劣势】
· 口径问题: 由于离线分析和实时分析走的是两套架构逻辑,因此很可能出现数据不一致的情况,会给应用方带来困扰。
· 成本较高: Lambda的两种处理方式有很多相似的逻辑,但是却需要维护两套代码,一套用于批处理,另一套用于流处理,因此维护成本比较高。
Lambda需要维护两套相同逻辑的框架,导致重复开发成本较高。很多人就开始思考,是否有一套框架,可以将批处理和流处理融合到一起,缩减其中的成本。
Kappa架构是由LinkedIn的前首席工程师杰伊·克雷普斯(Jay Kreps)提出的一种架构思想,算是真正意义上的流批一体处理方式,该方式在Lambda架构的基础上剔除了批处理流程,仅留下流处理层,通过消息队列的方式保留历史数据回溯的能力。也正因为如此,Lambda架构的实时数据处理代码和批数据处理代码,只需要保留一套即可。
当流任务代码发生变动,需要回溯历史数据时,原先的任务保持不变,新增一个任务,从消息队列中获取历史数据,计算并存入数据表中。待新任务完成后,停止原流计算任务,并将原有任务结果进行覆盖,整体流程如图3-5所示。
图3-5 Kappa数据仓库架构
Kappa架构的优势和劣势主要体现在以下几个方面。
【优势】
· 成本较低: Kappa相比Lambda架构成本较低,主要体现在以下几个方面。其一,计算资源消耗开销少,只有流处理,仅针对新任务运行作业;其二,开发成本低,仅需要开发、测试、上线一套代码,无须冗余;其三,运维成本低,仅需要维护一套体系。
· 减少合并操作: 无须进行批处理和流处理的数据合并,避免了其中可能存在的差异问题。
【劣势】
· 依赖中间件缓存能力: 在使用消息队列时,如Kafka,由于其将数据先存储于内存当中,然后落盘到仓库,往往会导致数据丢失,因此,对于中间件的缓存能力有较高的要求。
当前很多公司的实际数据仓库架构中,往往同时借鉴了Lambda架构和Kappa架构的核心思想,形成混合型数据仓库。汲取不同架构的优势环节,并从企业的现实情况出发,设计符合业务的数据仓库架构。
在日常工作中,我们往往会接触一些数据仓库相关的概念名词,这里列举几个常见的概念进行讲解。
数据库是面向事物的处理系统,通过联机操作,对数据记录进行增、删、查、改等操作。数据库的本质为一个二元关系,通俗来讲,类似Excel中的行列格式,具有结构化程度高、独立性强、冗余性低等特点。作为数据管理的主要手段,常用于操作性处理,也被称为联机事务处理(On-Line Transaction Processing,OLTP)。
关系型数据库理论的提出,诞生了一批经典的关系型数据库管理系统(RDBMS),如MySQL、SQL Server、Oracle等。而这批RDBMS随着被逐步推向商业化市场应用,根据应用方向,又被划分为操作型数据库、分析型数据库。
· 操作型数据库: 侧重于对日常业务的支持。企业会根据不同的业务模块,创建多种数据库,用于业务的日常数据存储,如用户活跃、消费订单、领取积分等。该类型数据库往往存储周期较短(一般90日以内)、数据存储粒度较细、查询数据量相对较小。
· 分析型数据库: 侧重于对业务历史数据的分析。其特性与操作型数据库有所差异,将企业的历史数据单独存储,数据存储周期相对较长(一般数年)、数据存储粒度既有明细数据也有汇总数据、查询数据量相对较大但频率较低。
数据库与数据仓库并非替代关系,而是各有侧重点,其核心特点对比如表3-1所示。
表3-1 数据仓库与数据库对比
数据仓库之父Bill Inmon讲过一句话:“IT经理面对的最重要的问题就是到底先建立数据仓库还是先建立数据集市。”由此可见,数据仓库与数据集市关系密切。
数据集市可以理解为面向主题的小型数据仓库,其内容根据业务划分成各类主题,相比数据仓库,会更聚焦某个领域,而非全局。其目的是满足特定部门人员的数据需求,并将制订数据抽取出来,生成面向决策者的数据Cube。
数据集市根据数据源类型,可划分为独立数据集市和非独立数据集市。
· 独立数据集市: 该类数据集市自身拥有源数据库及数据采集框架。
· 非独立数据集市: 该类数据集市没有自身的源数据库,依赖数据仓库。为了预防数据风险,将数据仓库下游表按照主题分散到各集市中,供特定部门人员使用。
数据集市与数据仓库的对比如表3-2所示。
表3-2 数据集市与数据仓库对比
Pentaho首席技术官James Dixon提出了“数据湖”的概念,数据湖用于存储企业内各种类型数据,可用于存取、加工、传输及分析,并通过下游数据的交互集成,实现数据的企业级应用。
数据湖可支持多种类型的数据存储,其中主要涵盖结构化数据、半结构化数据、非结构化数据。
· 结构化数据: 传统关系型数据库行列结构数据。
· 半结构化数据: 日志文件、XML、JSON、HTML、CSV等。
· 非结构化数据: 文档、图像、音频、视频等。
数据湖相对数据仓库,其特点主要体现在表3-3所示的几个方面。
表3-3 数据仓库与数据湖对比
随着企业数据量级的激增,数据的分析能力及综合管理能力,成了传统数据仓库技术的短板。在如今竞争激烈的外部环境下,企业在做分析决策之前,除了自身生产的数据外,还需要获取更为宏观的外部市场信息。在这样的背景下,分析的侧重点也发生了一些转变,主要体现在以下几个方面。
其一,从描述分析向预测分析的转变。
其二,从单主题分析向跨主题分析的转变。
其三,从离线分析向实时分析的转变。
其四,从被动分析向主动分析的转变。
其五,从结构化分析向多类型分析的转变。
在此基础上,“数据中台”的概念被提上了历史的舞台。数据中台不是一套软件,而是将一系列数据组件有机地融合到一起,通过企业自身的数据基础、业务形态,对中台的能力方向进行定义。一般而言,企业的中台模式大同小异,但会随着业务的特点进行调整。数据中台涵盖了一整套数据处理流程,核心模块包括数据采集、数据存储、数据计算、数据服务、分析应用、数据治理等。
数据中台相对数据仓库,其特点主要体现在表3-4所示的几个方面。
表3-4 数据仓库与数据中台对比
通过本节的学习,希望你可以对数据仓库的基础概念有一个初步的认知,了解其在企业中的定位。