Apache Doris 在头部票务平台的应用实践:报表开发提速数十倍、毫秒级查询响应
作者|国内某头部票务平台 大数据开发工程师 刘振伟
近年来,文化产业在全球范围内快速发展,成为了经济增长的重要支柱。剧院票务作为文化产业的重要组组成部分,也得到了更多的关注。随着在线平台的发展,票务行业逐渐实现了数字化经营,企业可以通过在线销售、数字营销和数据分析等方式提升运营效率与用户体验。
基于此,国内某头部票务平台为了更好地处理和分析各剧院的票务销售、分销渠道、用户画像等数据,决定搭建实时数据仓库,并建设高效快捷的数据分析系统,将系统应用于常规业务报表、敏感数据监控以及票务推荐等应用。希望通过数据报表对剧院票务进行精细化地分析与处理,最终赋能营销策略、掌握市场需求,并达到票务销量增长。本文将详细介绍该票务公司引入 Apache Doris 实时数仓的搭建过程与报表开发场景下的应用实践,并分享在数据导入、数据开发、数据查询与系统运维等方面的收益成果。
简单易用:Apache Doris 基于 MySQL 协议,支持标准的 SQL 查询语法,使开发人员能够快速上手使用。Doris 的架构非常精简,整体部署只有 FE 与 BE 两种角色,并且支持纯净安装,使架构无需再依赖其他组件。
灵活配置监控:Doris 通过获取专门的 URL 来制定监控规则以达到优化集群状态和性能监控的目的。通过及时调整 FE、BE 角色的配置参数,始终确保数仓稳定快速地运行。
数据模型丰富:通过使用 Doris 自带的三种数据模型,可以有效地加速 ETL 开发过程。业务人员可以基于不同的数仓分层选用合适的模型来实现高效的数据导入,也可以根据不同的业务场景选择合适的模型进行报表开发。
查询性能更优:Doris 的物化视图和物化索引功能可以实现预计算效果,并在命中物化视图时实现快速响应,达到秒级或毫秒级的查询展示。此外,在进行大表 Join 时,Doris 还提供多种优化机制,进一步提升查询效率。
如何构建实时数仓
ODS 贴源层:主要存放未经处理的原始数据结构,与 MySQL 原系统保持一致,是数据仓库的准备区域。我们统一采用 Unique Key 数据模型,能够有效防止数据重复采集,减少任务失败。
DWD 明细层:存放维度建模的事实表,对生产数据进行清洗、统一格式、脱敏等,保存各业务过程中最小粒度的操作记录。同样在明细层我们主要采用了 Unique Key 模型,用相同的 Key 进行数据覆盖,实现行级别的数据更新。
DWS 汇总层:以明细层数据为基础,依据业务需求划分数据主题(如订单、用户等),将相同粒度数据进行关联合成宽表。该表使用 Unique Key 和 Aggregate Key 两种模型进行数据轻度汇总,为后续的业务查询和 OLAP 分析做准备。
ADS 应用层:基于以上三层数据存放各项指标统一结果。主要利用 Aggregate Key 模型进行高度自动聚合,为满足前端人员的具体分析需求,直接提供查询展现。
DIM 维表层:在 DIM 层中,主要存放剧院数据、项目数据、场次数据等。在实际应用中,维度数据会结合订单明细数据来进行使用。
引入 Flink CDC 全库同步
在 MySQL 数据库中对表管理配置数据进行动态更新。
利用 Flink,在 Job 任务中创建两个 CDC 捕获任务。其中一个数据流负责捕获变更数据,另一个广播流负责进行更新配置。
在 Sink 端配置所有全库的表,当表新增时,会触发广播流更新配置数据。( 在 Sink 端配置所有全库的表,只配置该表,暂时不用创建对应的表。)
作为剧院的管理后台,票务数据平台主要利用 Apache Doris 进行报表开发,提供所需数据分析,以帮助业务人员对剧院票务进行管理,提高票务销量。针对不同的报表场景,业务分析的侧重点有所不同,主要体现在:
统计报表:该报表是业务分析使用频率最高的报表,主要涉及 100 多家剧院的销售数据,包括分销渠道销售明细、销售员销售报表、演出明细报表、纠错报表、场次汇总报表等。
敏捷报表:针对特定活动进行报表开发,业务数据主要来自商业化运营,包括日项目数据汇总、周项目数据汇总、销售额数据汇总、GMV 月报数据、平台分销渠道数据、财务结算报表等。
数据分析:显示该剧院的运营情况,包括阅读会员日订单情况、销售收入情况、上座率、会员重复下单数量、用户画像分析等。
数据大屏:主要用于展示订单数据趋势、巨量销售趋势、提供数据视图。
根据以上报表场景的特点、使用范围与开发需求,我们选择 Doris 自带的多种数据模型进行高效的报表开发。在满足开发性能要求的同时,还实现了对实时数仓的低成本运维以及低成本存储。Doris 的引入为我们带来了以下具体应用收益:
全面覆盖 OLAP 报表,开发效率极大提升
Join + Rollup 强强联合,查询响应达毫秒级
在敏捷报表开发场景中,业务人员时常需要了解活动当天的数据,并在一定周期时间内形成汇总报表对活动进行复盘分析。因此不论是对开发报表的速度,还是对前端人员查询报表时的响应速度都有极高的要求。以 GMV 月报数据为例,我们需要在活动当月对对成交量进行统计汇总,并通过报表分析票务增速,评估活动效果。
支持多源异构数据,导数效率大幅提升
数据导入的效率与便捷性是衡量数据仓库最重要的因素之一。我们利用 Doris Insert Into 和丰富的内置导数方式,对本地数据、外部存储数据、Kafka 日志等数据源进行导入,并且在导入数据的同时还可以对其进行列映射、转换和过滤的操作,有效解决了早期导数过程中数据重复采集和不同数据源导致操作复杂性的问题。同时,Doris 对接入源脚本支持了半自动化代码的功能,我们只需要在配置表增加表名,即可快速接入数据,不再需要手工编写脚本,大大提高了导数效率。
架构链路清晰,实现低成本运维
集群优化:加强指标管理体系、数据质量监控体系,对 Doris 集群进行性能优化升级。 实时拉宽:强数仓血缘关系的管理,使准实时的数据拉宽升级为实时数据拉宽,达到数据高度一致与实时同步。 扩大 Doris 使用范围:逐步将实时数仓应用至票务推荐系统,基于 Doris 对用户购买行为和市场趋势推荐对应的产品,进一步提升票务销量。
为了让用户可以体验社区开发的最新特性,同时保证最新功能可以收获到更广范围的使用反馈,我们建立了 2.0 版本的专项支持群,欢迎广大社区用户在使用最新版本过程中多多反馈使用意见,帮助 Apache Doris 持续改进。
# 相关链接:
SelectDB 官网:
Apache Doris 官网:
Apache Doris Github:
https://github.com/apache/doris
开源技术论坛:
欢迎更多的开源技术爱好者加入 Apache Doris 社区交流群,携手成长,共建社区生态。Apache Doris 社区当前已容纳了上万名开发者和使用者,承载了 30+ 交流社群,如果你也是 Apache Doris 的爱好者,非常欢迎您的加入!