MySQL性能优化(三):深入理解索引的这点事

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MySQL性能优化(三):深入理解索引的这点事

一、引入 Flink CDC 的背景
img

公司引入 CDC 技术,主要基于以下四个角色的需求:

物流科学家:需要库存、销售订单、物流账单等数据用于做分析。
开发:需要同步其他业务系统的基本信息。
财务:希望财务数据能够实时传送到财务系统,而不是月结前才能看到。
老板:需要数据大屏,通过大屏查看公司的业务和运营情况。
img

CDC 是数据捕获变更的技术。广义上来说,但凡能够捕获数据变更的技术,都能被称为 CDC。但通常我们说的 CDC 技术主要面向数据库的变更。

CDC 的实现方式主要有两种,分别是基于查询和基于日志:

基于查询:查询后插入、更新到数据库即可,无须数据库的特殊配置以及账号权限。它的实时性基于查询频率决定,只能通过提高查询频率来保证实时性,而这必然会对 DB 造成巨大压力。此外,因为是基于查询,所以它无法捕获两次查询之间数据的变更记录,也就无法保证数据的一致性。
基于日志:通过实时消费数据的变更日志实现,因此实时性很高。而且不会对 DB 造成很大的影响,也能够保证数据的一致性,因为数据库会将所有数据的变动记录在变更日志中。通过对日志的消费,即可明确知道数据的变化过程。它的缺点是实现相对复杂,因为不同数据库的变动日志实现不一样,格式、开启方式以及特殊权限都不一样,需要针对每一种数据库做相应的适配开发。
img

正如 Flink 的宣言 “实时即未来”,在如今的大背景下,实时性是亟待解决的重要问题。因此,我们将主流 CDC 基于日志的技术做了对比,如上图所示:

数据源:Flink CDC 除了对传统的关系型数据库做到了很好的支持外,对文档型、NewSQL(TiDB、OceanBase) 等当下流行的数据库都能够支持;Debezium 对数据库的支持相对没有那么广泛,但是对主流的关系型数据库都做到了很好的支撑;Canal 和 OGG 只支持单一的数据源。
断点续传:四种技术都能够支持。
同步模式:除了 Canal 只支持增量,其他技术均支持全量 + 增量的方式。而全量 + 增量的方式意味着第一次上线时全量到增量的切换过程全部可以通过 CDC 技术实现,无须人为地通过全量的任务加上增量的 job 去实现全量 + 增量数据的读取。
活跃度:Flink CDC 拥有非常活跃的社区,资料丰富,官方也提供了详尽的教程以及快速上手教程;Debezium 社区也相当活跃,但资料大多是英文的;Canal 的用户基数特别大,资料也相对较多,但社区活跃度一般;OGG 是 Oracle 的大数据套件,需要付费,只有官方资料。
开发难度:Flink CDC 依靠 Flink SQL 和 Flink DataStream 两种开发模式,尤其是 Flink SQL,通过非常简单的 SQL 即可完成数据同步任务的开发,开发上手尤为简单;Debezium 需要自己解析采集到的数据变更日志进行单独处理,Canal 亦是如此。
运行环境依赖:Flink CDC 是以 Flink 作为引擎,Debezium通常是将 Kafka connector 作为运行容器;而 Canal 和 OGG 都是单独运行。
下游丰富程度:Flink CDC 依靠 Flink 非常活跃的周边以及丰富的生态,能够打通丰富的下游,对普通的关系型数据库以及大数据存储引擎 Iceberg、ClickHouse、Hudi 等都做了很好的支持;Debezium 有 Kafka JDBC connector, 支持 MySQL 、Oracle 、SqlServer;Canal 只能直接消费数据或将其输出到 MQ 中进行下游的消费; OGG 因为是官方套件,下游丰富程度不佳。
二、现今内部落地的业务场景
img

2018 年之前,大健云仓数据同步的方式为:通过多数据应用定时同步系统之间的数据。
2020 年之后,随着跨境业务的飞速发展,多数据源应用经常打满 DB 影响在线应用,同时定时任务的执行顺序管理混乱。
因此, 2021 年我们开始调研选型 CDC 技术,搭建了小型试验场景,进行小规模的试验。
2022 年,上线了基于 Flink CDC 实现的 LDSS 系统库存场景同步功能。
未来,我们希望依托 Flink CDC 打造数据同步平台,通过界面的开发和配置完成同步任务的开发、测试和上线,能够全程在线管理同步任务的整个生命周期。
img

