在美团点评酒旅事业群内,业务由传统的团购形式转向预订、直连等更加丰富的产品形式,业务系统也在迅速的迭代变化,这些都对数据仓库的扩展性、稳定性、易用性提出了更高要求。对此,我们采取了分层次、分主题的方式,本文将分享这一过程中的一些经验。
技术架构
随着美团点评整体的系统架构调整,我们在分层次建设数据仓库的过程中,不断优化并调整我们的层次结构,下图展示了技术架构的变迁。
我们把它们简称为三代数仓模型层次。在第一代数仓模型层次中,由于当时美团整体的业务系统所支持的产品形式比较单一(团购),业务系统中包含了所有业务品类的数据,所以由平台的角色来加工数据仓库基础层是非常合适的,平台统一建设,支持各个业务线使用,所以在本阶段中我们酒旅只是建立了一个相对比较简单的数据集市。
但随着美团原本集中的业务系统不能快速响应各个业务线迅速的发展与业务变化时,酒旅中的酒店业务线开始有了自己的业务系统来支持预订、房惠、团购、直连等产品形式,境内度假业务线也开始有了自己的业务系统来支持门票预订、门票直连、跟团游等复杂业务。我们开始了第二代数仓模型层次的建设,由建设数据集市的形式转变成了直接建设酒旅数据仓库,成为了酒旅自身业务系统数据的唯一加工者。由于系统调整初期给我们带来的重构、修改以及新增等数据处理工作非常大,我们采用了比较短平快的Kimball所提的维度建模的方式建设了酒旅数据仓库。
在第二代数仓模型层次运转一段时间后,我们的业务又迎来了一个巨大的变化,上海团队和我们融合了,同时我们酒旅自身的业务系统重构的频率相对较高,对我们的数仓模型稳定性造成了非常大的影响,原本的维度模型非常难适配这么迅速的变化。下图就是我们数仓模型当时所面临的挑战:
于是我们在ODS与多维明细层中间加入了数据整合层,参照Bill Inmon所提出的企业信息工厂建设的模式,基本按照三范式的原则来进行数据整合,由业务驱动调整成了由技术驱动的方式来建设数据仓库基础层。下图是该层次的一些描述:
使用本基础层的最根本出发点还是在于我们的供应链、业务、数据它们本身的多样性,如果业务、数据相对比较单一、简单,本层次的架构方案很可能将不再适用。
业务架构
下面介绍我们的主题建设,实际上在传统的一些如银行、制造业、电信、零售等行业里,都有一些比较成熟的模型,如耳熟能详的BDWM、FS-LDM、MLDM等等模型,它们都是经过一些具有相类似行业的企业在二三十年数据仓库建设中所积累的行业经验,不断的优化并通用化。但我们所处的O2O行业本身就没有可借鉴的成熟的数据仓库主题以及模型,所以,我们在摸索建设两年的时间里,我们目前总结了下面比较适合我们现状的七大主题(后续可能还会新增):
参与人主题
用户子主题:使用我们服务的所有人都是我们的用户,这是我们数据中至关重要的实体,也是我们数仓中非常重要的一个主题,对用户数据的系统化建设能够很好的帮助我们企业快速的发展,不断提高用户的体验、扩大我们的用户群。
BD子主题:通过BD的业务扩展,建立我们与商户之间的关系,让用户通过我们的服务访问到商户所发布的信息,对BD数据的建设,能够让我们的商户覆盖更加迅速、让我们和商户之间的关系更加紧密。
供应商子主题:供应商无论作为直签还是作为三方签约对象,对我们的业务发展都非常重要,通过对其数据的建设,可以让我们彼此双赢,通过我们的平台让双方的业务迅速发展。
流量主题
用户通过App或PC或I版、微信等等形式访问我们的服务,形成了对我们企业至关重要的流量,本主题也是比较具有互联网特色的主题,对于流量的数据建设能够让我们不断优化我们的产品、服务,给我们带来更多的流量、更快的扩张。
订单主题
当用户给我们带来流量的同时,他们也会产生交易,订单主题的独立建设以及其重要性我这里就不再赘述了,在所有的互联网以及传统公司里,该主题都是至关重要的。
POI主题
这个主题也具有我们自身的O2O特色,实际上这个主题与阿里的商家主题比较类似但又具备自己的特点,对于POI自身的重要性就不再过多介绍,通过对POI的数据集中建设能够让我们给POI带去更好的服务与回报。
产品主题
与POI强相关的就是产品了,如何让产品能够更加的贴近用户的需求以及产生更多的交易、流量,产品数据主题的建设及目的的意义就在于此。
运营主题
我们的业务发展将不再依靠粗暴的补贴式的扩张发展模式,需要依赖现在的精细化运营方式,运营数据主题的建设就有了非常强的必要性,通过数据进行精细化运营已经成为我们运营的主要发展趋势。
结算主题
实际上,这个主题在传统企业里面如银行、电信等等都是至关重要的,对我们酒旅而言,建设它的意义能够不断优化商家体验、提高财务结算与管理能力。
整体架构
我们的七个主题基本上都采用6层结构的方式来建设,划分主题更多是从业务的角度出发,而层次划分则是基于技术,实质上我们就是基于业务与技术的结合完成了整体的数据仓库架构。下面介绍一下具体的一些主题案例:
订单主题
在订单主题的建设过程中,我们是按照由分到总的结构思路来进行建设,首先分供应链建设订单相关实体(数据整合中间层3NF),然后再进行适度抽象把分供应链的相关订单实体进行合并后生成订单实体(数据整合层3NF),后续在数据整合层的订单实体基础上再扩展部分维度信息来完成后续层次的建设。
流量主题
流量主题与订单主题的区别是非常大的,它的数据来源具有一定的特殊性,我们的总体建设思路是总-分-总的思路,首先从总的日志数据中剥离出来属于酒旅事业群的数据,后续再从这些数据中分拆到各个具体的页面(可以适当补充些各个页面中所具有的B端信息,如POI详情页中增加POI品类信息),最后再把各个页面进行合并生成总的日志主题表(最终这张表会满足80%以上的相关流量统计需求)。
运营主题
运营主题与订单、流量主题相比也具有自身的特殊性,主要原因也在于其数据来源本身的特殊性,关于它的建设思路总体也是总-分-总,但我们本身的数据来源大多已经不是最底层的ODS数据,而是一些已经加工过的事实表或维度表,所以我们整体的建模原则基本上都是维度建模。
基于上面介绍的几个主题,我们实际上在做分主题的层次架构时也是基于本主题的业务、数据特点作为最终的判断条件,没有绝对的一种层次架构适用于所有的主题,需要综合各项要素来进行综合判断才能设计比较合适的层次架构。
作者简介
德臣,美团点评酒旅事业群数据仓库专家,2003年毕业于湖南大学,2015年加入美团,整体负责酒旅事业群的离线数据仓库、实时数据仓库建设。
酒旅数据仓库团队,结合酒旅业务的发展,灵活利用大数据生态链的相关技术,致力于离线数据仓库与实时数据仓库的建设,为业务提供多样化的数据服务。
最后发个广告,美团点评酒旅数据仓库团队长期招聘数据仓库、大数据开发、数据产品开发等方向的技术专家,有兴趣的同学可以发送简历到yangdechen#meituan.com。
- Author: 德臣
- Source: 美团点评技术团队
- Link: 美团点评酒旅数据仓库建设实践