设为首页 加入收藏

TOP

马蜂窝数据仓库的架构、模型与应用实践(一)
2019-10-09 20:03:56 】 浏览:106
Tags:马蜂窝 数据 仓库 架构 模型 应用 实践

(马蜂窝技术原创内容,公众号ID:mfwtech)

一、马蜂窝数据仓库与数据中台

最近几年,数据中台概念的热度一直不减。2018 年起,马蜂窝也开始了自己的数据中台探索之路。

数据中台到底是什么?要不要建?和数据仓库有什么本质的区别?相信很多企业都在关注这些问题。

我认为数据中台的概念非常接近传统数据仓库+大数据平台的结合体。它是在企业的数据建设经历了数据中心、数据仓库等积累之后,借助平台化的思路,将数据更好地进行整合与统一,以组件化的方式实现灵活的数据加工与应用,以更清晰的数据职能组织应对业务的快速变化,以服务的方式更好地释放数据价值的一种方式。

所以,数据中台更多的是体现一种管理思路和架构组织上的变革。在这样的思想下,我们结合自身业务特点建设了马蜂窝的数据中台,核心架构如下:

 

在中台建设之前,马蜂窝已经建立了自己的大数据平台,并积累了一些通用、组件化的工具,这些可以支撑数据中台的快速搭建。作为中台的另一大核心部分,马蜂窝数据仓库主要承担数据统一化建设的工作,包括统一数据模型,统一指标体系等。下面介绍马蜂窝在数据仓库建设方面的具体实践。

 

二、数据仓库核心架构

马蜂窝数据仓库遵循标准的三层架构,对数据分层的定位主要采取维度模型设计,不会对数据进行抽象打散处理,更多注重业务过程数据整合。现有数仓主要以离线为主,整体架构如下:

 

如图所示,共分为 3 层:业务数据层、公共数据层与应用数据层,每层定位、目标以及建设原则各不相同。

(1)业务数据层:包含 STG(数据缓冲层)与 ODS(操作数据层)两层,这两层数据结构与业务数据几乎一致。

  • STG:也叫数据准备区,定位是缓存来自 DB 抽取、消息、日志解析落地的临时数据,结构与业务系统保持一致;负责对垃圾数据、不规范数据进行清洗转换;该层只为 ODS 层服务;

  • ODS:操作数据层定位于业务明细数据保留区,负责保留数据接入时点后历史变更数据,数据原则上全量保留。模型设计依据业务表数据变更特性采取拉链、流水表两种形式。

(2)公共数据层:细分为 DWD(明细数据层)、DWS(汇总数据层)、DIM(公共维度层) 三层,主要用于加工存放整合后的明细业务过程数据,以及经过轻度或重度汇总粒度公共维度指标数据。公共数据层作为仓库核心层,定位于业务视角,提炼出对数据仓库具有共性的数据访问、统计需求,从而构建面向支持应用、提供共享数据访问服务的公共数据。

  • DWD:这一层是整合后的业务过程明细数据,负责各业务场景垂直与水平数据整合、常用公共维度冗余加工,以及明细业务标签信息加工;

  • DWS:汇总数据层按照主题对共性维度指标数据进行轻度、高度聚合;

  • DIM:对维度进行统一标准化定义,实现维度信息共享。

(3)应用数据层:DWA 层,主要用于各产品或各业务条线个性化的数据加工,例如商业化产品数据、搜索推荐,风控等。

 

三、数据模型设计

3.1 方法选择

数据模型是对现实世界数据特征的抽象,数据模型的设计方法就是对数据进行归纳和概括的方法。目前业界主要的模型设计方法论有两种,一是数据仓库之父 Bill Inmon 提出的范式建模方法,又叫 ER 建模,主张站在企业角度自上而下进行数据模型构建;二是 Ralph Kimball 大师倡导的维度建模方法,主张从业务需求出发自下而上构建数据模型。

大数据环境下,业务系统数据体系庞杂,数据结构多样、变更频繁,并且需要快速响应各种复杂的业务需求,以上两种传统的理论都已无法满足互联网数仓需求。在此背景下,马蜂窝数据仓库采取了「以需求驱动为主、数据驱动为辅」的混合模型设计方式,来根据不同的数据层次选择模型。主要从以下四个方面综合考虑:

1. 面向主题:采用范式模型理论中的主题划分方法对业务数据进行分类。

2. 一致性保证:采用维度模型理论中的总线结构思想,建立统一的一致性维度表和一致性事实表来保证一致性。

3. 数据质量保证:无论范式建模还是维度建模都非常重视数据质量问题,综合使用两个理论中的方法保证数据质量。

4. 效率保证:合理采取维度退化、变化维、增加冗余等方法,保证数据的计算和查询效率。

 

其中,ODS 选择保持贴源的范式模型,不做进一步模型抽象,只是从节省存储角度考虑,对该层采取拉链处理。DWD 与 DWS 基于对构建成本、性能,易用性角度的考虑,主要采取维度模型和一些宽表模型。宽表模型的本质是基于维度模型的扩展,对整个业务以及全节点信息进行垂直与水平方式整合;同时采用退化维度的方式,将不同维度的度量放入数据表的不同列中,实现业务全流程视图的构建,来提升宽表模型的易用性、查询效率,且易于模型的扩展。

  • 水平整合:水平整合就是将同一业务多数据源的数据整合到一个模型中,如果多数据源业务数据存在交集,则需要按照预设的业务规则选取一份保留,避免整合后的业务数据交叉。例如商品数据如果未进行主数据管理,不同业务线的商品信息就会散落在各业务系统表中,无法满足企业级的数据分析需求,这时就需要将这些商品数据按照业务主题进行水平整合。

  • 垂直整合:一次完整的业务流转通常要经历多个环节,各节点信息产生的时点不同、储存的数据表不同。垂直整合就是将同一业务中各关键节点信息整合至业务全流程宽表模型中。马蜂窝订单交易模型的构建就采用了这种方式,下文将进行详细介绍。

3.2 设计目标

马蜂窝数据仓库在模型设计上以准确性、易用性、及时性为设计目标,以满足业务人员对数据的多样需求。

  • 准确性:数据质量管控要在建模过程中落地,为数据准确性保驾护航。

  • 易用性:兼顾模型的可扩展性和可理解性。

  • 及时性:充分考虑模型的使用效率,提供方便快捷的数据查询和数据计算服务。

3.3 设计流程

马蜂窝数仓模型设计的整体流程涉及需求调研、模型设计、开发测试、模型上线四个主要环节,且规范设计了每个阶段的输出与输入文档。

 

  1. 需求调研:收集和理解业务方需求,就特定需求的口径达成统一,在对需求中涉及到的业务系统或系统模块所承担的功能进行梳理后进行表字段级分析,并对数据进行验证,确保现有数据能够支持业务需求。

  2. 模型设计:根据需求和业务调研结果对模型进行初步归类,选择合适的主题域进行模型存放;确定主题后进入数据模型的设计阶段,逻辑模型设计过程要考虑总线结构构建、模型规范定义等关键问题;物理模型设计以逻辑模型为基础,兼顾存储性能等因素对逻辑模型做的物理化的过程,是逻辑模型的最终物理实现.物理模型在一般情况下与逻辑模型保持一致,模型设计完成后需要进入评审与 Mapping 设计。

  3. 模型开发:就是对模型计算脚本的代码实现过程,其中包含了数据映射、脚本实现、测试验证等开发过程。单元测试完成后需要通知业务方一起对模型数据进行业务验证,对验证问题做收集,返回验证模型设计的合理性。

  4. 模型上线:完成验证后的模型就可以在线上生产环境进行部署。上线后需要为模型配置监控,及时掌握为业务提供数据服务的状况。我们还将模型的实体和属性说明文档发布给仓库数据的使用者,使模型得到更好地应用。

3.4 主题分类

基于对目前各个部门和业务系统的梳理,马蜂窝数据仓库共设计了 4 个大数据域(交易、流量、内容、参与人),细分为 11 个主题:

 

以马蜂窝订单交易模型的建设为例,基于业务生产总线的设计

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇SQL With As 用法 下一篇MySQL学习——操作自定义函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目