关于join:亿级大表毫秒关联荔枝微课基于Apache-Doris-统一实时数仓建设实践

本文导读: Apache Doris 助力荔枝微课构建了标准的、计算对立的实时数仓平台,目前 Apache Doris 曾经撑持了荔枝微课外部 90% 以上的业务场景,整体可达到毫秒级的查问响应,数据时效性实现 T+1 到分钟级的晋升,开发效率更是实现了 50% 的增长,满足了各业务场景需要、实现降本提效,深得十方融海各数据部门高度认可。 作者: 陈城,数据中台组组长 深圳十方融海科技有限公司成立于 2016 年,是一家数字职业在线教育头部企业,业务涵盖“数字职业技能课程、常识分享平台「荔枝微课」、智慧教育解决方案「女娲云教室」”,推出了多类数字素养与数字技能课程服务,助力用户在数字时代实现技能进阶与职业进阶。2016年上线荔枝微课,已倒退成为国内头部常识分享平台。2021年上线女娲云教室,实现了“教学练”一体化模式,填补了国内在线教学与实操脱轨的空白。 业务介绍荔枝微课隶属于深圳十方融海科技有限公司,是一个收费应用的在线教育平台。荔枝微课领有海量的常识内容,包含直播视频、录播视频、音频等多种形式。 通过技术和数据的赋能,推动荔枝微课继续翻新,也为微课平台方和合作伙伴在视频的翻新和销售方面提供了更强劲的反对。在业务经营过程中咱们须要对用户进行全方位剖析,高效为业务赋能。数据平台旨在集成各种数据源的数据,整合造成数据资产,为业务提供用户全链路生命周期、实时指标剖析、标签圈选等剖析服务。 晚期架构及痛点 晚期架构选用的是 Hadoop 生态圈组件,以 Spark 批计算引擎为外围构建了最后的离线数仓架构,基于 Flink 计算引擎进行实时处理。从源端采集到的业务数据和日志数据将分为实时和离线两条链路: 在实时局部,业务库数据通过 Binlog 的形式接入,日志数据应用 Flume-Kafka-Sink 进行实时采集,利用 Flink 将数据计算写入到 Kafka 和 MySQL中。在实时数仓的外部,恪守数据分层的实践以实现最大水平的数据复用。在离线局部,利用 Sqoop 和 DataX 对全量和增量业务库中的数据进行定时同步,日志数据通过 Flume 和日志服务进行采集。当不同数据源进入到离线数仓后,首先应用 Hive on Spark/Tez 进行定时调度解决,接着依据维度建模通过 ODS、DWD、DWS、ADS 层数据,这些数据存储在 HDFS 和对象存储 COS 上,最终利用 Presto 进行数据查问展现,并通过 Metabase 提供交互式剖析服务。同时为了保障数据的一致性,咱们会通过离线数据对实时数据进行定期笼罩。问题与挑战: 基于 Hadoop 的晚期架构能够满足咱们的初步需要,而面对较为简单的剖析诉求则显得爱莫能助,再加上近年来,荔枝微课用户体量一直回升,数据量呈指数级回升,为了更好的为业务赋能,进步用户应用体验,业务侧对数据的实时性、可用性、响应速度也提出了更高的要求。在这样的背景下,晚期架构裸露的问题也越发显著: 组件繁多,保护简单,运维难度十分高数据处理链路过长,导致查问提早变高当有新的数据需要时,牵一发而动全身,所需开发周期比拟长数据时效性低,只可满足 T+1 的数据需要,从而也导致数据分析效率低下技术选型通过对数据规模及晚期架构存在的问题进行评估,咱们决定引入一款实时数仓来搭建新的数据平台,同时心愿新的 OLAP 引擎能够具备以下能力: 反对 Join 操作,可满足不同业务用户灵便多变的剖析需要反对高并发查问,可满足日常业务的报表剖析需要性能强悍,能够在海量数据场景下实现疾速响应运维简略,缩减运维人力的投入和老本的收入,实现降本提效对立数仓构建,简化繁琐的大数据软件栈社区沉闷,在应用过程中遇到问题,可迅速与社区取得联系基于以上要求,咱们疾速定位了 Apache Doris 和 ClickHouse 这两款开源 OLAP 引擎 ,这两款引擎都是当下应用较为宽泛、口碑不错的产品。在调研中发现, ClickHouse 对 Join 能力的反对较为个别,而咱们在大多数业务场景中都须要基于明细数据进行大数据量的 Join,同时 ClickHouse 不反对高并发,这也与 Apache Doris 造成显明的比照,Apache Doris 多表 Join 能力强悍,高并发能力优异,齐全能够满足咱们日常的业务报表剖析需要。除此之外,Apache Doris 能够同时反对实时数据服务、交互数据分析和离线数据处理多种场景,并且反对 Multi Catalog ,能够实现对立的数据门户,这几个特点都是咱们外围思考的几个能力。 ...

May 11, 2023 · 2 min · jiezi

关于join:技术分享-咬文嚼字之驱动表-outer表

作者:胡呈清 爱可生 DBA 团队成员,善于故障剖析、性能优化,集体博客:https://www.jianshu.com/u/a95...,欢送探讨。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 什么是驱动表? 什么是 outer 表和 inner 表? outer 表等同于驱动表吗? 在MySQL中这个问题的脉络MySQL的 join 算法:Nested-Loop 和其变种算法 Block Nested-LoopMySQL8.0.18 引入的 hash join 其实能够算是对 Block Nested-Loop 的优化(MySQL8.0.20 之前 explain 输入显示的还是 Block Nested Loop,须要用 explain format=tree 能力看到应用了 hash join),直到 MySQL8.0.20 删除了 Block Nested-Loop,hash join 正式上位。 Nested-Loop 算法:外循环和内循环t1、t2 两表关联时,最简略的 Nested-Loop 的算法如下: for each row in t1 matching range { for each row in t2 { if row satisfies join conditions, send to client }}这个算法的意思就是:每次将一行数据从外循环传递到内循环进行比照。而外循环中的表就叫 outer 表,内循环中的表就是 inner 表。 ...

December 15, 2021 · 4 min · jiezi