LDSS 库存管理的业务场景主要有以下四种:

仓储部门:要求仓库的库存容量和商品品类分布合理,库存容量方面,需要留一些 buffer 以防突如其来的入库单导致爆仓;商品品类方面,季节性的商品库存分配不合理导致热点问题,这必将给仓库的管理带来巨大挑战。
平台客户:希望订单处理及时,货物能够快速、精准地交到客户手上。
物流部门:希望能够提升物流效率,降低物流成本,高效利用有限的运力。
决策部门:希望 LDSS 系统能够对在何时何地新建仓库提供科学的建议。
img

上图为 LDSS 库存管理分单场景架构图。

首先,通过多数据源同步的应用向下拉取仓储系统、平台系统以及内部 ERP 系统数据,将所需数据抽取到 LDSS 系统的数据库中,以支撑 LDSS 系统订单、库存、物流三大模块的业务功能。

其次,需要产品信息、订单信息以及仓库信息才能进行有效的分单决策。多数据源定时同步任务基于 JDBC 查询,通过时间做筛选,同步变更的数据到 LDSS 系统中。 LDSS 系统基于这些数据做分单决策,以获得最优解。

img

定时任务同步的代码,首先需要定义定时任务、定义定时任务的类、执行方法以及执行间隔。

上图左侧为定时任务的定义,右侧是定时任务的逻辑开发。首先,打开 Oracle 数据库进行查询,然后 upsert 到 MySQL 数据库,即完成了定时任务的开发。此处以接近原生 JDBC 的查询方式,将数据依次塞到对应的数据库表中,开发逻辑十分繁琐,也容易出现 bug。

因此,我们基于 Flink CDC 对其进行了改造。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
关系型数据库 MySQL 索引
mysql 分析5语句的优化--索引添加删除
mysql 分析5语句的优化--索引添加删除
11 0
|
16天前
|
存储 监控 关系型数据库
轻松入门Mysql:MySQL性能优化与监控,解锁进销存系统的潜力(23)
轻松入门Mysql:MySQL性能优化与监控,解锁进销存系统的潜力(23)
|
16天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
|
10天前
|
SQL 缓存 关系型数据库
mysql性能优化-慢查询分析、优化索引和配置
mysql性能优化-慢查询分析、优化索引和配置
76 0
|
16天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
16天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
7天前
|
存储 关系型数据库 MySQL
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
【4月更文挑战第9天】InnoDB数据库使用B+树作为索引模型,其中主键索引的叶子节点存储完整行数据,非主键索引则存储主键值。主键查询只需搜索一棵树,而非主键查询需两次搜索,因此推荐使用主键查询以提高效率。在插入新值时,B+树需要维护有序性,可能导致数据页分裂影响性能。自增主键在插入时可避免数据挪动和页分裂,且占用存储空间小,通常更为理想。然而,如果场景仅需唯一索引,可直接设为主键以减少查询步骤。
13 1
【MySQL实战笔记】 04 | 深入浅出索引(上)-02
|
9天前
|
关系型数据库 MySQL 数据库
6. 了解过Mysql的索引嘛 ?
了解MySQL的索引类型,包括单列索引(普通、唯一、主键和全文索引)和组合索引。单列索引用于一列,如普通索引允许重复值,唯一索引和主键索引不允许,后者不允许空值。全文索引适用于特定文本字段。组合索引是多列的,遵循左前缀原则,通常推荐用于提高查询效率,除非是主键。
12 0
|
11天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
29天前
|
关系型数据库 MySQL 数据库
rds安装数据库客户端工具
安装阿里云RDS的数据库客户端涉及在本地安装对应类型(如MySQL、PostgreSQL)的客户端工具。对于MySQL,可选择MySQL Command-Line Client或图形化工具如Navicat,安装后输入RDS实例的连接参数进行连接。对于PostgreSQL,可以使用`psql`命令行工具或图形化客户端如PgAdmin。首先从阿里云控制台获取连接信息,然后按照官方文档安装客户端,最后配置客户端连接以确保遵循安全指引。
82 1