【视频】云原生数据仓库 Analyticdb MYSQL 版-解析与实践-3|学习笔记(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
对象存储 OSS,标准 - 本地冗余存储 20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: 快速学习【视频】云原生数据仓库 Analyticdb MYSQL 版-解析与实践-3

开发者学堂课程【数据仓库 ACP 认证课程【视频】云原生数据仓库 Analyticdb MYSQL 版-解析与实践-3】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/928/detail/14625


【视频】云原生数据仓库 Analyticdb MYSQL 版-解析与实践-3


5. DML 外表式数据导入导出-oss

image.png步骤与刚才讲解的类似:

(1)确定目标和源表:

OSS:文件

AnalyticDB:数据表

首先确定目标和源表,oss上均是以文件的形式存储,以文件形式进行导入,加载到analyticDB MYSQL 当中,同样可以将analyticDB MYSQL 数据导出到文件当中。

(2)创建映射表:

AnalyticDB中创建该数据表的映射表

(3)DML命令导出

通过INSERT INTO或者INSERT overwrite来实现数据的导入

在adb中创建表数据表,此时即可通过INSERT INTO命令实现数据的导入导出

(4)外部表对应的参数

ENGINE=”oss“对应的引擎为oss对象存储

如果需要访问oss当中对应的文件需要知道“end point” “url’’”acessid””acesskey”以及在oss当中列分隔符”delimiter”

注意oss与analyticDB MySQL所属的区域相同,如都是华东,即在该地区创建产品,若是不在同一地区则无法实现该数据的导入导出。

ENGINE=”OSS”---存储引擎为odps

TABLE_PROPERTIES=’{

“endpoint" :"oss-cn-xxxxxx-internal.aliyuncs.com",


---OSS的EndPoint (域名节点)


“url”:”oss://bucket-name/xxx/”

---OSS中文件夹的地址,以/结尾。

“accessid”: "LTAIF*****5FsE・,


“AccessKey”:“Ccw****iWjv*“,


---访问OSS文件的Access key和 Secret


“delimiter”:“;”

---定义OSS中数据文件的列分隔符

2. 数据同步:RDS到Analytic DB MYsql 同步链路整体介绍

数据的导入导出为一次性的实时的,无法进行数据的改变,通过数据同步,阿里云的同步输入来搭建同步数据链路,来实现对数据源实时数据的传输。

DTS:数据传输服务,支持关系型数据库、NOSQL及大数据(qlap)等数据源之间的数据传输与交换。在阿里云的多款产品之间通过数据传输进行数据的导入导出实现同步链路的搭建。

通过DTS同步到多种数据源数据到analyticDB MySQL中,analyticDB MySQL为数仓产品,本身并不生产数据,数据均来源于外部数据源,通过多个数据源传输数据来实现交互式BI分析和数仓迁移

数据源支持ORACLE、POLARDB mysql、 POLARDB-X等等,这些数据源通过DTS来实现数据加载到ADB mysql当中,同时mysql为后面的商业大表、大屏,来提供数据的支撑。

同样DTS也可以实现数据的迁移,下面重点介绍RDS MYSQL 到analyticDB MySQL的同步流程,其他数据源同步流程类似。

image.png

7. 数据同步:整体介绍

同步由结构初始化,全量同步,增量同步三个步骤组成

image.png很好理解,原始数据存在于RDS MySQL,数据存在自己的数据结构,需要在adb当中实现结构初始化,把表中数据结构在analyticDB MySQL建立结构,再进行全量同步,将RDS MySQL存量历史数据全量同步到在analyticDB MySQL,随着后续RDS MySQL为业务数据库面向生产日常业务,数据进行增删改查,通过增量同步保证RDS MySQL同步到analyticDB MySQL当中,这就是数据同步的三个过程。

(1)结构初始化:

是同步的第一个环节,即在analyticDB MySQL端创建于源MySQL对应表的结构。

①确认analyticDB MySQL和MySQL间表的结构关系。

②根据配置的表结构信息,DTS会自动的在analyticDB MySQL端创建表。例如下图中,指定了表和主键列和分布列,DTS会根据这些信息,加上其他列的信息,在AnalyticDB MySQL端建表。

分布列是AnalyticDB MySQL的表结构属性,AnalyticDB MySQL会根据该列把数据在多个节点上进行分布式储存。注意,源端必须存在主键列,否则无法正确同步数据。

image.png(2)全量同步

在结构初始化后,DTS会进行全量同步,然后在此基础上,在基于binlog进行增量同步,全量同步的方法,基于主键划分区间,然后并行同步到analyticDB MySQL中,全量数据一般规模大,为了提高效率对原表进行划分,进行并行处理。

可以简单的理解为按主键范围把数据从MySQL中查询出来,并写入analyticDB MySQL,可以实现高效并行写,加快全量同步性能。

在此注意,为什么需要全量同步?

MySQL中存在大量历史数据,这些数据对应的binlog或许已经被删除,无法通过重放binlog来同步这部分数据。同时,并行、批量拉取数据并写入analyticDB MySQL,效率也比逐行解析binlog要高。

image.png 

也就是说在全量同步阶段,DTS是通过将源表按照主键进行划分,然后将每一部分数据,单独、并行写入analyticDB MySQL当中。

(3)增量同步阶段

MySQL端的修改会产生binlog,dts通过捕获并解析mysql端的binlog日志,转换为insert/update/delete等语句,并在analyticDB MySQL端回放这些操作,实现mysql到analyticDB MySQL的增量同步

结构初始化和全量同步都是一次性的,增量同步则是持续的,只要mysql端有变化,DTS就会捕获并同步到analyticDB MySQL端。

image.png日常业务流程通过DML/DDL进行修改rdsMySQL产生binlog日志,DTS在进行捕获、解析进行转换,在analyticDB MySQL中重新执行操作从而实现两个数据源的同步。

 

二、SQL优化和慢查询解决方案

analyticDB MySQL定义为针对于千万条数据的毫秒级查询引擎,是一个实时数仓产品,所以对于sql的优化及慢查询具有丰富的方案。

1. 慢查询诊断与优化:查询流程和执行计划

对于 MySQL而言 SQL语言是完成用户和系统内部存储数据之间的交互最基本的工具,在执行阶段,analyticDB MySQL执行结构切分为多个Stage来执行对,一个stage就是执行计划中某一部分的物理实体。一个查询可分为多个步骤,每一个步骤被称为stage。

如:map对原始数据作map运算过程中,后续可做reduce,一个map或一个reduce即可理解为一个stage

举例:分组聚合查询

image.png

分组聚合查询的处理流程,Controller节点会把查询的逻辑执行计划(plan)分片下发到执行计划任务的各个节点上。

对于analyticDB MySQL而言一个可分为多个stage,一个stage内部又由多个task组成,task由算子aggrerate具体执行,总体查询划分为三个阶段:先执行stage2再然后stage1之后的stage0

Stage2由4个task组成,分布在4个节点上并行地进行执行

在每一个test里包括三个基本的算子,首先是tablescan表示扫描,然后是filter表示过滤,aggregate表示区部地聚集。

Stage1与stage2存在数据呈分布与传输的过程称之为remote exchange远程数据交换,将stage2的结果传入stage1

传输方式有多种,在stage1中存在2个task ,remote exchange是将上一个stage的结果传入,并完成两个结果的聚合

Stage2由4个task组成,并执行数据的扫描,过滤以及局部聚合等操作

Stage1由2个task组成,并执行最终的聚合操作

Stage0由1个task组成,负责汇总

2. 算子

一个算子对应数据处理的基本逻辑,一个算子负责完成一个基本的数据处理逻辑,一组算子按照执行计划完成数据的一组处理规则。具体算子介绍如下:

Aggregation:通过sum() count() avg()等函数对数据进行聚合或分组聚合操作。

Distinctlimit:对SQL语句中的DISTINCT LIMIT操作。

Filter:使用存储层数据的索引进行过滤,如果存储层没有索引,需要在计算层使用算子进行过滤。

Remote exchange :用来表示上游向下游stage传输数据时所用的方法,包括:broadcast、repartition、gather。

Jion :对应SQL语句中的jion操作。

Project:对应SQL语句中对待定字段的投影操作,如:case when then控制流,conccat()函数等。

Stageoutput :用于将当前stage处理后的数据通过网络传输到下游stage的节点。

Sort :应SQL语句中对ORDER BY子句的操作,执行ORDER BY 字段的排序,

Tablescan :用于从数据源读取数据,如果需要过滤数据,那麽数据由底层数据源使用索引高效完成。

Topn :对应SQL语句中ORDER BY LIMIT,M,N查询。

3. 影响查询性能的因素

(1)集群规则

·不同集群规格的cpu核数、内存大小和数据存储介质等属性不同,处理子任务的能力也就不同,需要结合业务查询特征来选择集群规格。

·以Join或分组聚合为主的业务查询会消耗较多的CPU和内存资源。

·扫描数据和简单分组聚合操作的查询会消耗较多的磁盘I/O资源。

(2)节点数量

analyticDB MySQL版本使用了分布式数据处理架构,一条查询会被分解成多个Stage在不同的节点上并行执行。所以如果集群中的节点数量越多,analyticDB MySQL版处理查询的能力也会越强。您可以根据实际的业务需求来决定集群节点的购买数量,更多详情,可以参考创建集群。

(3)数据分布特征

·由于使用了分布式数据处理架构,具备将一条查询分解到多个节点上并行执行的能力。

·充分利用多节点来并行处理查询,还取决于数据在储存节点上的分布特征。

·如果数据能够均匀分布在储存节点上,多个子任务在处理数据时,就能几乎同时结束任务。

·数据分布不均匀,子任务在处理数据是会存在时间上的长尾,从而影响最终的查询效果。

(4)数据量大小

·在处理查询时,通常不会讲处理过程中的临时结果暂时写到磁盘里,而是尽量在内存中将所有数据处理掉。

·如果查询需要处理的数据量较大,就可能会长时间占用大量的资源,导致整理查询效率降低,进而影响最终的查询效果。

·表储存的数据量较大,在执行索引过滤、明细数据读取等操作时会出现争抢磁盘I/O资源,导致查询变慢。

(5)查询并发度

·能同时处理的查询数量也会存在上限。如果查询的并发度过高,集群节点资源已达到瓶颈,那么后台的查询会出现较长时间的排队,影响整体查询效果。

(6)查询复杂度

·查询的负责度不同造成的压力也不同。

·如果查询中过滤条件过于复杂,会在数据过滤时对储存节点造成一定压力;如果查询中Join算子过多,数据可能需要在不同节点间进行多次的网络传输,造成网络阻塞;如果查询中分组字段过多,也会占用较多的内存资源。

相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
4月前
|
存储 SQL 监控
数据中台架构解析:湖仓一体的实战设计
在数据量激增的数字化时代,企业面临数据分散、使用效率低等问题。数据中台作为统一管理与应用数据的核心平台,结合湖仓一体架构,打通数据壁垒,实现高效流转与分析。本文详解湖仓一体的设计与落地实践,助力企业构建统一、灵活的数据底座,驱动业务决策与创新。
|
2月前
|
存储 SQL 机器学习/深度学习
一文辨析:数据仓库、数据湖、湖仓一体
本文深入解析数据仓库、数据湖与湖仓一体的技术原理与适用场景。数据仓库结构严谨、查询高效,适合处理结构化数据;数据湖灵活开放,支持多模态数据,但治理难度高;湖仓一体融合两者优势,实现低成本存储与高效分析,适合大规模数据场景。文章结合企业实际需求,探讨如何选择合适的数据架构,并提供湖仓一体的落地迁移策略,助力企业提升数据价值。
一文辨析:数据仓库、数据湖、湖仓一体
|
7月前
|
人工智能 关系型数据库 OLAP
光云科技 X AnalyticDB:构建 AI 时代下的云原生企业级数仓
AnalyticDB承载了光云海量数据的实时在线分析,为各个业务线的商家提供了丝滑的数据服务,实时物化视图、租户资源隔离、冷热分离等企业级特性,很好的解决了SaaS场景下的业务痛点,也平衡了成本。同时也基于通义+AnalyticDB研发了企业级智能客服、智能导购等行业解决方案,借助大模型和云计算为商家赋能。
604 17
|
2月前
|
存储 机器学习/深度学习 数据采集
数据湖 vs 数据仓库:大厂为何总爱“湖仓并用”?
数据湖与数据仓库各有优劣,湖仓一体架构成为趋势。本文解析二者核心差异、适用场景及治理方案,助你选型落地。
数据湖 vs 数据仓库:大厂为何总爱“湖仓并用”?
|
5月前
|
监控 关系型数据库 MySQL
DTS实时同步进阶:MySQL到AnalyticDB毫秒级ETL管道搭建
本方案采用“Binlog解析-数据清洗-批量写入”三级流水线架构,实现MySQL到AnalyticDB的高效同步。通过状态机解析、内存格式转换与向量化写入技术,保障毫秒级延迟(P99<300ms)、50万+ TPS吞吐及99.99%数据一致性,支持高并发、低延迟的数据实时处理场景。
173 10
|
6月前
|
存储 缓存 分布式计算
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
本文将深入探讨基于 StarRocks 和 Iceberg 构建的云原生湖仓分析技术,详细解析两者结合如何实现高效的查询性能优化。内容涵盖 StarRocks Lakehouse 架构、与 Iceberg 的性能协同、最佳实践应用以及未来的发展规划,为您提供全面的技术解读。 作者:杨关锁,北京镜舟科技研发工程师
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
|
10月前
|
人工智能 关系型数据库 MySQL
AnalyticDB MySQL版:云原生离在线一体化数据仓库支持实时业务决策
AnalyticDB MySQL版是阿里云推出的云原生离在线一体化数据仓库,支持实时业务决策。产品定位为兼具数据库应用性和大数据处理能力的数仓,适用于大规模数据分析场景。核心技术包括混合负载、异构加速、智能弹性与硬件优化及AI集成,支持流批一体架构和物化视图等功能,帮助用户实现高效、低成本的数据处理与分析。通过存算分离和智能调度,AnalyticDB MySQL可在复杂查询和突发流量下提供卓越性能,并结合AI技术提升数据价值挖掘能力。
277 16
|
监控 数据挖掘 OLAP
深入解析:AnalyticDB中的高级查询优化与性能调优
【10月更文挑战第22天】 AnalyticDB(ADB)是阿里云推出的一款实时OLAP数据库服务,它能够处理大规模的数据分析任务,提供亚秒级的查询响应时间。对于已经熟悉AnalyticDB基本操作的用户来说,如何通过查询优化和性能调优来提高数据处理效率,是进一步提升系统性能的关键。本文将从个人的角度出发,结合实际经验,深入探讨AnalyticDB中的高级查询优化与性能调优技巧。
602 4
|
存储 SQL 缓存
AnalyticDB 实时数仓架构解析
AnalyticDB 是阿里云自研的 OLAP 数据库,广泛应用于行为分析、数据报表、金融风控等应用场景,可支持 100 trillion 行记录、10PB 量级的数据规模,亚秒级完成交互式分析查询。本文是对 《 AnalyticDB: Real-time OLAP Database System at Alibaba Cloud 》的学习总结。
308 1
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
861 1