百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

马蜂窝大数据架构详解:小白都能懂的数据仓库与数据中台

ccwgpt 2025-03-14 15:24 49 浏览 0 评论

最近几年,数据中台概念的热度一直不减。2018 年起,马蜂窝也开始了自己的数据中台探索之路。数据中台到底是什么?要不要建?和数据仓库有什么本质的区别?相信很多企业都在关注这些问题。作者:马蜂窝技术团队; 来源:帆软软件

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

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

我认为数据中台的概念非常接近传统数据仓库+大数据平台的结合体。它是在企业的数据建设经历了数据中心、数据仓库等积累之后,借助平台化的思路,将数据更好地进行整合与统一。

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

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

二、数据仓库核心架构

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

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

三、数据模型设计

3.1 方法选择

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

大数据环境下,业务系统数据体系庞杂,数据结构多样、变更频繁,并且需要快速响应各种复杂的业务需求,以上两种传统的理论都已无法满足互联网数仓需求。

在此背景下,马蜂窝数据仓库采取了「以需求驱动为主、数据驱动为辅」的混合模型设计方式,来根据不同的数据层次选择模型。

3.2 设计流程

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

3.3 主题分类

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

以马蜂窝订单交易模型的建设为例,基于业务生产总线的设计是常见的模式,即首先调研订单交易的完整过程,定位过程中的关键节点,确认各节点上发生的核心事实信息。模型是数据的载体,我们要做的就是通过模型(或者说模型体系)归纳生产总线中各个节点发生的事实信息。

订单生产总线:

如上图所示,我们需要提炼各节点的核心信息,为了避免遗漏关键信息,一般情况下抽象认为节点的参与人、发生时间、发生事件、发生协议属于节点的核心信息,需要重点获取。以下单节点为例,参与人包括下单用户、服务商家、平台运营人员等;发生时间包括用户的下单时间、商家的确认时间等;发生的事件即用户购买了商品,需要记录围绕这一事件产生的相关信息;发生协议即产生的订单,订单金额、约定内容等都是我们需要记录的协议信息。

在这样的思路下,总线架构可以在模型中不断添加各个节点的核心信息,使模型支撑的应用范围逐步扩展、趋于完善。因此,对业务流程的理解程度将直接影响产出模型的质量。

鉴于上述情况,在模型实现过程中,我们不能把各节点不同粒度的数据信息都堆砌在一起,那样会产生大量的冗余信息,也会使模型本身的定位不清晰,影响使用。

因此,需要输出不同粒度的模型来满足各类应用需求。例如既会存在订单粒度的数据模型,也会存在分析各个订单在不同时间节点状态信息的数据模型。

基于维度建模的思路,在模型整合生产总线各节点核心信息之后,会根据这些节点信息进一步扩展常用的分析维度,以减少应用层面频繁关联相关分析维度带来的资源消耗,模型会反范式冗余相关维度信息,以获取应用层的使用便捷。最终建立一个整合旅游、交通、酒店等各业务线与各业务节点信息的马蜂窝全流程订单模型。

四、数据仓库工具链建设

为提升数据生产力,马蜂窝数据仓库建立了一套工具链,来实现采集、研发、管理流程的自动化。现阶段比较重要的有以下三大工具:

1. 数据同步工具

同步工具主要解决两个问题:

  • 从源系统同步数据到数据仓库
  • 将数据仓库的数据同步至其他环境

下面重点介绍从源系统同步数据到数据仓库。

马蜂窝的数据同步设计支撑灵活的数据接入方式,可以选择抽取方式以及加工方式。抽取方式主要包括增量抽取或者全量抽取,加工方式面向数据的存储方式,是需要对数据进行拉链式保存,或者以流水日志的方式进行存储。

接入时,只需要填写数据表信息配置以及具体的字段配置信息,数据就可以自动接入到数据仓库,形成数仓的 ODS 层数据模型,如下:

2. 任务调度平台

我们使用 Airflow 配合自研的任务调度系统,不仅能支持常规的任务调度,还可以支持任务调度系统各类数据重跑,历史补数等需求。

别小看数据重跑、历史补数,这两项功能是在选择调度工具中重要的参考项。做数据的人都清楚,在实际数据处理过程中会面临诸多的数据口径变化、数据异常等,需要进行数据重跑、刷新、补数等操作。

我们设计的「一键重跑」功能,可以将相关任务依赖的后置任务全部带出,并支持选择性地删除或虚拟执行任意节点的任务:

  • 如果选择删除,这该任务之后所依赖的任务均不执行
  • 如果选择虚拟执行,则会忽略(空跑)掉该任务,后置的所有依赖任务还是会正常执行。

如下是基于某一个任务重跑下游所有任务所列出的关系图,选中具体的执行节点,就可以执行忽略或者删除。

3. 元数据管理工具

元数据范畴包括技术元数据、业务元数据、管理元数据,在概念上不做过多阐述了。元数据管理在数据建设起着举足轻重的作用,这部分在数仓应用中主要有 2 个点:

(1)血缘管理

  • 血缘管理可以追溯数据加工整体链路,解析表的来龙去脉,用于支撑各类场景,如:
  • 支持上游变更对下游影响的分析与调整
  • 监控各节点、各链路任务运行成本,效率
  • 监控数据模型的依赖数量,确认哪些是重点模型

如下是某一个数据模型中的血缘图,上下游以不同颜色进行呈现:

(2)数据知识管理

通过对技术、业务元数据进行清晰、详尽地描述,形成数据知识,给数据人员提供更好的使用向导。我们的数据知识主要包括实体说明与属性说明,具体如下:

五、总结

企业的数据建设需要经历几个大的步骤:

  • 第一步,业务数据化:顾名思义,一切业务都能通过数据反映,主要指的是将传统线下流程线上化;
  • 第二步,数据智能化:光有数据还不行,还需要足够的智能,如何通过智能化的数据支撑运营、营销及各类业务,这是数据中台当前解决的主要问题;
  • 第三步,数据业务化:也就是我们常说的数据驱动业务,数据不能只是数据,数据价值最大化在于可以驱动新的业务创新,带动企业增长。

目前大部企业目前都停留在第二个阶段,因为这一步需要足够夯实,才能为第三步打好基础,这也是为什么各大企业要投入很大成本到大数据平台、数据仓库乃至数据中台的建设中。

马蜂窝数据中台的建设才刚刚起步。我们认为,理想的数据中台需要具备数据标准化、工具组件化、组织清晰化这三个核心前提。为了向这一目标迈进,我们将建立统一、标准化的数据仓库作为当下数据中台的重点工作之一。

数据来源于业务,最终也将应用于业务。只有对数据足够重视,与业务充分衔接,才能实现数据价值的最大化。在马蜂窝,从管理层,到公司研发、产品、运营、销售等各角色,对数据非常重视,数据产品的使用人数占公司员工比例高达 75%。

大量用户的使用,驱动着我们在数据中台建设的路上不断前进。如何将新兴技术能力应用到数据仓库的建设,如何以有限的成本高效解决企业在数据建设中面临的问题,将是马蜂窝数仓建设一直的思考。

相关推荐

FastUI:用Python构建高性能React应用,告别JavaScript

在现代Web开发中,前后端分离已经成为主流趋势。然而,前端开发往往需要深入掌握JavaScript和各种框架,这对于许多Python开发者来说是一个不小的挑战。今天,我们要介绍一个革命性的UI框架——...

Python + Flet 开发网站的最佳数据库模块组合

对于使用Python和Flet开发网站并需要数据库支持的应用,以下是推荐的模块组合方案。方案一:SQLite+SQLAlchemy(推荐轻量级方案)**适用场景**:中小型应用、单用户或...

前端程序员应该往全栈方向发展吗?还是坚守前端?

这是一个非常经典且重要的问题,几乎每一位走到职业生涯十字路口的前端程序员都会思考。它没有一个绝对的“正确答案”,但我们可以从多个维度来分析,帮你找到最适合你的那条路。简单来说,这不是一个“要不要”的...

Python交互仪表盘工具:Panel 进阶学习路线图

Panel作为Python生态系统中最强大的交互式仪表盘工具之一,其学习曲线既平缓又深远。这里我将为您构建一个系统化的进阶学习框架,包含实战项目和关键学习节点。1.现代化Web集成开发1....

PuePy:将Python带入浏览器的革命性框架

在现代网络开发中,JavaScript无疑是主导地位的编程语言。但最近,随着WebAssembly和PyScript的崛起,Python的使用场景逐渐扩展到了前端开发领域。PuePy应运而生,作为一...

不容易!找到一个python的超简易网站搭建神器

作者:清香客来源:Python技术相信很多学习python的酱友们,大部分和我一样是为了提升工作效率,但是在提升自己的工作效率时,也会想着做同样工作的同事能不能也用上自己写的脚本(视工作环境而定)...

PyWebView:用 Python 构建桌面应用的神器

作为一个Python开发者,我一直希望能找到一种简便的方法来构建桌面应用,而不是去学习诸如Electron这种重度依赖JavaScript的技术栈。就在我为桌面应用开发寻找替代方案时,遇到...

Python Django框架中级教程:深入探索Django的核心功能

在Python的Web开发领域中,Django框架以其强大的功能和高效的开发模式占据着重要地位。对于已经掌握了Django基础的开发者来说,进一步深入学习中级知识能让我们开发出更复杂、更强大的Web应...

【Python程序开发系列】使用Flask实现前后端分离(案例)

这是我的第398篇原创文章。一、引言随着web开发的不断发展,前后端分离已成为越来越流行的架构设计。Flask是一个轻量级的Pythonweb框架,非常适合用于构建API,然后配合前端框...

每天一个Python库:Flask超轻量Web框架,灵活高效!

为什么要学Flask?Flask是一个「微型但强大的」Web框架:极简上手,几行代码即可跑起来灵活扩展,想加啥加啥(RESTful、JWT、数据库…)文档齐全,适合入门API开发或快...

Python个人量化投资系统:后台搭建

独立搞量化系统的程序员最烦啥?重复造权限管理的轮子绝对排前三。技术老手用Python+PearAdminFlask两天搭出量化后台,实测开源框架真能省下80%基础工作量。开源后台框架选对,一人项目...

python后端学什么(python后端好找工作吗)

在当今数字化的时代,Python后端开发成为了众多开发者追逐的热门领域。那么,想要在这个领域崭露头角,我们究竟应该学些什么呢?学习Python后端开发需要掌握全栈技术栈,涵盖从基础语法到分布式...

Motia:重新定义后端与智能体整合的未来平台

在AIagent技术飞速发展的今天,我们拥有了诸如Dify、RAGFlow、LangChain等一系列优秀平台。然而,随着场景复杂度增加,开发者正面临一个共同问题:后端越来越碎片化,Agen...

Python数据校验不再难:Pydantic库的工程化实践指南

在FastAPI框架横扫Python后端开发领域的今天,其默认集成的Pydantic库正成为处理数据验证的黄金标准。这个看似简单的库究竟隐藏着哪些让开发者爱不释手的能力?本文将通过真实项目案例,带您解...

Python Flask 建站框架实操教程(flask框架网页)

下面我将带您从零开始构建一个完整的Flask网站,包含用户认证、数据库操作和前端模板等核心功能。##第一部分:基础项目搭建###1.创建项目环境```bash#创建项目目录mkdirfl...

取消回复欢迎 发表评论: